Avatar billede roadrunr Nybegynder
05. september 2001 - 16:11 Der er 10 kommentarer og
1 løsning

ASP/COM/Transactions

Jeg har i lang tid brugt følgende eksempel til at lave transactions i asp med:
------------------------------------------------
Conn.BeginTrans
....
...
Set rs1 = Conn.Execute(???????)
Set rs1 = Conn.Execute(??????)
....

Conn.CommitTrans eller Conn.RollbackTrans
------------------------------------------------

Men nu har jeg lavet en komponent, som foretager alle ændringer i databasen. Som f.eks.
------------------------------------------------
Set obj = Server.CreateObject(\"ProgID\".\"Class\")

obj.User.CreateUser(\"fornavn\",\"efternavn\")

obj.User.CreateEmail(\"email@email.dk\")

Set obj = Nothing
------------------------------------------------
Hvordan kan jeg benytte transactions når jeg bruger min komponent?

Fordi den connection jeg skal lave transaction på eksisterer jo inde i komponenten!

Avatar billede cyb Nybegynder
05. september 2001 - 16:23 #1
Hvorfor kan du ikke lave transaktionen inde i komponenten ?
Avatar billede roadrunr Nybegynder
05. september 2001 - 16:33 #2
jeg kan vidst ikke rigtig tilføje kommentarer... ellers cacher min browser bare alt for vildt!
Avatar billede roadrunr Nybegynder
05. september 2001 - 16:56 #3
Hvordan skal jeg så gøre det?

Jeg har nemlig tænkt lidt på at lave én enkel funktion, som f.eks. hed:

obj.User.CreateAllUserData()

som så lavede en transaction, og inde i den, så brugte de andre funktioner, som jeg foroven referer til. Men funktionen \"CreateAllUserData\" kan vel kun retunere én værdi. F.eks. om den blev gennemført eller ej. Grunden til at jeg gerne ville kunne kalde funktionerne enkeltvis var, at så -kunne jeg gøre følgende:
----------------------------------------------------------------------
Dim nNewUserID
nNewUserID = obj.User.CreateUser(\"fornavn\",\"efternavn\")

Dim nNewEmailID
nNewEmailID = obj.User.CreateEmail(nNewUserID, \"email@email.dk\")
----------------------------------------------------------------------
På den måde ville jeg have alle id\'erne på de ting jeg har oprettet - i min ASP-code!
Avatar billede cyb Nybegynder
06. september 2001 - 08:58 #4
Du kan kalde en funktion som returnere en komma sebereret streng, eller du kan lave den lidt pænere løsning der retunere et array som du så kan tilgå fra din ASP.
Avatar billede roadrunr Nybegynder
06. september 2001 - 10:04 #5
Men det vil sige, at man ikke kan bruge den model, som jeg ovenfor gerne ville bruge? Det jeg kunne forestille mig var, at man måske havde mulighed for i sin ASPkode, at kalde en BeginTrans inde i komponenten. f.eks.
------------------------------------
Set obj = Server.CreateObject(\"ProgID\".\"Class\")

\' starter transaction inde i komponenten
obj.BeginTrans

obj.User.CreateUser(\"fornavn\",\"efternavn\")

\' ---- ASPkode start ------

\' ---- ASPkode slut ------

obj.User.CreateEmail(\"email@email.dk\")

If Err.Number = 0 Then
    obj.CommitTrans
Else
    obj.RollbackTrans
End If

Set obj = Nothing
------------------------------------

Grunden til at jeg ønsker denne metode ér, at jeg mellem min CreateUser og CreateEmail, ønsker at lave noget kode i ASP\'en som ikke vedrører kompoenenten.

Avatar billede cyb Nybegynder
06. september 2001 - 11:35 #6
Jeg er ikke helt sikker men jeg mener kun det kan lade sig gøre hvis man bruger Transaction server.
Avatar billede roadrunr Nybegynder
11. september 2001 - 00:22 #7
Ja - så mangler jeg bare at finde ud af hvordan det gøres :) Please help!
Avatar billede cyb Nybegynder
11. september 2001 - 08:10 #8
Se evt her:
http://www.learnasp.com/learn/buildmtx.asp
eller her:
http://www.learnasp.com/learn/buildmtxoverview.asp
Det kan være det kan hjælpe dig lidt på vej.
Avatar billede maltow Nybegynder
27. september 2001 - 16:09 #9
Jeg har nøjagtig samme problemstilling, så hvis du finder en løsning må du meget gerne gi\' det videre =)
Avatar billede roadrunr Nybegynder
07. oktober 2001 - 15:07 #10
Jeg er kommet frem til, at man kan lave en function, som når man første gang oprettet objectet(komponenten), så laves der et \"ObjectContext\". Dertil laver man en Error-handler, som - hvis der sker en fejl, bruger \"SetAbort\"(RollBack). Når man har foretaget det arbejde man ønsker, kalder man til sidst en function, som bruger \"SetComplete\"(Commit).

Så skulle det virke...

Avatar billede roadrunr Nybegynder
07. oktober 2001 - 15:08 #11
Private Sub ObjectControl_Activate()
 
End Sub
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