【发布时间】: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 次!!!! 请帮帮我,我有点疯了!
【问题讨论】: