2014-02-10 5 views
0

У меня есть команда в доступе, которая после ее щелчка добавит новую строку в соответствующую таблицу. Проблема заключается в ее непреходящем переменной в SQL, это просто вставить строки с АКТУАЛЬНЫМ string..like MyDate ... MyId .... Может кто-нибудь помочь мне исправить это ...pass vba variable to sql

Private Sub Command34_Click() 
On Error GoTo Err_Command34_Click 

    Dim myDate As Date 
    Dim myQty As Long 
    Dim myAdj As Long 
    Dim myReason As String 
    Dim myId As Long 


    Dim sqlMyDate As String 
    Dim sqlMyQty As String 
    Dim sqlMyAdj As String 
    Dim sqlMyReason As String 
    Dim sqlMyID As String 


    Dim mySqlInsert As String 

    sqlMyDate = "SELECT TOP 1 [DATE OF PHYSICAL INVENTORY] FROM [PHYSICAL INVENTORY FINISHED GOODS] WHERE [JOB #]=""2188"" ORDER BY [PHYSICAL INVENTORY FINISHED GOODS].[ID] DESC;" 
    sqlMyQty = "SELECT TOP 1 [REQ'D ADJUSTMENT] FROM [PHYSICAL INVENTORY FINISHED GOODS] WHERE [JOB #]=""2188"" ORDER BY [PHYSICAL INVENTORY FINISHED GOODS].[ID] DESC;" 
    sqlMyAdj = "SELECT TOP 1 [REQ'D ADJUSTMENT] FROM [PHYSICAL INVENTORY FINISHED GOODS] WHERE [JOB #]=""2188"" ORDER BY [PHYSICAL INVENTORY FINISHED GOODS].[ID] DESC;" 
    sqlMyReason = "SELECT TOP 1 [REASON ADJUSTMENT REQ'D] FROM [PHYSICAL INVENTORY FINISHED GOODS] WHERE [JOB #]=""2188"" ORDER BY [PHYSICAL INVENTORY FINISHED GOODS].[ID] DESC;" 
    sqlMyID = "SELECT TOP 1 [ID] FROM [PHYSICAL INVENTORY FINISHED GOODS] ORDER BY [PHYSICAL INVENTORY FINISHED GOODS].[ID] DESC;" 

    myDate = CurrentDb.OpenRecordset(sqlMyDate).Fields(0).Value 
    myQty = CurrentDb.OpenRecordset(sqlMyQty).Fields(0).Value 
    myAdj = 0 - CurrentDb.OpenRecordset(sqlMyAdj).Fields(0).Value 
    myId = CurrentDb.OpenRecordset(sqlMyID).Fields(0).Value + 1 


    If CurrentDb.OpenRecordset(sqlMyReason).Fields(0).Value = Null Then 
    myReason = "No Reason" 
    Else 
    myReason = CurrentDb.OpenRecordset(sqlMyReason).Fields(0).Value 
    End If 

    DoCmd.RunSQL "INSERT INTO [PHYSICAL INVENTORY FINISHED GOODS] ([ID],[JOB #],[DATE OF PHYSICAL INVENTORY],[QTY FORMED],[QTY WIP],[QTY ON HAND],[REQ'D ADJUSTMENT],[REASON ADJUSTMENT REQ'D],[DATE POSTED]) VALUES (""&myId&"",""2180"",""&myDate&"",""0"",""0"",""&myQty&"",""&myAdj&"",""&myReason&"");" 

Exit_Command34_Click: 
    Exit Sub 
Err_Command34_Click: 
    MsgBox Err.Description 
    Resume Exit_Command34_Click 
+0

вы проверили, что SQL на самом деле, попробуйте сделать MsgBox с SQL заявления Проверять. –

ответ

0
DoCmd.RunSQL _ 
"INSERT INTO [PHYSICAL INVENTORY FINISHED GOODS] " & _ 
"([ID],[JOB #],[DATE OF PHYSICAL INVENTORY],[QTY FORMED],[QTY WIP],[QTY ON HAND], " & _ 
"[REQ'D ADJUSTMENT],[REASON ADJUSTMENT REQ'D],[DATE POSTED]) " & _ 
"Select " & _ 
"(" & myId & ",2180," & myDate & ",0,0," & myQty & "," & myAdj & "," & myReason &")" 

Там же несколько проблем здесь - сделать конкатенацию в VBA, он должен работать как этот

dim myString as string 
dim myValue as integer 
dim myStringValue as string 

myValue = 5 
myStringValue = "Five" 

myString = "Concat an integer, like, for instance , " & myValue & " like that, and a string, for instance : '" & myStringValue & "', like that. 

Так, если значения вы вставляя целые, только конец строки, положить в a &, введите значение, введите еще один &, а затем введите двойные кавычки. Если вы вводите строку, поместите одну цитату, затем двойную кавычку, чтобы закончить строку, затем &, затем переменную, затем еще одну &, затем двойную кавычку, чтобы открыть строку, затем одну кавычку, чтобы закончить кавычки вокруг переменной. Таким образом, в SQL заявление:

sql = "Insert into mytable (mycolumn) select '" & myStringValue & "'" 

редактировать: просто читать ваши типы переменных, это утверждение должно работать - -

DoCmd.RunSQL _ 
"INSERT INTO [PHYSICAL INVENTORY FINISHED GOODS] " & _ 
"([ID],[JOB #],[DATE OF PHYSICAL INVENTORY],[QTY FORMED],[QTY WIP],[QTY ON HAND], " & _ 
"[REQ'D ADJUSTMENT],[REASON ADJUSTMENT REQ'D],[DATE POSTED]) " & _ 
"Select " & _ 
"(" & myId & ",2180,#" & myDate & "#,0,0," & myQty & "," & myAdj & ",'" & myReason &"')" 
0

я не знаю, vba очень хорошо, но я угадываю что-то вроде

DoCmd.RunSQL «ВСТАВЬТЕ [ФИЗИЧЕСКИЕ ЗАПАСНЫЕ ИЗДЕЛИЯ] [[ИДЕНТИФИКАТОРЫ], [РАБОТА #], [ДАТА ФИЗИЧЕСКОГО ИНВЕНТАРИЗАЦИИ], [КОТОРЫЕ ФОРМУЛИРОВАЛИ], [QTY WIP ], [QTY ON HAND], [REQ'D ADJUSTMENT], [REASON ADJUSTMENT REQ'D], [DATE POSTED]) ЗНАЧЕНИЯ («+ myId +», «+ 2180 +», «+ myDate +», «+0 + "," +0 + "," + myQty + "," + myAdj + "," + myReason + ");