VBA und MySQL Problem

scan5416

Mitglied
Guten Abend zusammen

Ich bin gerade an einem Makro für eine Excel Datei.
Ich habe ein Auswahlliste in der ich eine Id und ein Name anzeige. Diese sind mit einem "|" getrennt.

Um dann auf die Datenbank zu greifen zu können muss ich diese zuerst aufspliten.
Das Funktioniert wunderbar.
Wenn ich aber dann diese ID in eine Variable speichere und dann in der DB suchen will bekomme ich ein Fehlermeldung:
Laufzeitfehler '3001':
Die Argumente sind vom falschen Typ, liege ausserhalbdes Gültigkeitsbereiches oder sind miteinander unvereinbar.

Zu meinem Code:
Code:
 'Benötigte Variablen
    Dim timestamp1 As String
    Dim timestamp2 As String
    Dim timestamp3 As String
    Dim timestamp4 As String
    Dim anlass1 As String
    Dim anlass2 As String
    Dim anlass3 As String
    Dim anlass4 As String
    
    Dim rsEinsatz1 As Recordset
    Dim rsEinsatz2 As Recordset
    Dim rsEinsatz3 As Recordset
    Dim rsEinsatz4 As Recordset
    
    'Recordset erstellen
    Set rsEinsatz1 = New ADODB.Recordset
    Set rsEinsatz2 = New ADODB.Recordset
    Set rsEinsatz3 = New ADODB.Recordset
    Set rsEinsatz4 = New ADODB.Recordset
    
    'Ausgewähltes Listen Element teilen
    If Not frm_einsaetze.combo_einsatz1.Value = "" Then
        timestamp1 = Left$(frm_einsaetze.combo_einsatz1.Value, InStr(frm_einsaetze.combo_einsatz1.Value, "|") - 1)
        anlass1 = Right$(frm_einsaetze.combo_einsatz1.Value, InStr(frm_einsaetze.combo_einsatz1.Value, "|") + 1)
        MsgBox (timestamp1)
    End If
    
    If Not frm_einsaetze.combo_einsatz2.Value = "" Then
        timestamp2 = Left$(frm_einsaetze.combo_einsatz2.Value, InStr(frm_einsaetze.combo_einsatz2.Value, "|") - 1)
        anlass2 = Right$(frm_einsaetze.combo_einsatz2.Value, InStr(frm_einsaetze.combo_einsatz2.Value, "|") + 1)
    End If
    
    If Not frm_einsaetze.combo_einsatz3.Value = "" Then
        timestamp3 = Left$(frm_einsaetze.combo_einsatz3.Value, InStr(frm_einsaetze.combo_einsatz3.Value, "|") - 1)
        anlass3 = Right$(frm_einsaetze.combo_einsatz3.Value, InStr(frm_einsaetze.combo_einsatz3.Value, "|") + 1)
    End If
    
    If Not frm_einsaetze.combo_einsatz4.Value = "" Then
        timestamp4 = Left$(frm_einsaetze.combo_einsatz4.Value, InStr(frm_einsaetze.combo_einsatz4.Value, "|") - 1)
        anlass4 = Right$(frm_einsaetze.combo_einsatz4.Value, InStr(frm_einsaetze.combo_einsatz4.Value, "|") + 1)
    End If
    
    'SQL für DB Abfrage
    If Not timestamp1 = "" Then
       rsEinsatz1.Open "SELECT * FROM auftrag_tag WHERE auftrags_id = '" + timestamp1 + "'", oConn
    End If
    
    If Not timestamp2 = "" Then
        rsEinsatz2.Open "SELECT * FROM auftrag_tag WHERE auftrags_id = '" + timestamp2 + "'", oConn
    End If
    
    If Not timestamp3 = "" Then
        rsEinsatz3.Open "SELECT * FROM auftrag_tag WHERE auftrags_id = '" + timestamp3 + "'", oConn
    End If
    
    If Not timestamp4 = "" Then
        rsEinsatz4.Open "SELECT * FROM auftrag_tag WHERE auftrags_id = '" + timestamp4 + "'", oConn
    End If
    
    'Recordset ausführen Einsatz1
    If Not timestamp1 = "" Then
    With rsEinsatz1
        .MoveFirst
        While Not .EOF
            frm_selectDate.combo_date1.AddItem rsEinsatz1.Fields("ID").Value + "|" + rsEinsatz1.Fields("date").Value
        Wend
    End With
   End If
   
    If Not timestamp2 = "" Then
        'Recordset ausführen Einsatz2
    With rsEinsatz2
        .MoveFirst
        While Not .EOF
            frm_selectDate.combo_date2.AddItem rsEinsatz2.Fields("ID").Value + "|" + rsEinsatz2.Fields("date").Value
        Wend
    End With
    End If
    
    'Recordset ausführen Einsatz3
    If Not timestamp3 = "" Then
    With rsEinsatz3
        .MoveFirst
        While Not .EOF
            frm_selectDate.combo_date3.AddItem rsEinsatz3.Fields("ID").Value + "|" + rsEinsatz3.Fields("date").Value
        Wend
    End With
    End If

    'Recordset ausführen Einsatz4
    If Not timestamp1 = "" Then
    With rsEinsatz4
        .MoveFirst
        While Not .EOF
            frm_selectDate.combo_date4.AddItem rsEinsatz4.Fields("ID").Value + "|" + rsEinsatz4.Fields("date").Value
        Wend
    End With
    End If
    
    'Nicht verwendete Einsätze sperren
    If timestamp1 = "" Then
        frm_selectDate.combo_date1.Enabled = False
    End If
    If timestamp2 = "" Then
        frm_selectDate.combo_date2.Enabled = False
    End If
    If timestamp3 = "" Then
        frm_selectDate.combo_date3.Enabled = False
    End If
    If timestamp4 = "" Then
        frm_selectDate.combo_date4.Enabled = False
    End If
    'Formular Datum auslesen anzeigen

Ich progammiere noch nicht lang in VB daher habe ich auch nicht wirklich eine Ahnung. Währe aber sehr froh wenn mir da jemand helfen könnte.

Vielen Dank im Voraus!
 
Hat niemand eine Idee zu meinem Problem

Ich weiss nicht ob ich mit zu einfach oder zu schweren Probleme komme. Aber in der letzten Zeit bekomme ich einfach keine Antworten mehr auf meine Fragen
Ich finde das eigentlich sehr schade.
 
Hy,

wahrscheinlich ist in deiner Datenbank die Spalte auftrags_id NICHT String (oder CHAR(xx))

Es handelt sich um eine ID-Spalte. ID-Spalten sind normalerweise von Typ "Serial" (Typbeschreibung auf Informix) oder "Autowert" (Typbeschreibung auf Access). Unter MySql weiß ich nicht welche Typbeschreibung üblich ist, aber es handelt sich um das gleiche. Diese Typbeschreibungen bedeuten (Numerisch + long + "eingebaute Datenbank-Mechanismus für Autoinkrementation")

Um die Spalte auftrags_id "anzuquatschen" musst du unbedingt die Hochkommata-Zeichen ( ich meine die ' ) aus deinem SQL-String entfernen.



Code:
' Das kann nicht funktionieren
rsEinsatz1.Open "SELECT * FROM auftrag_tag WHERE auftrags_id = '" + timestamp1 + "'", oConn

Code:
' Das müsste funktionieren
rsEinsatz1.Open "SELECT * FROM auftrag_tag WHERE auftrags_id = " + timestamp1, oConn

Zusammenfassung :
In einem SQL-String muß man die Hochkommata-Zeichen verwenden, wenn das Argument
auf eine Spalte von Typ CHAR oder String zugreift.

In einem SQL-String darf man NICHT die Hochkommata-Zeichen verwenden, wenn das Argument auf eine Spalte von Typ "numerisch" (Integer, smallint, long, double, usw.) zugreift.

Ich hoffe, daß ich das Problem richtig erkannt habe (deine Fehlermeldung konnte ich
nicht reproduzieren, weil ich mit MySql nicht arbeitete). Bitte Bescheid sagen, ob es geklappt hat (und beim Erfolg : Eintrag bitte als "erledigt" markieren - vorher auswerten wäre auch nicht schlecht :) )
 
Zurück