05. september 2001 - 16:11Der 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!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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!
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.
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.
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).
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.