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

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MSSQL7: Transaction cannot start while in ~
Fra : Jesper Stocholm


Dato : 07-02-02 21:15

Jeg tilgår en MS SQL7 database via ADO fra en ASP-side.

Jeg har på denne side et par UPDATE/INSERT (UI) statements, som jeg gerne
vil håndtere som en transcation. Selve disse to statements er
"sammenkogt" af en række SELECT-statements, der sammen giver mig værdier,
som jeg så bruger i mine UI-statements.

Problemet opstår, når jeg har samlet data sammen til mine UI-statements.
Herefter vil jeg gerne begynde en transaction.

Det ser nogenlunde således ud:

'############### CODE BEGIN ###############
set adoCon = createobject("ADODB.Connection")
adoCon.Open "someDSN"

adoCon.begintrans
strSQL2 = "UPDATE Table Set field1 = " & GetParm1(someId)
strSQL3 = "INSERT INTO Table2 (field1,field2) VALUES (" & getParm2(someId) & ",3)"
adoCon.Committrans

function GetParm1(id)
t1_strSQL = "SELECT Field1 from Table2 WHERE id = " & id
oRec1 = adoCon.execute(t1_strSQL)
getParm1 = oRec1("field1")
set oRec1 = nothing
end function

function getParm2(id)
t2_strSQL = "SELECT Field2 FROM Table4 WHERE id = " & id
oRec2 = adoCon.execute(t2_strSQL)
getParm2 = oRec2("Field2)
set oRec2 = nothing
end function
'############### CODE END ###############

Men det får jeg ikke lov til. Fejlen jeg får er:

"Transaction cannot start while in firehose mode"

Hvis jeg derimod opretter et helt nyt ADO-object og smider min transaction
igennem dette, så virker det uden problemer.

Er det behaviour by design ... eller kan jeg undgå at oprette to ADO-
forbindelser fra min side ?

--
Jesper Stocholm
http://stocholm.dk (online again soon)
Exercise you right to free speach - use encryption to secure your communication

 
 
Ulrik Lunddahl (07-02-2002)
Kommentar
Fra : Ulrik Lunddahl


Dato : 07-02-02 23:45

"Jesper Stocholm" <spam200201@stocholm.dk> wrote:

> "Transaction cannot start while in firehose mode"
>
> Hvis jeg derimod opretter et helt nyt ADO-object og smider min transaction
> igennem dette, så virker det uden problemer.
>
> Er det behaviour by design ... eller kan jeg undgå at oprette to ADO-
> forbindelser fra min side ?

Ja, det er det, når du genererer recordset objectet ud med con.execute, får
du et standard recordset object med en forward only cursor, og den kan du
naturligvis ikke bruge i transaktioner.

Du skal manuelt lave dit recordset object og bruge en dynamisk
(adOpenDynamic) cursor, så løber du ikke ind i problemer, f.eks. sådan:

Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.ActiveConnection = objConn
objRS.CursorType = adOpenDynamic
objRS.LockType = adLockOptimistic
objRS.Source = "SELECT * FROM table where field=10"
objRS.Open

If not objRS.EOF Then
objRS("field") = 20
objRS.Update
End If

objRS.Close
Set objRS = Nothing

Du skal ikke åbne mere end en connection til databasen med mindre du har
gode grunde til dette, men du kan naturligvis godt have flere recordsets.


--
Med Venlig Hilsen

Ulrik Lunddahl - nospam037@lunddahl.dk
My heroes: Heddy Lamar & George Antheil




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

Månedens bedste
Årets bedste
Sidste års bedste