Einzelnen Beitrag anzeigen

Echtet

Registriert seit: 5. Jan 2004
Ort: Dortmund
21 Beiträge
 
Delphi XE3 Professional
 
#7

Re: Gennerelle frage zur Verteilung der Datenbankkomponenten

  Alt 26. Jan 2009, 19:35
Hallo F.W.

Vielleicht hilft Dir folgender Quellcode beim Testen, ob dies Deinen Vorstellungen entspricht:

Annahme, IBX-Komponenten, aber die anderen Kompos funktionieren analog. Ich werfe keine DB-Komponenten auf die Formulare (Ausnahme: Im DataModule die Komponente IBDatabase.

In den Formularen rufe ich z.B. folgende Routine auf:

Delphi-Quellcode:
procedure NotizErfassen;
var i, AnzahlNotizen : integer;
    Query:TIBQUERY;
    Transaktion : TIBTransaction;
    SQL : string;
begin
  hLog.Add('');
  hLog.Add(DateTimetoStr(now) + ': ' + '***** Notiz erfassen *****');
  AnzahlNotizen := frmMain.AdvCodeListNotizen.CodeBlocks.Count;
  frmMain.AdvCodeListNotizen.CodeBlocks.Add(DateTimeToStr(Now));
  for i := 0 to frmMain.MemoNotizen.Lines.Count do
  begin
    frmMain.AdvCodeListNotizen.CodeBlocks.Items[AnzahlNotizen].Code.Add(frmMain.MemoNotizen.Lines[i]);
  end;

 //sichern der Notizen in Tabelle TBLNOTIZEN

  //Queryobjekt unbd Transaktion erzeugen
  Query := TIBQUERY.create(nil);
  Query.Database := DataModule1.IBDatabase; //Datenbank zuordnen
  Transaktion := TIBTransaction.Create(NIL); //Transaktion dyn. erzeugen
  Transaktion.DefaultDatabase := DataModule1.IBDatabase; //Datenbank zuordnen
  Transaktion.AllowAutoStart := False; //Transaktionen müssen explizit gestartet werden
  Query.Transaction := Transaktion; //Transaktion zuordnen
  Transaktion.StartTransaction; //Transaktionsbeginn

  if Length(frmMain.MemoNotizen.Text) > 0 then
  begin
    SQL := 'insert into tblnotizen (id, notiz) '
            + 'values (gen_id( gen_tblnotizen_id,1),'
            + ':Memo' + ')';
    Query.sql.Text := SQL;
    Query.ParamByName('Memo').asBlob := frmMain.MemoNotizen.Text;

    //Query ausführen
    Try
      Try
        Query.ExecSQL; //Abfrage ausführen
      Finally
      end; //Finally
    EXCEPT
      on E:Exception do
      begin
          StatusMeldung(rot, 'Fehler beim Anlegen der Notizen! (Ausführen der Abfrage fehlerhaft)');
          hLog.Add(DateTimetoStr(now) + ': ' + 'SQL-Befehl: ' + SQL);
          Transaktion.Rollback;
          Raise;
      end;
    END; //Except

  //Query und Transaktion beenden
  Try
    Try
      Transaktion.Commit;
      StatusMeldung(gruen, 'Notiz wurde erfolgreich gesichert');
    Finally
      frmMain.MemoNotizen.Clear; //Anschließend löschen
      Query.free;
      Transaktion.Free;
      Screen.Cursor := crDefault;
    end; //Finally
  EXCEPT
    on E:Exception do
    begin
        StatusMeldung(rot, 'Sicherung der Notiz nicht möglich -> Rollback der Transaktion!');
        Transaktion.Rollback;
        Raise;
    end;
  END; //Except

  end //if Length(MemoNotizen.Text) > 0 then
  else
  begin
    if Length(frmMain.MemoNotizen.Text) = 0 then
    begin
      StatusMeldung(rot, 'Notiz darf nicht leer sein!');
    end;
  end; //else
  NotizenLesen; //zum Aktualisieren
end;
Viele Grüße,

Echtet
Thimo Echtermann
  Mit Zitat antworten Zitat