Avatar billede surreal Nybegynder
31. juli 2001 - 10:39 Der er 7 kommentarer

adLockBatchOptimistic

Jeg vil gerne lave en lille script, der flytter indholdet fra en DB til en anden. Jeg vil også gerne kunne kald AddNew en gang og lave en UpdateBatch til sidst. Sådan ser eksemplet ud:

...
SQL = \"SELECT * FROM tTest0;\"
oRS0.Open SQL, oConn, 0, 4
SQL0 = \"SELECT * FROM tTest1;\"
oRS1.Open SQL0, oConn, 0, 4
oRS1.AddNew
    while not oRS0.Eof                    oRS1(\"s1\").Value = oRS0(\"s1\").Value
    oRS1(\"s2\").Value = oRS0(\"s2\").Value
    oRS1(\"s3\").Value = oRS0(\"s3\").Value
    oRS1(\"s4\").Value = oRS0(\"s4\").Value
        oRS0.MoveNext 
    wend
oRS1.UpdateBatch
...

Det virker ikke med mindre oRS1.AddNew ligger inden for while løkken. Er der nogen der kan hjælp?

På forhånd tak.
Avatar billede zeptic Nybegynder
31. juli 2001 - 10:59 #1
så vidt jeg kan se, så skal du også lave oRS1.MoveNext inde i while løkken. ellers laver du kun en record, som du overskriver ved hvertt gennemløb af løkken.
Avatar billede surreal Nybegynder
31. juli 2001 - 11:08 #2
Det har jeg lige prøvet men det gik ikke. Recordsettet kan nok finde ud af at køre videre til den næste. Jeg fik denne fejl:

...
Row handles must all be released before new ones can be obtained.
...
Avatar billede zeptic Nybegynder
31. juli 2001 - 11:18 #3
måske det skyldes at det ikke er værdier fra oRS0 der gemmes, men handles dertil?
Prøv istedet at indsætte \'faste\' værdier:

oRS1.AddNew
    while not oRS0.Eof
      oRS1(\"s1\").Value = value1
      oRS1(\"s2\").Value = value2
     oRS1(\"s3\").Value = value3
      oRS1(\"s4\").Value = value4
      oRS0.MoveNext 
      oRS1.MoveNext
    wend
oRS1.UpdateBatch

og så sæt value[1-4] til noget relevant.
Avatar billede zeptic Nybegynder
31. juli 2001 - 11:20 #4
hvis det virker, så kan man jo prøve flg.:

oRS1.AddNew
    while not oRS0.Eof
      value1=oRS0(\"s1\").Value
      value2=oRS0(\"s2\").Value
      value3=oRS0(\"s3\").Value
      value4=oRS0(\"s4\").Value
      oRS1(\"s1\").Value = value1
      oRS1(\"s2\").Value = value2
      oRS1(\"s3\").Value = value3
      oRS1(\"s4\").Value = value4
      oRS0.MoveNext 
      oRS1.MoveNext
    wend
oRS1.UpdateBatch

Avatar billede surreal Nybegynder
31. juli 2001 - 11:25 #5
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

Er det ikke fordi der ikke er blevet skevet til DB\'en endnu? Det sker første når UpdateBatch kaldes. Dvs at vi står altid ved bof inden UpdateBatch.
Avatar billede zeptic Nybegynder
31. juli 2001 - 11:38 #6
Det tyder ihvertfald på det.

Kan du køre en UpdateBatch, hvis du ikke pakker det ind i while not oRSO.EOF? F.eks:

oRS1.AddNew
for i=1 to 10
      oRS1(\"s1\").Value = i
      oRS1(\"s2\").Value = i
      oRS1(\"s3\").Value = i
      oRS1(\"s4\").Value = i
      oRS1.MoveNext
next
oRS1.UpdateBatch

HVis du kan det, så er det formentlig din oRSO, der er problemet.
Avatar billede surreal Nybegynder
31. juli 2001 - 11:40 #7
Måske men hvis antalet af records bliver ændret under udførelsen kan en for løkke ikke finde ud af.
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