2012-02-29 90 views
0

我是相當新的Access和vba和SQl,但我仍然需要使用這些。 我必須做的是根據一套標準在某個表上重複某些記錄; 爲了做到這一點,我設法執行了「插入選擇」語句。 簡而言之,我的問題是我必須重複N次相同的記錄,其中表中的某些字段值等於某個值。 這裏是我的代碼:這讓我,如果我跑,而不是這個代碼遍歷SQL語句N次(N是從表中取出)ACCES:插入選擇與迭代條件

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」iterativley的所有值? thak你提前爲answares !!!!

我對這個問題有了更新。 讓我們考慮一個更容易的問題: 假設我想爲我的代碼中的一個步驟做同樣的事情: 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 

這裏的問題基本上是在「地方標準」: 確實假設在步驟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 

這裏的問題基本上是在「地方標準」: 確實假設在步驟0在我的源表中有4條是驗證標準CD_MAD = 'PCA' 在第二步將會有8個,在3步會有16個等等......這不是我想要的,因爲我想回復那個特殊的原始只有12次! 我想要做的是找到一種方法來執行一次選擇的建議,並插入該選擇12倍! 幫助我請我稍微瘋狂!!

回答

0

"...where CD_MAD & "'NOM(" & n & ")'"不會做你想做的。由於SQL字符串引用了它無權訪問的數組。

改成這樣將從NOM提取值,然後串聯值的字符串

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

OK thak你!!!!! – jsirico 2012-02-29 18:11:42

+0

編輯:有一個運行時錯誤!無法打開數據庫INSERT到Acc6 SELECT * from Acc6其中CD_MAD ='PCA'它可能不是數據庫,您的應用程序可以識別該文件可能已損壞! – jsirico 2012-02-29 18:27:39

+0

嗯,這很奇怪。 'CurrentDB.Execute'上發生這種情況'INSERT' – 2012-02-29 18:41:43