Announcement

Collapse
No announcement yet.

Transaktionen (Interbase/IBX)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Transaktionen (Interbase/IBX)

    Hallo Leute!
    <BR>Habe mal wieder ein echtes Anfängerproblem:<BR>
    Im folgenden Quellcode werden via IBQuery (INSERT INTO...) mehrere Daten in eine Interbase-DB geschrieben
    (nach Druücken des Speichern-Buttons).<BR>

    <BR>
    <BR>

    procedure TPopUp.ButtonSpeichernClick(Sender: TObject);<BR>
    begin<BR>
    IBQuery1.ParamByName('Memo').AsMemo := MemoNeu.Text;<BR>
    IBQuery1.ParamByName('Bild').LoadFromFile('C:\Pros t.bmp',ftBlob);<BR>
    IBQuery1.ParamByName ('Rubrik').AsInteger := DBLookupComboBox1.KeyValue;<BR>
    IBQuery1.ParamByName('Typ').AsInteger := DBLookupComboBox2.KeyValue;<BR>
    IBQuery1.ParamByName('Titel').AsString := NeuTitel.Text;<BR>
    IBQuery1.ParamByName('Datum').AsDate := Date;<BR>

    IBQuery1.ExecSQL;<BR>
    IBTable1.Refresh;<BR>

    <BR>
    end;<BR>
    <BR>
    <BR>
    So weit, so gut.<BR>
    Leider kann man sich die Änderungen erst nach Neustart der Anwendung anzeigen lassen.<BR> Ich weiß wohl, dass das irgendwie mit IBTransaction.Commit zu lösen ist, bin aber nach mehreren Versuchen immer noch nicht schlauer! ;-( <BR>
    Es gibt zwar ein riesen Beispiel dazu bei A. Kosch, aber das ist so umfangreich, dass ich nicht durchblicke!<BR>
    Hat irgendjemand einen TiPP????

  • #2
    Hallo Martin,

    ich habe auf Arbeit die IBX-Komponenten nicht zur Verfügung. Nur zu Hause. Aus dem kopf weiß ich die syntax nicht so genau weil ich mit den IBO-Komponenten arbeite.

    Ich schau heute Abend mal nach.

    Wenn ich mich richtig erinnere müßtes Du der Query und der Table jeweils eine Transaction zugeordnet haben. Wird die selbe Transaction verwendet?

    Mit dem Commit der transaction werden die Daten in die Datenbank eingetragen und in Abhängigkeit vom Transactionslevel für andere Transaction (und somit auch für andere User) sichtbar. Nach dem post bzw. ExecSQL sind die Änderungen nur innerhalb der Transaction zu sehen in der die Änderung veranlaßt worden sind. Zur Übernahme der daten in die DB ist das Commit zwingend notwendig. Mit Rollback verwirfst Du die Änderungen.

    Gruß

    Torste

    Comment


    • #3
      Hallo Torsten,<BR>
      danke schon mal für die schnelle Antwort! Der IBQuery und IBTable sind genau eine Transaction zugeordnet (IBTransaction1). <BR>
      Wenn ich nach ExecSQL nun einfach ein IBTransaction1.Commit setze ändert sich das Verhalten des Progs aber nicht...
      <BR> Naja, Montag werd ich weitersehen....
      Wünsche Dir erst mal ein schönes Wochenende! <BR>
      Gruß,<BR>

      Marti

      Comment


      • #4
        Hallo Martin,

        wenn die IBQuery und die IBTable die gleiche Transaction verwenden, dann muß sich nach dem Commit die Datenmenge der IBTable schließen (einfach mal die IBTable in einem DBGrid darstellen).

        Mit dem Refresh sollte die Datenmenge neu aufgebaut werden und vorher automatisch eine neue Transaction gestartet werden.

        Gruß

        Torste

        Comment


        • #5
          Hallo Torsten, <Br> habe das Problem nun endlich gelöst.<Br>
          Da das Programm aus mehreren Units besteht, habe ich ein zentrales Datenmodul angelegt.<Br>
          Nun greift sowohl das DBGrid, in dem die eingefügten Datensätze angezeigt werden sollen als auch die IBQuery, die den Datensatz einfügt auf die Transaktion des Datenmoduls zu.
          <Br>
          Im Quellcode sieht das dann in der Unit, die für das "Einfügen" zuständig ist, so aus
          <Br>

          IBQuery1.ExecSQL;<Br>
          DataModule1.IBTransaction1.Commit;<Br>
          DataModule1.IBDataSet1.Active := false;<Br>
          DataModule1.IBTransaction1.StartTransaction;<Br>
          DataModule1.IBDataSet1.Active := true;<Br&gt

          Comment


          • #6
            Hallo Martin,

            Du hattest also doch 2 unterschiedliche Transaktionen verwendet?

            Gruß

            Torste

            Comment


            • #7
              Hallo Torsten, <BR>
              ja, sieht wohl so aus. Manchmal fehlt eben noch etwas der Durchblick...

              Comment

              Working...
              X