[vb6] returning een recordset

Pagina: 1
Acties:

  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 15-08 15:31
Ten eerste ik heb niet zo erg veel verstand van VB6 maar ik moet dit even werkend krijgen. Ik heb twee stukken code de eerste een stuk wat met de database babbelt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Function ConnectionObjectX(sqlstring As String, dsn As String, uid As String, db As String, Optional pwd As String) As Recordset

    Dim wrkODBC As Workspace
    Dim conPubs As Connection
    Dim myRS As Recordset
    Dim users As String
        
    
    Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set conPubs = wrkODBC.OpenConnection("Connection1", , , _
                  "ODBC;DATABASE=" + db + ";UID=" + uid + ";PWD=" + pwd + ";DSN=" + dsn)
                  
    Set myRS = conPubs.OpenRecordset(sqlstring)
    
    Set ConnectionObjectX = myRS
        
    conPubs.Close
    wrkODBC.Close
End Function


En de tweede die deze function aanroept

code:
1
2
3
4
5
6
7
8
 Set sqldata = ConnectionObjectX(query, "distru", "root", "distru2")
    
    If Not sqldata.EOF Then
      While Not sqldata.EOF
         MsgBox sqldata!gebruikersnaam
         sqldata.MoveNext
      Wend
    End If



Nu lukt dit allemaal goed functie enz maar zodra hij bij If Not sqldata.EOF Then komt geeft hij de volgende melding "object invalid or no longer set" Ik heb al gezocht met google en hier maar kon weinig interesants vinden.
Ik wil dus de recordset die uit de function komt gebruiken in me programma. Maar dat laat hij niet toe. Doe ik iets stoms? of kan dit niet?

Click hier niet


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Waarom schrijf je een If rond die WHILE ?

https://fgheysels.github.io/


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 14-08 08:20

glashio

C64 > AMIGA > PC

& IPV + ? Als AppendString teken.

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 15-08 15:31
Nope zou ook vreemd zijn als dat het was immers dat gedeelte gaat wel goed

Click hier niet


  • xtra
  • Registratie: November 2001
  • Laatst online: 13-08 11:30
Je maakt een recordset met conPubs als Connection. Bij het einde sluit je de Connection, dus dat is einde recordset.
Maak van conPubs een globale variabele of geef hem als reference mee aan de functie.

  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 15-08 15:31
Ok dat heb ik nu maar als ik in me main function conpubs.close aanroep geeft hij weer dezelfde foutmelding.

me funcie roep ik zo aan

code:
1
Set dataarray = ConnectionObjectX(conPubs, query, "distru", "root", "distru2", 0)


en de functie zelf is beschreven als

code:
1
Public Function ConnectionObjectX(ByRef conPubs As Connection, sqlstring As String, dsn As String, uid As String, db As String, keuze As Integer, Optional pwd As String) As Recordset


verder staat er boven

Global conPubs As Connection

maar nog steeds niks

[ Voor 91% gewijzigd door reapher op 19-06-2003 00:11 ]

Click hier niet


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 15-08 15:31
Schopje

Click hier niet


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Je code is op zich goed, je moet alleen die workspace en connection bewaren ( door ze bijvoorbeel private te declareren in een module samen met je functie waarin je je records ophaalt.
Pas als je klaar bent met je bewerkingen op je recordset opjecten ( Als je je programma afsluit bijvoorbeeld ) kun je je connection en je workspace closen.

Overigens is Global geen keyword in VB

[ Voor 7% gewijzigd door farlane op 20-06-2003 19:14 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Bestudeer dit stuk code maar eens goed:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub Command1_Click()
Dim wrkODBC As Workspace
Dim conPubs As Connection
Dim sqldata As Recordset
Dim query As String

query = "SELECT * FROM Test"

Set wrkODBC = CreateWorkspace("NewODBCWorkspace", "admin", "", dbUseODBC)
Set conPubs = wrkODBC.OpenConnection("Verbinding1", dbDriverNoPrompt, , "ODBC;DATABASE=Test;UID=sa;WWD=;DSN=Uitgevers")
Set sqldata = ConnectionObjectX(conPubs, query)
    
While Not sqldata.EOF
   MsgBox sqldata!Test
   sqldata.MoveNext
Wend

conPubs.Close
wrkODBC.Close

Set sqldata = Nothing
Set conPubs = Nothing
Set wrkODBC = Nothing

End Sub

Public Function ConnectionObjectX(conPubs As Connection, sqlstring As String) As Recordset

Set ConnectionObjectX = conPubs.OpenRecordset(sqlstring)

End Function

  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 15-08 15:31
Dat werkt way beter dank u _/-\o_

Click hier niet

Pagina: 1