11. juni 2001 - 10:53Der er
6 kommentarer og 2 løsninger
Com+ dll (global variabel)
Halløjsa,
Så stødte jeg sgu på et problem... Opgaven: Jeg vil lave et COM+ komponent, som indeholder 4 funktioner: - OpenDB(DSN) - CloseDB() - Recordset(SQL) - NoRecordset(SQL)
Jeg kan sagtens få åbnet forbindelse til databaser dynamisk i en funktion, men lige så snart jeg begynder at ville dele det op, så jeg kan åbne en forbindelse fra en funktion, lukke fra en anden og mens forbindelsen er åben oprette recordsets eller udføre TSQL statements, fejler alt bare.
Spørgsmålet er ganske enkelt (og svaret er sikkert også): HVORDAN kan jeg i min class fil (ActiveX dll project) oprette globale variabler som modificeres/benyttes af mine 4 funktioner, sådan at jeg med OpenDB(DSN) kan lave et global object der indeholder en ADO connection op mod min DSN, og lukke selv samme forbindelse med funktionen CloseDB() Kan det lade sig gøre at dele processerne op på den måde ??
Du kan blot oprette et modul.bas og erklære dine variable der.
Du skal dog være opmærksom på at de globale variable du opretter KUN vil være globale inden for den pågældende tråd. Da din COM+ komponent sikkert er Multi threaded vil der for hver tråd være et sæt \"globale\" variable.
Det er generelt ikke tilrådeligt at have globale variable i COM+ komponenter, da du ikke hårdt kan styre hvilke tråde dine objekt instanser bliver kreeret på.
Den må jeg vist lige have uddybet... Jeg tilføjer blot en .bas fil til projektet og smider de globale variabler deri ? Ideen er netop at jeg vil sikre at hver instans af objektet med 4 funktioner kan styre om en database forbindelse er åben eller lukket, samt udføre SQL statements mod en åben database og enten benytte TSQL eller få et recordset tilbage... Hovedtanken bag var at jeg så skulle slippe for at smide en masse db forbindelser osv. på siderne, men blot kunne benytte en COM+ til samtlige projekter.
Jeg synes ikke rigtigt jeg kan få det til at virke :o(( Et lynhurtigt sammenbikset eks. (der er sikkert fejl) på hvad jeg vil ser sådan ud: Dim Conn As ADODB.Connection Dim rs As ADODB.Recordset Dim DSN As String
Function OpenDB() DSN = \"Driver={SQL Server};Server=DKLT2503;Database=Kursustest;UID=sa;PWD=;\" Set Conn = New ADODB.Connection Conn.Open DSN End Function
Function CloseDB() Conn.Close Set Conn = Nothing End Function
Private Sub udskriv() Set rs = Conn.Execute(\"SELECT * FROM Kursus\") If Not rs.EOF Then Label2.Caption = rs(\"id\") & \", \" & rs(\"Kursusnavn\") Else Label2.Caption = \"Nothing found\" End If rs.Close Set rs = Nothing End Sub Private Sub Command1_Click() Call OpenDB On Error Resume Next If (Conn.State <> 1) Then Label1.Caption = \"Closed\" Else Label1.Caption = \"Open\" End If Call udskriv End Sub
Private Sub Command2_Click() On Error Resume Next If (Conn.State <> 1) Then Label1.Caption = \"Closed\" Else Label1.Caption = \"Open\" End If
Call CloseDB
If (Conn.State <> 1) Then Label1.Caption = \"Closed\" Else Label1.Caption = \"Open\" End If End Sub
Jeg vil så yderlige (ud over openDB og CloseDB) have 2 funktioner: Recordset(sql) og NoRecordset der hhv. returnerer et recordset til ASP siden og udfører en TSQL statement, men ikke returnerer andet end en status for complete/not complete.
Kan det lade sig gøre ?? Evt. en smule kode/hjælp til hvordan
En stump kode perhaps ?? Et eksempel med åbning og lukning af en database via 2 funktioner, funktionerne kaldes fra ASP eller vb, det burde vel få mig så langt at jeg selv kan gennemskue resten :o)) Any help with that ?
Lad os bare sige at VB ikke er mit primære område... jeg har bare bohov for at få fremstillet sådan en enkel komponent, der kan benyttes til alt db adgang jeg får behov for... I bund og grund er jeg ikke engang sikker på at jeg har fanget den kode du har skrevet ovenover, som jeg læser den, vil den åbne en forbindelse første gang jeg kalder sub\'en og bruge den for alle instanser (eg. hvis 3 brugere kalder simultant, vil de dele en connection, eller tager jeg fejl ??) Desuden skulle den meget gerne kunne modtage variable (eks. en DSN string) Et andet problem er så hvordan det styres at jeg gerne fra en funktion vil have returneret et recordset til what-ever der end kaldte funktionen ?? Nyt spørgsmål og masser af point for den hjælp der skal til at sætte mig på rette spor, så jeg kan få lavet skidtet :-)
/Tigerdyr
Synes godt om
Ny brugerNybegynder
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.