[VB6][MySQL] Loop Fehler

CrimeTime

Erfahrenes Mitglied
Hallo Leute,
ich habe im Moment folgendes Problem,
ich greife mit meinem Programm auf eine MySQL Datenbank zu, das Funktioniert auch alles gut, aber dann habe ich eine Loop Schleife einbauen müssen weil er sonst nur die Erste Spalte anzeigt.

nun habe ich das Problem das er immer wieder nur die Erste Spalte abfragt von der Datenbank, ich möchte aber das er Jede abholt.

Jemand ne Idee?

Gruß CrimeTime
 
Funktioniert leider nicht so wie es sollte, hier die Loop Schleife;

Code:
Do While Not PrUpdater
    GetLinkId
    GetLinkUrl
    GetPreviousPR
    

    Chrlinkid = txt_linkid.Text
    Chrlinkurl = txt_linkurl.Text
    Chrpreviouspr = txt_previouspr.Text
    Chrnewpr = txt_newpr.Text
             
ListView1.ListItems.Add , , Chrlinkid
    With ListView1.ListItems(ListView1.ListItems.Count)
        .SubItems(1) = Chrlinkurl
        .SubItems(2) = Chrpreviouspr
        .SubItems(3) = Chrnewpr
        .SubItems(4) = Chrnewpr
        .EnsureVisible 'scroll
    End With

    GetLinkIdNext
    GetLinkUrlNext
    GetPreviousPRNext
    
    GoTo nextone
Loop
If MoveNext = True Then
GoTo Endone
            Else
                rs.MoveNext
                
Endone:
End if
 
abgesehen von den Gotos (schlechter Stil) ist dein Code jetzt auch nicht wirklich selbsterklärend da man nicht erkennen kann was du eigentlich machst oder machen willst deswegen hier ein kurzes beispiel für den umgang mit recordsets:

Visual Basic:
set res = db.Openrecordset("Select Felda, Feldb From myTable") ' ich gehe davon aus die Db ist bereits geöffnet ( ado weicht beim Zugriff leicht ab!!) 

while not res.eof ' man kann es auch mit do loop machen while finde ich schöner
'auslesen Recordset
Listbox1.Items.add(res!Felda)
'erste alternative 
Listbox1.Items.add(res.Fields("Felda").value)
'zweite alternative 
Listbox1.Items.add(res.Fields(0).value) ' denkbar schlecht man weiss nicht was der Prog wollte 

res.movenext 
wend

Grüsse bb
 
das wäre ja eine Geniale Lösung, nur damit komm ich nicht klar:

Code:
Set rs = db.OpenRecordset("Select ID, URL, PAGERANK From PLD_LINK")

bzw. kommt meine MySQL connection nicht mit db.OpenRecordset Klar, hier der code der mdl.*

Code:
Public Mysql_Connection As New adodb.Connection
Private rs As New adodb.Recordset

Public Server As String
Public Username As String
Public password As String
Public Database As String
Public Last_Query As String
Public Array_Query As Variant



Function Connect() As Boolean
 Connect = True
 
 'On Error GoTo Err
 
   If Mysql_Connection.State = adStateOpen Then Mysql_Connection.Close
      
   Mysql_Connection.Open "driver={MySQL ODBC 3.51 Driver};server=" & Server & ";uid=" & Username & ";pwd=" & password & ";database=" + Database
'     Form1.StatusBar1.SimpleText = "                                                            Mysql Status: Succsefully logged in!"
 Exit Function
  
Err:
 Connect = False
' Form1.StatusBar1.SimpleText = "                                                            Mysql Status: Connecting Failed!"
End Function


Function Query(SQL As String) As Boolean
'On Error Resume Next
        rs.Open SQL, Mysql_Connection
Do While Not rs.EOF
        MySQL.Last_Query = rs.GetString
        

            Call rs.MoveNext
        Loop
        rs.Close
    Set rs = Nothing
    
'rs.Close
End Function

Function Fetch_Array(Str As String) As Boolean
    MySQL.Array_Query = Split(Str, vbTab)
End Function

Function CloseConnection()
 Mysql_Connection.Close
 frmMain.StatusBar1.SimpleText = "                                                            Mysql Status: Disconnected!"
End Function
 
Ja wie ich schon geschrieben habe ich habe die Lösung mit der Dao gepostet die mit der ado ist in deinem Code
Visual Basic:
 Mysql_Connection.Open "driver={MySQL ODBC 3.51 Driver};server=" & Server & ";uid=" & Username & ";pwd=" & password & ";database=" + Database

rs.Open SQL, Mysql_Connection

 ' und nun die schleife
' wie bei mir oben beschrieben.
wobei ich das problem sehe, das du dein sql in deine Funktion Query übergibst und somit in der Funktion nicht weisst welche Felder du im Zugriff hast. Das macht das auslesen schwierig.

Grüsse bb
 
wie kann ich das denn verbessern, und ich weiß immer noch nicht wie ich dies:

Set rs = db.OpenRecordset("Select ID, URL, PAGERANK From PLD_LINK")

Machen soll (rote)


edit:

nun habe ich es so:
Dim rs As New ADODB.Recordset
Dim db As Database
Set rs = New ADODB.Recordset

Set rs = db.OpenRecordset("Select ID,URL, PAGERANK From PLD_LINK")

nun kommt nur noch dieser fehler :

Object variable or With block variable not set.

(db ist nun gesetzt.) und der makiert das Set rs = db.OpenRecordset("Select ID,URL, PAGERANK From PLD_LINK")

Edit2:

nun ist es so
Code:
Public Sub GetMysqlData()
Dim PAGERANK As String
Dim ID As String
Dim URL As String
Dim rs As New ADODB.Recordset
Set rs = New ADODB.Recordset
Dim SQL As String

If SQL = "" Then
SQL = "Select ID, URL , PAGERANK From PLD_LINK"
End If

rs.Open SQL, Mysql_Connection
While Not rs.EOF
MySQL.Last_Query = rs.GetString
MsgBox (rs!ID)
Wend
Set rs = Nothing
End Sub

nun kommt der EOF und BOF fehler wieder ...
 
Zuletzt bearbeitet:
dein fehler liegt hier glaube ich

Visual Basic:
MySQL.Last_Query = rs.GetString

wobei mir gerade noch aufgefallen ist :

Visual Basic:
Dim rs As New ADODB.Recordset
Set rs = New ADODB.Recordset
das erste New also "Dim rs as ...."Solltest du aus Performance gründen weglassen.

Die If Abfrage ist ebenfalls überflüssig da SQL immer = "" ist .

Grüsse bb
 
MySQL.Last_Query = rs.GetString
kann ich zu
MySQL.Arary_Query = rs.GetString
oder so machen. aber NVM.

hast mir immer noch nicht meine frage beantwortet ^^


Edit:

nun ist der code so:

Code:
Public Sub GetMysqlData()
Dim PAGERANK As String
Dim ID As String
Dim URL As String
Dim rs As New ADODB.Recordset
Dim SQL As String

SQL = "Select ID, URL , PAGERANK From PLD_LINK"

rs.Open SQL, Mysql_Connection
While Not rs.EOF
MySQL.Array_Query = rs.GetString
MsgBox (rs!ID)
Wend
Set rs = Nothing
End Sub

das Gelbe wird Makiert, und dann kommt halt wieder der BOF und EOF fehler.
 
Zuletzt bearbeitet:
ich würd sowieso immer ein
Code:
if rs.bof <> rs.eof then
vor der while Schleife dreinbasteln.
Sag doch mal den genauen Fehler beschrieb.
 

Neue Beiträge

Zurück