/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Transactions: problemer med adoCon.rollbac~
Fra : Jesper Stocholm


Dato : 14-02-02 20:41

Jeg har en række INSERT-statements, som jeg gerne vil behandle som en
transaction. Jeg modtager en kommasepareret streng (strMultPR) fra en
bruger, og disse værdier sættes ind i en tabel. Min kode er denne:
(renset for debug-kode)

set obj = server.createobject("ADODB.Connection")
function CheckValues(strMultPr,intFolderid)
boolErr = false
ar = split(strMultPr,",")
obj.BeginTrans
for i = 0 to ubound(ar)
strSQLIns = "INSERT INTO tempMultPrLookup (prnumber) VALUES (" & trim(ar(i)) & ")"
on error resume next
obj.Execute(strSQLIns)
if not Err.number = 0 then
obj.RollbackTrans
boolErr = true
'exit function
else
obj.CommitTrans
end if
CheckValues = strError
on error goto 0
next
end function

Problemet opstår, hvis jeg giver en streng, der fx har et komma til
sidst - dvs:

45,56,78,45,

Så vil min SQL-streng se således ud:

INSERT INTO tempMultPrLookup (prnumber) VALUES ()

.... der giver en fejl. Denne fejl forsøger jeg at fange med
on error resume next, men det virker ikke. Jeg ville jo så gerne have,
at den slettede de allerede indsatte rækker vha rollbacktrans,
- men det sker ikke.

Er der nogen af jer, der kan se, hvor det går galt for mig ?

PS: kan det lade sig gøre at hoppe ud af en for-løkke ... uden helt at
hoppe ud af selve funktionen ?

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

 
 
Peter Lykkegaard (14-02-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 14-02-02 21:35


"Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
news:Xns91B5D26F6FC05spamstocholmdk@192.38.208.81...
> Jeg har en række INSERT-statements, som jeg gerne vil behandle som en
> transaction. Jeg modtager en kommasepareret streng (strMultPR) fra en
> bruger, og disse værdier sættes ind i en tabel. Min kode er denne:
> (renset for debug-kode)
>
> ar = split(strMultPr,",")
> obj.BeginTrans
> for i = 0 to ubound(ar)

If Len(trim(ar(i))) > 0 Then

> strSQLIns = "INSERT INTO tempMultPrLookup (prnumber) VALUES (" &
trim(ar(i))

Etc

mvh/Peter Lykkegaard



Jesper Stocholm (14-02-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 14-02-02 21:38

Peter Lykkegaard wrote in news:a4h6sa$1914$1@news.net.uni-c.dk:

>
> "Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
> news:Xns91B5D26F6FC05spamstocholmdk@192.38.208.81...
>> Jeg har en række INSERT-statements, som jeg gerne vil behandle som en
>> transaction. Jeg modtager en kommasepareret streng (strMultPR) fra en
>> bruger, og disse værdier sættes ind i en tabel. Min kode er denne:
>> (renset for debug-kode)
>>
>> ar = split(strMultPr,",")
>> obj.BeginTrans
>> for i = 0 to ubound(ar)
>
> If Len(trim(ar(i))) > 0 Then
>
>> strSQLIns = "INSERT INTO tempMultPrLookup (prnumber) VALUES (" &
> trim(ar(i))
>

ja ... men det er ikke på det måde jeg ønsker at løse mit problem.

Jeg kan ikke forstå, hvorfor de insert-statements der allerede er
foretaget ikke rulles tilbage. Den introducerede fejl er blot for at
kunne teste anvendelsen af rollbacktrans. Det kunne også være, at jeg fik
en streng i stedet for et tal, at tallet blev for stort, at jeg fik det
samme tal to gange eller lignende.

Som jeg ser det, så _burde_ den rulles tilbage ved fejlen ... det er i
hvert fald det jeg forstår ved transaction-begrebet, så jeg må have
overset et eller andet ...

Spørgsmålet er blot: Hvad ?

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Peter Lykkegaard (14-02-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 14-02-02 23:04


"Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
news:Xns91B5DC0A5ABCspamstocholmdk@192.38.208.81...
> Peter Lykkegaard wrote in news:a4h6sa$1914$1@news.net.uni-c.dk:
>

> Jeg kan ikke forstå, hvorfor de insert-statements der allerede er
> foretaget ikke rulles tilbage. Den introducerede fejl er blot for at
> kunne teste anvendelsen af rollbacktrans. Det kunne også være, at jeg fik
> en streng i stedet for et tal, at tallet blev for stort, at jeg fik det
> samme tal to gange eller lignende.
>
> Som jeg ser det, så _burde_ den rulles tilbage ved fejlen ... det er i
> hvert fald det jeg forstår ved transaction-begrebet, så jeg må have
> overset et eller andet ...
>
KB Q238163
HOWTO: Implement Nested Transactions with ADO and SQL Server
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q238163

mvh/Peter Lykkegaard





Jesper Stocholm (14-02-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 14-02-02 23:49

Peter Lykkegaard wrote in news:a4hc29$otg$1@news.net.uni-c.dk:

>
> "Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
> news:Xns91B5DC0A5ABCspamstocholmdk@192.38.208.81...
>>
>> Som jeg ser det, så _burde_ den rulles tilbage ved fejlen ... det er
>> i hvert fald det jeg forstår ved transaction-begrebet, så jeg må have
>> overset et eller andet ...
>>
> KB Q238163
> HOWTO: Implement Nested Transactions with ADO and SQL Server
> http://support.microsoft.com/default.aspx?scid=kb;EN-US;q238163
>
> mvh/Peter Lykkegaard
>

mange tak ... den glæder jeg mig til at læse i morgen ...

Jeg synes nu ikke umiddelbart, at det jeg gerne vil er nestede
transactions ... men det kan jo være, at indsigten kommer ved
gennemlæsning af artiklen.


--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Peter Lykkegaard (15-02-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 15-02-02 08:27


"Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
news:Xns91B5F24623B4spamstocholmdk@192.38.208.81...
> Peter Lykkegaard wrote in news:a4hc29$otg$1@news.net.uni-c.dk:
>
> >
> > "Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
> > news:Xns91B5DC0A5ABCspamstocholmdk@192.38.208.81...
> >>
> >> Som jeg ser det, så _burde_ den rulles tilbage ved fejlen ... det er
> >> i hvert fald det jeg forstår ved transaction-begrebet, så jeg må have
> >> overset et eller andet ...
> >>
> > KB Q238163
> > HOWTO: Implement Nested Transactions with ADO and SQL Server
> > http://support.microsoft.com/default.aspx?scid=kb;EN-US;q238163
> >
> mange tak ... den glæder jeg mig til at læse i morgen ...
>
> Jeg synes nu ikke umiddelbart, at det jeg gerne vil er nestede
> transactions ... men det kan jo være, at indsigten kommer ved
> gennemlæsning af artiklen.
>
Eksemplet i artiklen er (næsten) præcis det du prøver at lave, såeehh

mvh/Peter Lykkegaard



Stig Johansen (15-02-2002)
Kommentar
Fra : Stig Johansen


Dato : 15-02-02 17:38

Peter Lykkegaard wrote:

> Eksemplet i artiklen er (næsten) præcis det du prøver at lave, såeehh

Jeg er ikke den store haj til VB, men hvis du kigger i koden i det
oprindelige indlæg, så ser det ud som om, han starter sin transaktion uden
for sit loop, men prøver at commit/roolback for hvert statement inde i
loopet.

--
Med venlig hilsen / Best regards
Stig Johansen


Jesper Stocholm (15-02-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 15-02-02 18:30

Stig Johansen wrote in news:a4jdov$1ku$1@sunsite.dk:

> Peter Lykkegaard wrote:
>
>> Eksemplet i artiklen er (næsten) præcis det du prøver at lave, såeehh
>
> Jeg er ikke den store haj til VB, men hvis du kigger i koden i det
> oprindelige indlæg, så ser det ud som om, han starter sin transaktion
> uden for sit loop, men prøver at commit/roolback for hvert statement
> inde i loopet.
>

Det er korrekt. En transaction initialiseres og derefter laver en FOR-
løkke x antal INSERT-statements, der hver især affyres imod databasen.
Det er her, at jeg gerne vil kunne drage nytte af transactions, da jeg
ved fejl ønsker at rulle de på det tidspunkt indsatte rækker tilbage.

Jeg har prøvet at kigge lidt på det igen, og jeg har i stedet for at
fremprovokere en syntaks-fejl lavet en primary-key fejl. Herefter matcher
jeg på det specifikke Err.number, og her ser det faktisk ud til at det
virker. Jeg er blot ked af kun at matche på denne fejl ... der kunne jo
være så meget andet, der gik galt.

Og jeg prøver lige igen: kan man hoppe ud af en FOR-løkke uden at bruge
enten exit sub eller exit function ?

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Jesper Stocholm (15-02-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 15-02-02 19:10

Jesper Stocholm wrote in
news:Xns91B6BC37FDFDEspamstocholmdk@192.38.208.81:

> Stig Johansen wrote in news:a4jdov$1ku$1@sunsite.dk:
>>
>> Jeg er ikke den store haj til VB, men hvis du kigger i koden i det
>> oprindelige indlæg, så ser det ud som om, han starter sin transaktion
>> uden for sit loop, men prøver at commit/roolback for hvert statement
>> inde i loopet.
>
> Det er korrekt. En transaction initialiseres og derefter laver en FOR-
> løkke x antal INSERT-statements, der hver især affyres imod databasen.
> Det er her, at jeg gerne vil kunne drage nytte af transactions, da jeg
> ved fejl ønsker at rulle de på det tidspunkt indsatte rækker tilbage.
>

jeg sidder lige og kigger lidt på koden, og jeg opdager, at der ser lidt
mærkeligt ud. Fx. sker der en adoCon.commit for hver SQL-statement, der
går godt ... og så er det måske ikke så mærkeligt, at rækkerne ikke
slettes igen.

Jeg tror, at det jeg vil lave er dette:

adoCon.begintrans
boolErr = false
for i = 0 to ubound(some_array)
strSQL = "INSERT INTO Table1 (Field1) VALUES (" & some_array(i) & ")"
on error resume next
adoCon.execute(strSQL)
if Err.number <> 0 then
adoCon.rollbacktrans
boolErr = true ' markerer, at der er sket en fejl
i = ubound(some_array) ' hopper ud af FOR-løkke
end if
on error goto 0
next

if not boolErr then
adoCon.commit
end if

Dette bør vel sådan set gøre det jeg ønsker, ikke ? Altså den laver en
række SQL-inserts, der indsættes. Hvis der sker en fejl, så rulles
transaction tilbage, og der hoppes ud af FOR-løkken. Når FOR-løkken er
færdig, så laves der en commit, hvis der ikke er sket en fejl.

>
> Og jeg prøver lige igen: kan man hoppe ud af en FOR-løkke uden at
> bruge enten exit sub eller exit function ?
>

?

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Peter Lykkegaard (19-02-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 19-02-02 11:50


"Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
news:Xns91B6C2F81D147spamstocholmdk@192.38.208.81...

> >
> > Og jeg prøver lige igen: kan man hoppe ud af en FOR-løkke uden at
> > bruge enten exit sub eller exit function ?
>
> ?
>
Den sprang jeg vist let og elegant henover

Exit For

Men vil det ikke være bedre med en while construct med en kontrol variable -
fx boolean eller integer (Err.Number) ?

mvh/Peter Lykkegaard



Jesper Stocholm (20-02-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 20-02-02 15:47

Peter Lykkegaard wrote in news:TXpc8.50$D82.1432@news.get2net.dk:

> "Jesper Stocholm" <spam200201@stocholm.dk> wrote in message
> news:Xns91B6C2F81D147spamstocholmdk@192.38.208.81...
>> > Og jeg prøver lige igen: kan man hoppe ud af en FOR-løkke uden at
>> > bruge enten exit sub eller exit function ?
> Den sprang jeg vist let og elegant henover
> Exit For
> Men vil det ikke være bedre med en while construct med en kontrol
> variable - fx boolean eller integer (Err.Number) ?
>

det kan man måske sige ... :) Jeg lavede en lignende konstruktion, hvor jeg
i tilfælde af fejl satte det løbende i til slut-værdien i min for-løkke ...
:)


--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Peter Lykkegaard (15-02-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 15-02-02 20:28


"Stig Johansen" <linux@w3data.dk> wrote in message
news:a4jdov$1ku$1@sunsite.dk...
> Peter Lykkegaard wrote:
>
> > Eksemplet i artiklen er (næsten) præcis det du prøver at lave, såeehh
>
> Jeg er ikke den store haj til VB, men hvis du kigger i koden i det
> oprindelige indlæg, så ser det ud som om, han starter sin transaktion uden
> for sit loop, men prøver at commit/roolback for hvert statement inde i
> loopet.
>
Der er imho ikke den store forskel på en lang række næsten ens kald til
MSSQL og så et loop hvor man laver noget tilsvarende mht funktionalitet i
ado hierarkiet
At der er andre mere generelle programmeringstekniske forskelle - der er en
anden sag

Eksemplet var givet som inspiration - ikke som løsningen på problemet

mvh/Peter Lykkegaard



Jesper Stocholm (15-02-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 15-02-02 20:26

Peter Lykkegaard wrote in news:a4jn9c$sna$1@news.net.uni-c.dk:

>
> "Stig Johansen" <linux@w3data.dk> wrote in message
> news:a4jdov$1ku$1@sunsite.dk...
>>
> Der er imho ikke den store forskel på en lang række næsten ens kald
> til MSSQL og så et loop hvor man laver noget tilsvarende mht
> funktionalitet i ado hierarkiet
> At der er andre mere generelle programmeringstekniske forskelle - der
> er en anden sag
>
> Eksemplet var givet som inspiration - ikke som løsningen på problemet
>

og netop derfor er det altid en fornøjelse at få en hjælpende hånd af
dig. Man lærer altid noget af det :)

Tak for det ...

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste