Probleme mit "INSERT INTO" Access VBA mit ADODB

Ja bb, habe ich eben auch gelesen... Aber bei so langen Posts weiß man am Ende nicht mehr, wer was wann geschrieben hat. Schaun wir mal, was kommt!

Viele Grüsse
ronaldh
 
Hallo,
wollte auch mal was sagen,
versuch doch mal mit
DATEVALUE('" & datum & "')
zu arbeiten,
das hilft bei mir, wenn ich Datenbankfeldern mit Datümern updaten will ...

Gruß
Klaus
 
Der SQL-Befehl an sich ist richtig (der letzte von mir gepostete). Er funktioniert bei mir im Access 2003 mit Deiner Datenbank einwandfrei.

Welche Access Version setzt Du ein?

Der Fehler muss woanders liegen, Du müsstest also etwas mehr Code posten.

ronaldh
 
Ich verwende Access 2000 (9er Version). Die Frage wäre, was an Code denn noch wichtig wäre? Sollte dann nicht eher eine andere Fehlermeldung auftauchen oder kann es tatsächlich sein, dass der Fehler "Syntaxfehler in INSERT INTO..." woanders herrührt, als von dem reinen Statement?

Gruß
 
vom code her wäre mal wichtig zu sehen wo kommen die Daten her welche möglichkeiten gibt es fehlerhafte Werte in dein Sql -Statement reinzusetzen.

Ich hatte ja schon mal gemutmasst was es alles sein könnte aber wie gesagt je mehr du uns gibst desto genauer können wir dein Problem nachvollziehen und evtl helfen.

Grüsse bb
 
hallo dreamer2007

nach meine Erfahrungen und Datenbank System Theorie denke ich, dass ein klein Fehler von dir nicht beobachtet wird. Es ist, dass die RecordSet nach ein mal Laufe in for Schleife geschlossen werden muss und dann wieder geöffnet wird..

For i = 0 To upper_bnd Step 1
' Hier ist SQL Satz
RS.Open str, con
RS.Close
Next i

Wenn es noch nicht geht, überprüftest du die Methode Cdate zu Variable enddate Datum/Uhrzeit.

ich hoffe, dass es Hilfe für dich gibt.

viele grüsse

fanxin
 
Hallo nochmal,

entschuldigung dass ich mich nicht nochmal gemeldet habe, aber ich hatte derweilen anderen Dinge zu tun und konnte die Sache nicht weiter verfolgen.
Nun ja, alle Lösungsvorschlänge haben nicht das gewünschte Ergebnis gebracht. Ich hoffe ich kann eun nun nochmal genügend Input geben, damit Ihr vielleicht noch ein Lösung findet. Ich bin diesbezüglich an meinen Grenze gekommen und kann dieses Problem nicht erkennen. So, nun nochmal der Quelltext:

Code:
Public Function save_database()
    DoCmd.Hourglass True
'----------------------------------------------------------------------------
'|      This Method saves all Parameters into the Database                  |
'----------------------------------------------------------------------------
    
    
    Dim connection As New ADODB.connection                  ' Create a new ADODB-Connection
    Dim RS As New Recordset                               ' Define a Recordset
    Dim sql_str As String                                   ' Create the SQL String
    Dim con_str As String                                   ' Create the Connection String
    Dim Antwort As Variant
    Dim db_path  As String
    
    db_path = read_backend_path()                                ' Set path of database
    
    'Verbindung Erstellen
    con_str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db_path
    connection.Open con_str
    
   
    sql_str = "SELECT Count (*) As Anz FROM ap_main WHERE ID = " & ID & " AND PROJECT_ID = " & CLng(project_ID) & ""
    
    ' Datensätze Ändern oder Hinzufügen
    
    Set RS = connection.Execute(sql_str)                                                    ' oder rs.AddNew für Neuanlage
       
    'Zugriff auf Tabelle definieren
    
    
    If RS!anz <> 0 Then
        sql_str = "UPDATE ap_main SET title = '" & title & "', accounting = '" & accounting & "', project_manager = '" & project_manager & "', siglum = '" & siglum & "', description = '" & description & "'  WHERE ap_number = " & ap_number & ""
    Else
        sql_str = "INSERT INTO ap_main (PROJECT_ID,ap_number,title,accounting,project_manager,siglum,description) VALUES ('" & CLng(project_ID) & "','" & ap_number & "','" & title & "','" & accounting & "','" & project_manager & "','" & siglum & "','" & description & "') "
    End If
    
    RS.Close
        
    Set RS = connection.Execute(sql_str)
    
        
'~~~~~~~~~~ Delete all old Information ~~~~~~~~~~~~~~~~~~~~~~~~~~

        
    sql_str = "DELETE FROM costs WHERE AP_ID = " & ID & ""
    
    Set RS = connection.Execute(sql_str)
    
    
'~~~~~~~~~~~~~ Insert new Information into tables ~~~~~~~~~~~~~~~~~~~~~
    Dim i As Integer
    Dim upper_bnd As Integer
    
    
  
           
    upper_bnd = getUbnd_costs()
    For i = 0 To upper_bnd Step 1
        If costs_array(i).process <> "" Then
        sql_str = "INSERT INTO costs (AP_ID,INTERNAL_ID,siglum,process,type,"
        sql_str = sql_str & "description,object,hours,rate,costs,startdate,enddate) "
        sql_str = sql_str & "VALUES ('" & ID & "', '" & i & "', '" & costs_array(i).siglum & "', "
        sql_str = sql_str & "'" & costs_array(i).process & "', '" & costs_array(i).type & "', "
        sql_str = sql_str & "'" & costs_array(i).description & "', '" & costs_array(i).object & "', "
        sql_str = sql_str & "" & costs_array(i).hours & ", " & costs_array(i).rate & ", "
        sql_str = sql_str & "" & costs_array(i).costs & ", " & Format(costs_array(i).startdate, "\# YYYY-MM-DD \#") & ", " & Format(costs_array(i).enddate, "\# YYYY-MM-DD \#") & ")"
               
        MsgBox sql_str                     
         
        Set RS = connection.Execute(sql_str)              ' Hier entsteht der Fehler!
        End If
    Next i
    
   
    connection.Close
    
    If Not RS Is Nothing Then Set RS = Nothing
   If Not connection Is Nothing Then Set connection = Nothing
    
    DoCmd.Hourglass False
End Function

Das SQL-Statement sieht nach Ausgabe wie folgt aus:

Code:
INSERT INTO costs (AP_ID,INTERNAL_ID,siglum,process,type,description,object,hours,rate,costs,startdate,enddate) VALUES ('0', '0', 'siglum', 'process', 'Other Exp.', 'desciprtion', 'object', 0, 0, 123324, # 2008-02-07 #, # 2008-02-07 #)

Vielleicht hilft euch das ja weiter...

Trotzdem nochmal vielen Dank für eure Mühen!

Gruß,

Dreamer
 
Hallo zusammen,

ich möchte hiermit feierlich verkünden, dass ich das Problem gelöst habe.

Es gab Komplikationen wegen einem reserved word in VBA (object). Dieses darf anscheinend nicht mal in dem SQL-Statement also Spaltenname in der Tabelle costs auftauchen. Obwohl das ganze ja per Definition ein String ist. Komisch Vielleicht hat ja noch jemand interessehalber eine plausible Erklärung für dieses Verhalten.

Also Lösung: Ich habe alle worter die "object" heißen einfach umbenannt, in meinem Fall in objective und siehe da kein Fehler mehr!

Grüße und danke nochmal für euren Einsatz,

Dreamer
 

Neue Beiträge

Zurück