【问题标题】:ACCES:insert select with an iterate where condition访问:使用迭代 where 条件插入选择
【发布时间】:2012-03-19 04:55:57
【问题描述】:

我对 Access、vba 和 SQl 还很陌生,但我仍然需要将它们一起使用。 我要做的是根据一组标准在某个表上复制一些记录; 为了做到这一点,我设法执行了“插入选择”语句。 简而言之,我的问题是我必须复制 N 次相同的记录,其中表中的某些字段值等于某个值。 这是我的代码:这允许我迭代 sql 语句 N 次(其中 N 取自表)

    Sub trydup()
Dim rst As DAO.Recordset
Dim asd As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("piv")
With rst
Dim i As Long
For i = 1 To 36
Dim NOM(1 To 36) As String
Dim NUM(1 To 36)
NOM(i) = !CDPRD
NUM(i) = !n
.MoveNext
Next
End With
Set asd = CurrentDb.OpenRecordset("Acc6")
MsgBox (NUM(4) & "   " & NOM(4))
With asd
Dim k As Integer
Dim n As Long
For n = 1 To 36
Do While k <= NUM(n)
  CurrentDb.Execute " INSERT into Acc6 SELECT * from Acc6 where CD_MAD = " & "'NOM(" & n & " )'"
k = k + 1
Loop
Next n
End With
End Sub

确实,如果我运行此代码:

Sub trydup()
Dim rst As DAO.Recordset
Dim asd As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("piv")
With rst
Dim i As Long
For i = 1 To 36
Dim NOM(1 To 36) As String
Dim NUM(1 To 36)
NOM(i) = !CDPRD
NUM(i) = !n
.MoveNext
Next
End With
Set asd = CurrentDb.OpenRecordset("Acc6")
MsgBox (NUM(4) & "   " & NOM(4))
With asd
Dim k As Integer
Dim n As Long
For n = 1 To 36
Do While k <= NUM(n)
  *CurrentDb.Execute " INSERT into Acc6 SELECT * from Acc6 where CD_MAD='PCA' " )'"*
k = k + 1
Loop
Next n
End With
End Sub

其中 PCA 是向量 NOM 中包含的值,vba 工作正常! 所以问题是如何在sql语句中提取向量“NOM”迭代的所有值? 提前谢谢你的回答!!!!

我有关于这个问题的更新。 让我们考虑一个更简单的问题: 假设我只想在代码中的一个步骤做同样的事情: NUM 向量中的第一个值是 = 12 在 NOM = PCA 所以基本上我想做的是在我的表中查找具有字段值 CD_MAD='PCA' 的所有行,然后在同一个表中复制 12 次该记录!所以我的代码将是这样的:

    Sub trydup()
Dim rst As DAO.Recordset
Dim asd As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("piv")
With rst
Dim i As Long
For i = 1 To 36
Dim NOM(1 To 36) As String
Dim NUM(1 To 36)
NOM(i) = !CDPRD
NUM(i) = !n
.MoveNext
Next
End With
Set asd = CurrentDb.OpenRecordset("Acc6")
   With asd
   Dim n As Long
For n = 1 To 36
Do While k <= 12
  CurrentDb.Execute " INSERT into Acc6 SELECT * from Acc6 where CD_MAD='PCA' " )'"
k = k + 1
Loop
End With
End Sub

这里的问题基本上在于“where条件”: 确实假设在我的源表中的第 0 步有 4 条记录验证标准 CD_MAD='PCA' 在第二步将有 8 个,在第 3 步将有 16 个等等......这不是我想要获得的,因为我只想回复那个特定的原始数据 12 次! 我想做的是找到一种方法来执行一次选择指令,而不是插入该选择 12 次!!!! 请帮帮我,我有点疯了!


我有关于这个问题的更新。 让我们考虑一个更简单的问题: 假设我只想在代码中的一个步骤做同样的事情: NUM 向量中的第一个值是 = 12 在 NOM = PCA 所以基本上我想做的是在我的表中查找具有字段值 CD_MAD='PCA' 的所有行,然后在同一个表中复制 12 次该记录!所以我的代码将是这样的:

    Sub trydup()
Dim rst As DAO.Recordset
Dim asd As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("piv")
With rst
Dim i As Long
For i = 1 To 36
Dim NOM(1 To 36) As String
Dim NUM(1 To 36)
NOM(i) = !CDPRD
NUM(i) = !n
.MoveNext
Next
End With
Set asd = CurrentDb.OpenRecordset("Acc6")
   With asd
   Dim n As Long
For n = 1 To 36
Do While k <= 12
  CurrentDb.Execute " INSERT into Acc6 SELECT * from Acc6 where CD_MAD='PCA' " )'"
k = k + 1
Loop
End With
End Sub

这里的问题基本上在于“where条件”: 确实假设在我的源表中的第 0 步有 4 条记录验证标准 CD_MAD='PCA' 在第二步将有 8 个,在第 3 步将有 16 个等等......这不是我想要获得的,因为我只想回复那个特定的原始数据 12 次! 我想做的是找到一种方法来执行一次选择指令,而不是插入该选择 12 次!!!! 请帮帮我,我有点疯了!

【问题讨论】:

    标签: sql select loops insert


    【解决方案1】:

    这个"...where CD_MAD &amp; "'NOM(" &amp; n &amp; " )'" 没有做你想做的事。由于 SQL 字符串引用了它无权访问的数组。

    将其更改为此将从NOM 中提取值,然后将值连接到字符串

    " ... where CD_MAD = '" & NOM(n) & "'" 
    

    【讨论】:

    • 编辑:存在运行时错误!!!!无法打开数据库 INSERT into Acc6 SELECT * from Acc6 where CD_MAD='PCA' 它可能不是您的应用程序识别的数据库或文件可能已损坏!
    • 嗯,这很奇怪。这发生在CurrentDB.Execute " INSERT
    • 对不起,我的意思是我之前的评论是一个问题。您是否在CurrentDb.Execute " INSERT ... 线上遇到这种情况?
    • 不幸的是,该代码破坏了我所有的数据库!我丢失了所有源代码,我正在尝试再次到达我的数据库中的那一步!当我到达那个范围时,会再次通知您!
    • 好的,我已经恢复了我所有的工作,是的,错误出现在 currentDb.execute 行!!!!1 我该怎么办???
    猜你喜欢
    • 2019-01-06
    • 2013-12-25
    • 2015-04-04
    • 2016-07-23
    • 2012-04-10
    • 2019-01-21
    • 2020-10-23
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多