02. marts 2001 - 11:23Der 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 ;)
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.
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)
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.
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.
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.