将vba变量传递给sql

时间:2014-02-10 19:24:45

标签: sql vba

我在访问中实现了一个命令,一旦点击它就会将新行插入到相应的表中。问题是它没有将变量传递给SQL,它只是插入带有ACTUAL字符串的行...就像myDate ... myId ....有人可以帮我解决这个问题......

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

2 个答案:

答案 0 :(得分:0)

我不太了解vba,但我猜是像

DoCmd.RunSQL“插入[实物库存完成商品]([ID],[工作#],[物理库存日期],[数量形成],[数量有效],[手上数量],[REQ 'D ADJUSTMENT',[REASON ADJUSTMENT REQ'D],[DATE POSTED])VALUES(“+ myId +”,“+ 2180 +”,“+ myDate +”,“+ 0 +”,“+ 0 +”,“ + myQty +“,”+ myAdj +“,”+ myReason +“);”

答案 1 :(得分: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.

因此,如果您要插入的值是整数,只需结束字符串,输入&,输入值,放入另一个&amp ;,然后输入双引号。如果你输入一个字符串,输入一个单引号,然后是双引号结束字符串,然后是&,然后是变量,然后是另一个&amp ;,然后是双引号打开字符串,然后是单引号完成变量周围的引号。所以在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 &"')"