01. oktober 2007 - 13:47Der er
16 kommentarer og 1 løsning
Langsom update af record
Ved brug af Visual Basic opdaterer eller editerer jeg poster i en tabel. Opdateringen virker fint - tabelen bliver opdateret.
Men når jeg i Visual Basic koden umiddelvart efter vil hente data, så får jeg får jeg gamle data.
Hvis jeg fx. indsætter en ny post, der med autonummerering får det højeste løbenummer, så giver en efterfølgende forespørgsel efter det højeste løbenummer kun det næsthøjeste.
Hvis jeg sætter en pause ind, så får jeg det rigtige resultat.
Min kode ser ca. sådan ud: ************** Dim db as database Dim rst as recordset
set db = opendatabase(sti) set rst =db.openrecordset("tTabel")
with rst .addnew !data=me!feltData.value .update end with '(Med pause får dummy det højeste løbenummer, uden får dummy det næsthøjeste! ) dummy=dmax("[løbenummer]","tTabel") ************ Jeg har fundet et trick til det højeste, idet jeg laver en løkke, som sammenligner det gamle højeste med det nye højeste. Men det virker ikke når jeg skal editerer.
Og at indsætte en pause er ikke den rigtige løsning, og den sikkert kun indtil der er tilstrækkeligt mange poster eller systemet kører langsomt.
Jeg glemte lige at skrive db.close... ************** Dim db as database Dim rst as recordset
set db = opendatabase(sti) set rst =db.openrecordset("tTabel")
with rst .addnew !data=me!feltData.value .update end with '(Med pause får dummy det højeste løbenummer, uden får dummy det næsthøjeste! ) db.close ... dummy=dmax("[løbenummer]","tTabel") ************
argh - du skal selvfølgelig lukke objekterne inden de settes = nothing
rst.close db.close set rst = nothing set db = nothing
PS Hvis du skal bruge autonumret til noget bør du bruge variablen @@IDENTITY efter rst.update: Set rst = db.OpenRecordset("SELECT @@IDENTITY") dummy = rst.Fields(0).Value
Efter at have fået jeres råd slettede jeg først min egen løsning. Herefter har det ikke været muligt at genskabe "fejlene" - arghhh *#¤5%&# Det er sgu' irriterende!
.requery skal vist have mere input, men tak fordi du gad bruge tid på at svare ->spg: 30
rst.colose og nothing har jeg sat ind og det kører fint med dem og det ser rigtigt ud at gøre sådan. Tak. ->nih: 120
nope! Og jeg bruger hellere tre uger på at forstå hvorfor end at at lave det om.
Kort fortalt har jeg nu med sikkerhed konstateret, at... **** Dim db as database Dim rst as recordset
set db = opendatabase(sti) set rst =db.openrecordset("tTabel")
with rst .addnew ' eller tilsvarende med edit !data=me!feltData.value .update end with dummy=dlookup("[data]", "tTabel","[løbenummer]=" & løbenummeret) **** ... medfører, at dummy stadig får den gamle værdi af data. Og det på trods af at de nye data er korrekt gemt i tabellen.
Man kan selvfølgelig lave det hele om, men grundlæggende mener jeg at sekvensen af koden burde give det rigige resultat.
Ved at lægge forsinkende ind før dummy, så giver det nogen gange det rigtige resultat. Men det er jo ikke måden at gøre det på. dlookup får simpelthen ikke fat i den seneste opdatering, og jeg kan ikke fatte hvorfor. Forskellige traveseringer og hjælpekoder viser, at tabellen er opdateret, men dlookup kan alligevel ikke få fat i opdateringen.
DAMN!!!!
Synes godt om
Ny brugerNybegynder
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.