Sql VB6 Access更新查询未更新表
我试图在do循环中为作业编号的字段顺序添加一个编号。我的代码没有中断,但它没有将记录添加到表中。代码写入一个函数中,当按下访问表单按钮以更新记录时,该函数将被调用。下面是我的代码:Sql VB6 Access更新查询未更新表,sql,ms-access,vb6,vba,Sql,Ms Access,Vb6,Vba,我试图在do循环中为作业编号的字段顺序添加一个编号。我的代码没有中断,但它没有将记录添加到表中。代码写入一个函数中,当按下访问表单按钮以更新记录时,该函数将被调用。下面是我的代码: Dim NumofBatches As Integer NumofBatches = [Batches] Dim startnum As Integer startnum = 1 Dim jobnum As String jobnum = [JobNumber] Do
Dim NumofBatches As Integer
NumofBatches = [Batches]
Dim startnum As Integer
startnum = 1
Dim jobnum As String
jobnum = [JobNumber]
Do While startnum <= NumofBatches
Dim mynumString As String
mynumString = startnum
DoCmd.RunSQL "INSERT INTO Production (CardCode,JobItemNo,JobIndex,DrawingRef,DRDescription,[CreationDate],Quantity,FinishDate,LastLocation,DateLastMoved) VALUES ('" & jobnum & mynumString & "', ItemNumber, JobNumber, DrawingRef, DRDescription, [CreationDate], Quantity, FinishDate, LastLocation, DateLastMoved)"
startnum = startnum + 1
Loop
Dim NumofBatches为整数
NumofBatches=[批次]
Dim startnum作为整数
startnum=1
Dim jobnum作为字符串
jobnum=[JobNumber]
当你有两个问题的时候就开始吧。第一个在SQL语句的INSERT部分的字段列表中。除非生产表中有一个名为“CardCode+mynumString”的列(如果有,则必须用方括号括起来,因为它有一个空格和一个符号),否则它将无法工作。在INSERT INTO
后面的括号内,必须列出要插入的表中的列名。首先修复目标列名
接下来,您将有一个SELECT语句作为要插入的值的源。除非在表格中找到您需要的值,否则您可能应该使用值
列表:
INSERT INTO <TableName> (Col1, Col2, ...) VALUES (Val1, Val2, ...)
请注意,您必须解析带引号的SQL字符串之外的值,并将该值连接到该字符串中,然后在SQL字符串内使用单引号将所有这些设置为关闭
我发现使用变量构建这样的动态SQL字符串非常方便,然后将其执行为:
DoCmd.RunSQL mySQLVariable
如果在调试过程中检查变量,或者使用Debug.Print将值转储到即时窗口,那么在变量中包含SQL字符串可以更容易地发现连接中的错误。您有几个问题。第一个在SQL语句的INSERT部分的字段列表中。除非生产表中有一个名为“CardCode+mynumString”的列(如果有,则必须用方括号括起来,因为它有一个空格和一个符号),否则它将无法工作。在INSERT INTO
后面的括号内,必须列出要插入的表中的列名。首先修复目标列名
接下来,您将有一个SELECT语句作为要插入的值的源。除非在表格中找到您需要的值,否则您可能应该使用值
列表:
INSERT INTO <TableName> (Col1, Col2, ...) VALUES (Val1, Val2, ...)
请注意,您必须解析带引号的SQL字符串之外的值,并将该值连接到该字符串中,然后在SQL字符串内使用单引号将所有这些设置为关闭
我发现使用变量构建这样的动态SQL字符串非常方便,然后将其执行为:
DoCmd.RunSQL mySQLVariable
如果您在调试过程中检查变量,或者使用Debug.Print将值转储到即时窗口中,那么在变量中包含SQL字符串可以更容易地发现连接中的错误。回答不错。一个小问题是,如果按顺序使用表中的所有列,则不必提供列名。(也许在Access中不是这样的?我忘了。)谢谢。我不再每天使用Access,所以我不确定,但如果源中的值列表或SELECT语句中提供了每列的值,那么IIRC应该可以跳过目标表上的列规范。确实可以省略列名,但只要表包含自动编号字段,或者即使是一个计算字段,或者得到一个额外的列,您的查询也会失败,因此提供它们是一种很好的做法。很抱歉,我回复晚了几天。我感谢您的回复。我的代码仍然无法与您的建议配合使用。我更新了问题中的代码以反映新的更改。我认为转换序列号以将其与字符串连接起来的方式可能有问题?您的INSERT语句指定了许多列,我认为您真的只希望一个值进入CardCode。在“值”组中,jobnum和mynumString后面的所有名称都将作为文字名称插入。这意味着语句将尝试将单词“DateLastMoved”放入DateLastMoved列。如果表单中有一个值包含DateLastMoved列中所需的日期,则还必须将该值连接到字符串的值部分。你必须对每一个专栏都这样做。回答得很好。一个小问题是,如果按顺序使用表中的所有列,则不必提供列名。(也许在Access中不是这样的?我忘了。)谢谢。我不再每天使用Access,所以我不确定,但如果源中的值列表或SELECT语句中提供了每列的值,那么IIRC应该可以跳过目标表上的列规范。确实可以省略列名,但只要表包含自动编号字段,或者即使是一个计算字段,或者得到一个额外的列,您的查询也会失败,因此提供它们是一种很好的做法。很抱歉,我回复晚了几天。我感谢您的回复。我的代码仍然无法与您的建议配合使用。我更新了问题中的代码以反映新的更改。我认为转换序列号以将其与字符串连接起来的方式可能有问题?您的INSERT语句指定了许多列,我认为您真的只希望一个值进入CardCode。在“值”组中,jobnum和mynumString后面的所有名称都将作为文字名称插入。这意味着语句将尝试将单词“DateLastMoved”放入DateLastMoved列。如果表单中有一个值包含DateLastMoved列中所需的日期,则还必须将该值连接到字符串的值部分。您必须为每一列执行此操作。