Avatar billede retep Nybegynder
02. marts 2001 - 11:23 Der er 2 kommentarer og
3 løsninger

InterBase igen ;)

Hej igen ;)

Jeg prøver at lave en procedure der skal opdatere indholdet af en combobox. Jeg kalder denne procedure når jeg viser formen (onShow) og når jeg har indsat en ny tubel i tabellen. Men når den kaldes efter indsættelsen bliver comboboxen eller det vil sige datasettet ikke opdateret. Hvorfor gør det ikke det?

Her er min procedure:

procedure OpdaterCBAlle;
Begin

  if not formOpretVaregruppe.IBTransAlle.InTransaction then
  begin
    formOpretVaregruppe.IBTransAlle.StartTransaction;
    try
      formOpretVaregruppe.IBDataSetAlle.Open;
      formOpretVaregruppe.IBDataSetAlle.First;

      formOpretVaregruppe.CBAlle.Clear;
      while (Not formOpretVaregruppe.IBDataSetAlle.Eof) do
      begin
          formOpretVaregruppe.CBAlle.Items.Add(formOpretVaregruppe.IBDataSetAlle.FieldByName(\'NAVN\').asString);
          formOpretVaregruppe.IBDataSetAlle.Next;
      end;
      formOpretVaregruppe.IBTransAlle.Commit;
    except
        formOpretVaregruppe.IBTransAlle.Rollback;
    end;
  end;

end;

Kommentarer til hvordan koden ellers kunne gøres smartere vil jeg også meget gerne have ;)

Mvh
Retep
Avatar billede martinlind Nybegynder
02. marts 2001 - 11:37 #1
Du behøver ihvertfald ikke din transaction hvis du kun læser fra en tabel og dermed heller ikke commit og rollback, det er kun ved updates du skal commit det du lige har skrevet til tabelen

Men bortset fra det ser det ud som om alt er ok.

Det der måske er problemmet er at du ikke for commitet inden du læser ind i din combobox og derfor er din updatering ikke med.

/Martin
Avatar billede kim_friis Nybegynder
02. marts 2001 - 11:50 #2
Før din IBDataSetAlle.open skal du lige have en IBDataSetAlle.Close. Eller bliver den ikke refreshet. (Og så skal du også være sikker på at den anden transaktion som du indsætter med er committet hvis ikke det er den samme)
Avatar billede pellelil Nybegynder
02. marts 2001 - 11:54 #3
ALT i interbase foregår i transaktioner OGSÅ en simpel Select-SQL. Men når der er tale om en Select så er det ligemeget om denne COMMIT\'es eller ROLLBACK\'es da resultatet er det samme (der sker ikke noget på din Database).

Igen skal du være opmærksom på at når du laver en Commit eller Rollback på din Transaktion så stoppes transaktionen og ALLE datasets der benytter denne transaktion lukkes (jeg gentager <G> ALT i interbase foregår i transaktioner).

Hvis du benytter EEN transaktion til hele din application (evt. ved at placere denne i dit Data Module) så er knap så heldigt at lave en Commit/Rollback - brug i stedet CommitRetaining/RollbackRetaining. Ligeledes i dette tilfælde er der ingen grund til hverken at COMMIT\'e eller ROLLBACK\'e da transaktionen først behøver at blive lukket/frigivet når du stopper din application.
Avatar billede retep Nybegynder
02. marts 2001 - 12:37 #4
Ahemmmm.. Jeg har dummet mig!!! Jeg har valgt at følge Pellelils råd om at lave flere transaktioner i et tidligere spørgsmål. Men i min insert Query var jeg kommet til at sætte dén til den transaktion der ligger i mit datamodul, og som kun bliver comitted nmår programmet lukkes. Duuuumt!

Jeg har fordelt pointene imellem jer, da jeg har lært lidt af hver.

Tak for hjælpen! :)
Retep
Avatar billede martinlind Nybegynder
02. marts 2001 - 12:43 #5
Selv tak *S*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester