Avatar billede gliczynski Nybegynder
31. juli 2004 - 12:47 Der er 6 kommentarer

Håndtere flere inserts før jeg commit'er

Hej

Jeg sidder og har brug for lidt hjælp til nogle INSERT's ...

Jeg har brug for at vide om alle mine INSERT's er gået godt, hvorefter de må skrives til databasen.

Jeg har siddet og rodet med noget kode...

<code>
Class Connection

Private mConn
Private mBlnQueryExecutedSuccessfully
Private mLastInsertID
   
Private cmd   
   
Private Sub Class_Initialize()
Set cmd = Server.CreateObject("adodb.Command")
cmd.ActiveConnection      = "DRIVER={mysql};SERVER=MinServier;DATABASE=myDb;UID=root;PWD=; "
End Sub

Private Sub Class_Terminate()
Set cmd.ActiveConnection = Nothing
Set cmd = Nothing       
End Sub
   
Public Function runSQL(ByVal strSQL, ByVal blnAutoCommitTrans)
On Error Resume Next   
cmd.ActiveConnection.BeginTrans   
cmd.CommandText             = strSQL
cmd.CommandType             = 1
cmd.Execute true, , 128
If Err <> 0 then
cmd.ActiveConnection.RollBackTrans       
Dim ErrorSource, ErrorLine, ErrorDescription
ErrorSource        =    Err.Source                       
ErrorDescription    = Err.Description
response.write ErrorSource &"<br>"
response.write ErrorDescription &"<br>"
mBlnQueryExecutedSuccessfully = False
Else           
mBlnQueryExecutedSuccessfully = True
If( blnAutoCommitTrans ) Then SaveChanges()
End If

End Function
   
Public Function SaveChanges()
cmd.ActiveConnection.CommitTrans                       
End Function
End Class

</code>

med BEGINTRANS og COMMITRANS.... Men har ikke fået det til at virke...

Får fejlen:
<code>Microsoft OLE DB Provider for ODBC Drivers
Cannot start more transactions on this session</code>

rammer classen med følgende kode, hvorved jeg får fejlen...
<code>
Set Conn = new Connection       
SQL = "INSERT INTO componentfile_tbl(componentID, componentFile) VALUES ( 3, '/minfolder/minfil.asp' ) "
Conn.runSQL(SQL, True)       
SQL = "INSERT INTO componentfile_tbl(componentID, componentFile) VALUES ( 28, '/minfolder/minfil.asp' ) "
Conn.runSQL(SQL, True)   
</code>

Jeg har læst mig frem til at man ikke kan lave NESTED TRANSACTION på MS OLE DB for ODBC Driver eller sådan noget lign..

Er der nogen som kan hjælpe mig med at komme frem til en løsning, hvor jeg kan udføre føre min SQL's, hvis alle går godt...

Håber på hjælp


Gliczynski
Avatar billede Slettet bruger
31. juli 2004 - 13:02 #1
Start med at flytte din cmd.ActiveConnection.BeginTransaction til initialize.
Avatar billede gliczynski Nybegynder
31. juli 2004 - 14:54 #2
ok..
Hvad har det af betydning??
Avatar billede Slettet bruger
31. juli 2004 - 15:06 #3
At du ikke starter en starter en transaktion, hvergang du kalder runSQL og dermed ikke starter multiple transaktioner på en forbindelse.
Avatar billede gliczynski Nybegynder
31. juli 2004 - 15:32 #4
Jge har siddet og rodet lidt mere med det...
Jeg kan ikke få "cmd.ActiveConnection.RollBackTrans" og "cmd.ActiveConnection.CommitTrans" til at virke ordentligt...
Den reagere ikke når jeg endelig kalder den... dvs. at dataerne bliver gemt uanset hvad...

Er det måske MYSQL som gemmer automatisk og som ikke kan håndtere kaldene...????

Ved du noget om netop disse kald...??
Avatar billede Slettet bruger
31. juli 2004 - 15:35 #5
ved ikke så meget om mysql men hvis min hukommelse ikke svigter mig helt understøtter de ikke transaktioner i ældre versioner, ved ikke hvorlangt tilbage det er.
Avatar billede gliczynski Nybegynder
31. juli 2004 - 15:47 #6
Jeg kører med den seneste version... kan sgut lige huske hvilken....mener det er mysql-4.0.18-win ....

har lige læst...
"By default, MySQL runs with autocommit mode enabled. This means that as soon as you execute a statement that updates (modifies) a table, MySQL stores the update on disk. "

Skal man måske skrive det i selve SQL statement'en...

Noget ala...
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

Og måske styre COMMIT til sidst... der  er noget med at man kan spørger på @@ERROR noget... hmmmm

Roder videre

G
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