Hallo
Wenn ich diese SQL laufen lassen möchte bekommen ich einen error " 3219 ungültige operation".
ich verstehe nicht warum. So wie ihr unten sehen könnt, will ich eine tabelle angelegen wobei die daten aus de tabelle struc kommen und zusätzliche 3 weitere felder. diesen sind nicht in eine tabelle hinterlegt, deshalb im acess2003 frägt ihr nach den wert dieser felder.
In der SLQ anweisung diese 3 spezielle felder haben sind zu einer variable zugeordnet, ( [datum] AS Expr2, [betreff] AS Expr3, [Text] AS Expr1)
Wenn ich aber zu die variablen Expr1,Expr2 und Expr3 einen Wert zuordne müsste jedoch nicht mehr danach fragen.
Ich mache schon lange rum aber ich kommen nicht auf den problem.
kann mir bitte jemand sagen was ich falsch mache? und mir eventuell die korektur vornimmt.
das prog.
---------------------------------------------------------------------
Dim objDB As DAO.Database
Dim objRS As DAO.Recordset
Dim strSQL As String
strSQL = "INSERT INTO Lieferscheine ( [sales unit], GB, [VKL person], [GB person], [mitarbeiter], name, Lieferdatum, Betreff, Text )" & _
"SELECT struc.[sales unit], struc.GB, struc.[VKL person], struc.[GB person], struc.[mitarbeiter], struc.name, [datum] AS Expr2, [betreff] AS Expr3, [Text] AS Expr1 " & _
"FROM struc WHERE (((struc.GB)='25-000'));"
gei_text="hallo"
gei_datum="09/05/2007"
gei_betreff="probe"
Expr1 = gei_text
Expr2 = gei_datum
Expr3 = gei_betreff
Set objDB = CurrentDb
Set objRS = objDB.OpenRecordset(strSQL, , DAO.dbSQLPassThrough)
Call objRS.Close
Set objRS = Nothing
Set objDB = Nothing
---------------------------------------------------------------------
ich danke euch für eure Hilfe
logo3
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Du gehst (aus irgendwelchen Gründen) davon aus, daß VBA (oder VB) den Inhalt einer Zeichenkette als Variablenname interpretiert. Außerdem verdrehst Du Feldname und Feldwert.
Beispiel:
"... [datum] AS Expr2 ..."
gei_datum="09/05/2007"
Expr2 = gei_datum
Das ist jedoch nicht der Fall, der Inhalt einer Zeichenkette und der Name einer Variablen sind für VBA (und alle anderen Sprachen auch) zwei völlig verschiedene Dinge.
Ist-Zustand:
Deine SQL-Abfrage sucht im Moment nach einem Feld namens "datum" in der Tabelle "struc". Wenn dieses Feld nicht gefunden wird, wirst Du gefragt, was Du als Wert einsetzen möchtest. Der eingegebene Wert wird in einem Feld namens "Expr2" abgelegt.
Soll-Zustand:
Statt den Inhalt des Feldes "datum" auszulesen möchtest Du selbst einen Inhalt vorgeben, ohne gefragt zu werden. Der Inhalt soll im Feld "datum" abgelegt werden.
Lösung:
Du mußt die Werte mit in die Zeichenkette einbauen.
... struc.name, " & Format$(CDate(2007, 5, 9), "\#mm\/dd\/yyyy#") & " AS datum ...
Für die anderen Felder geht das analog.
hallo
erstmal vielen dank für deine Hilfe, ich bin in SQL nicht sehr fit.
ich habe die variablen so festgelegt
Dim gei_datum As Date
Dim gei_betreff As String
Dim gei_text As String
gei_datum=today ()
gei_betreff="hallo"
gei_text="das ist ein bsp."
strSQL = "INSERT INTO Lieferscheine ( [sales unit], GB, [VKL person], [GB person], [mitarbeiter], name, Lieferdatum, Betreff, Text )" & _
"SELECT struc.[sales unit], struc.GB, struc.[VKL person], struc.[GB person], struc.[mitarbeiter], struc.name, " & Format$(CDate(gei_datum), "\#mm\/dd\/yyyy#") & " AS datum , " & Format$(gei_betreff(50) & " AS betreff , " & Format$(gei_text(100) & " AS Text FROM struc;"))" & _ "WHERE (((struc.GB)='25-000'));"
ich bekomme folgende fehlermeldung "man erwartet eine matrix" bei & Format$(gei_betreff(50) & " AS betreff
kannst du mir jetzt noch verraten was dabei falsch ist ??? danke
Mit der "INSERT INTO ... SELECT FROM"-Anweisung bin ich nicht so vertraut, ob diese Syntax so richtig ist, mußt Du in der Hilfe nachschauen.
Bei den Abfragen in der SQL-Anweisung kann ich Dir aber auf jeden Fall helfen.
Dim gei_datum As Date
Dim gei_betreff As String
Dim gei_text As String
Dim strSQL As String
gei_datum = Now
gei_betreff = "hallo"
gei_text = "das ist ein bsp."
strSQL = "INSERT INTO Lieferscheine ([sales unit], GB, [VKL person], [GB person], [mitarbeiter], [name], Lieferdatum, Betreff, [Text]) " & _
"SELECT struc.[sales unit], struc.GB, struc.[VKL person], struc.[GB person], struc.[mitarbeiter], struc.[name], " & _
Format$(CDate(gei_datum), "\#mm\/dd\/yyyy#") & " AS datum, " & _
"'" & Replace$(gei_betreff, Chr$(39), Chr$(39) & Chr$(39)) & "' AS betreff, " & _
"'" & Replace$(gei_text, Chr$(39), Chr$(39) & Chr$(39)) & "' AS [Text] " & _
"FROM struc WHERE (struc.GB = '25-000');"
Debug.Print strSQL
Im Debug-Fenster (zu erreichen über STRG+G) kannst Du nun die fertge SQL-Anweisung sehen, wie sie später an die Datenbank übergeben wird.
danke es geht aber ich bekomme eine error code 3219 ungültige operation, ich glaube es hängt mit den recordset ist nur lese status kann also nichts updaten. kann das sein ^????
-------
Set objDB = CurrentDb
Debug.Print (strSQL)
Set objRS = objDB.OpenRecordset(strSQL, , DAO.dbSQLPassThrough)
-----------------------
danke t-rex
gruss
logo3
Ich update meine Recordset-Objekte nicht, daher kann ich Dir bei diesem Fehler nicht helfen. Wenn ich Daten ändern will, gehe ich mit SQL auf die Datenbank los.