# Problem bei einer SQl abfrage



## CrimeTime (11. August 2007)

Hallo Leute,
ich arbeite wieder mal an einem Neuen Projekt, und schon habe ich wieder ein Problemchen

hier der Code


```
Dim rs As New adodb.Recordset
Username = "SELECT username FROM users WHERE username = '" & Username & "'"
rs.Open Username, Mysql_Connection
MySQL.Array_Query = rs.GetString
getUsername = MySQL.Array_Query

If EncodeName(LCase(getUsername)) = True Then
Form1.SckClient(Socket).SendData "ok"
Else
Form1.SckClient(Socket).SendData "nicht ok"
End If
rs.Close
```


der fehler ist : *Run-Time error '3021':

Entweder BOF oder EOF ist True, oder der Aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen aktuellen Datensatz.*

kann jemand weiter helfen?


----------



## CrimeTime (12. August 2007)

hat niemand ne idee?


----------



## CrimeTime (14. August 2007)

oh leute ich bin am Verzweifeln, bitte schaut doch mal ob ihr helfen könnt


----------



## Badboyws (14. August 2007)

Guten Morgen,

der Grund warum dir auf die Frage keine antwortet könnte darin liegen das man mit deinem Codeschnipsel nicht viel anfangen kann. Fakt ist jedoch das du entweder kein Connect zur DB hast oder die Abfrage murks ist. Wie kannst du einer Variable Username einen String zuweisen in dem sie selber vorkommt? Hast du 2 Variablen Username? was übergibst du da? Wo kommt das Connect zur MySQL DB her, wie stellst du das her. Hat das schonmal funktioniert? hier fehlen grundlegende Informationen um dir helfen zu können.


----------



## CrimeTime (14. August 2007)

Das ist die Connection


```
MySQL.Server = GetINISetting(App.Path & "\Settings.ini", "Mysql Settings", "Server", "")
MySQL.Username = GetINISetting(App.Path & "\Settings.ini", "Mysql Settings", "Username", "")
MySQL.password = GetINISetting(App.Path & "\Settings.ini", "Mysql Settings", "Password", "")
MySQL.Database = GetINISetting(App.Path & "\Settings.ini", "Mysql Settings", "Database", "")
MySQL.Connect
```

Ich hoffe das hilft dir weiter, und JA die Verbindung geht 1A


----------



## ronaldh (14. August 2007)

EOF kommt, wenn er keinen Datensatz gefunden hat, der passt. Badboyws hat schon recht, Deine Aussagen bringen wirklich nicht weiter.

Auch das was Du nachgeliefert hast, hilft nicht. Du erstellst die Connection durch irgendwelche Ini-Einträge, man sieht aber nicht welche. Da die Connection ansonsten funktionieren soll, ist dies aber unerheblich.

Wichtig wären eher zusätzliche Angaben zu Deinem Code:



> Username = "SELECT username FROM users WHERE username = '" & Username & "'"
> rs.Open Username, Mysql_Connection



Hier verwendest Du "Username" als Parameter in der Where-Clause, setzt es aber gleichzeitig als Variable für den SQL-String. Wo das ursprüngliche "Username" herkommt, ist dem Leser schleierhaft, und wir wissen natürlich auch nicht, was da drin steht.

Vermutlich ist für diesen Username einfach kein Datensatz da, z.B. falsch geschrieben, in der Datenbank ohne Leerzeichen gefüllt und in der Variablen mit usw. Wenn z.B. in Deiner Variablen steht "Heinz    " und in der Datenbank "Heinz", dann wird dieser Heinz nie gefunden!

Ohne weitere und wirklich aussagefähige Informationen kann Dir hier wirklich keiner helfen, das ist nur Kaffeesatzleserei.

ronaldh


----------



## CrimeTime (14. August 2007)

Hier mal die Komplette MySqL module


```
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
    With rs
        rs.Open SQL, Mysql_Connection
        MySQL.Last_Query = rs.GetString
        rs.Close
    End With
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
```

ich hoffe sehr das es eucht weiter hilft


----------



## Badboyws (15. August 2007)

Guten Morgen,

so langsam wirds doch interessant. Was passiert wenn du es so machst:

```
Dim SQL As String
SQL = "SELECT username FROM users WHERE username = '<Name>' "
rs.Open SQL, Mysql_Connection
```
und schreib anstelle von <Name> bitte einen Usernamen rein der auch wirklich in der Tabelle users ist. (Ich geh einfach mal davon aus das die Tabellenstruktur ansich stimmt und die Tabelle wirklich users heißt)

Wenns nicht geht, meldest dich wieder.


----------



## CrimeTime (14. November 2007)

Badboyws hat gesagt.:


> Guten Morgen,
> 
> ```
> Dim SQL As String
> ...



Hallo Badboyws,
ich hab glaub das Projekt von damals in die Tonne gekloppt, aber nun ganz aktuell hänge ich am gleichen Problem leider, ich habe nun dies hier :


```
Dim rs As New ADODB.Recordset
Dim SQL As String
SQL = "SELECT ID FROM LINK WHERE ID = '51701'"
rs.Open SQL, Mysql_Connection

Text1.Text = SQL
```

nur bei dem kann man sich absolut nicht Sichersein ob die abfrage überhaupt erfolgreich war, weil der das ja dann einfach in die Textbox schreibt.

wenn ich es aber so mache : 

```
Dim rs As New ADODB.Recordset
Dim SQL As String

linkid = "SELECT ID FROM LINK WHERE ID = '" & currentid & "'"
rs.Open linkid, Mysql_Connection
MySQL.Array_Query = rs.GetString
Text1.Text = currentid
```

kommt wieder wie vom ersten Artikel in diesem thread die Meldung mit EOF und BOF.

hoffe kannst dabei helfen


Gruß CrimeTime


----------

