Avatar billede kalasin Nybegynder
01. oktober 2007 - 13:47 Der 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.

Er der mon nogen som kender den rigtige løsning?
Avatar billede Slettet bruger
01. oktober 2007 - 13:52 #1
.Requery
Avatar billede kalasin Nybegynder
01. oktober 2007 - 13:53 #2
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")
************
Avatar billede kalasin Nybegynder
01. oktober 2007 - 14:16 #3
Jeg har selv fundet en metode, som tilsyneladende virker - i hvert fald indtil videre, selv om jeg ikke synes den er elegant:

umiddelbart før db.close åbner jeg endnu en record (som er blevet dim'et)

set db2 = opendatabase(sti)
set rst2 =db.openrecordset("tTabel")
db2.close

**********
Jeg vil stadig gerne høre, om adre har den "rigtige" løsning.
Avatar billede nih Novice
01. oktober 2007 - 14:32 #4
du kan prøve at lukke dine objekter på følgende måde:

set rst = nothing
set db = nothing

rst.close
db.close

Niels
Avatar billede Slettet bruger
01. oktober 2007 - 14:32 #5
Har du prøvet...

with rst
  .addnew
  !data=me!feltData.value
  .update
end with
.Requery
db.close
Avatar billede nih Novice
01. oktober 2007 - 14:35 #6
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

Niels
Avatar billede kalasin Nybegynder
01. oktober 2007 - 15:08 #7
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
Avatar billede kalasin Nybegynder
01. oktober 2007 - 15:13 #8
'
Avatar billede kalasin Nybegynder
01. oktober 2007 - 15:18 #9
I skal vist lægge et svar fopr at få point - damn denne side mangler sgu' da en faq om sig selv
Avatar billede nih Novice
01. oktober 2007 - 15:27 #10
svar :)
Avatar billede -anders- Juniormester
01. oktober 2007 - 15:43 #11
Avatar billede nih Novice
01. oktober 2007 - 16:12 #12
spq -> dine 30 point
http://www.eksperten.dk/spm/799016

Niels
Avatar billede kalasin Nybegynder
01. oktober 2007 - 16:27 #13
Øv - nu har jeg igen "fejlene".

Der må være et eller andet trick, så man kan afgøre, om en post er blevet opdateret! Så man kan hente den med dyn nye data...
Avatar billede nih Novice
01. oktober 2007 - 16:37 #14
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
Set rst = db.OpenRecordset("SELECT @@IDENTITY")
tempId = rst.Fields(0).Value

set rst = db.openrecordset(select * from tTabel where Id = " & tempId)

Niels
Avatar billede nih Novice
01. oktober 2007 - 16:42 #15
den kan egentlig godt forkortes lidt

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

set rst = db.openrecordset("select * from tTabel where Id = [@@IDENTITY]")
Avatar billede nih Novice
02. oktober 2007 - 18:29 #16
> kalasin
Fandt du ud af det ?
Avatar billede kalasin Nybegynder
02. oktober 2007 - 19:05 #17
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!!!!
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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