我在访问中实现了一个命令,一旦点击它就会将新行插入到相应的表中。问题是它没有将变量传递给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
答案 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 &"')"