2014-11-03 70 views
0

我正在MS ACCESS 2010中的一個項目中工作,其中現有的表讓我們假設員工詳細信息,並且必須提取每行基於僱員的字段first_name,然後爲每個人創建一個不同的表。例如,如果名字是John,那麼我應該從員工詳細信息表中獲取所有記錄,其中第一個名稱字段是John,並將所有這些行保存在新的表即新桌子_John等。 爲此,我創建了一個新表,只有第一個名稱字段的唯一記錄,然後運行下面的代碼,但我得到一個運行時錯誤3067:查詢輸入必須包含至少一個表或查詢如何從MS ACCESS中的表中提取唯一記錄(行)並將它們保存到不同表中

Private Sub cmdRemoveDuplicates_Click() 
Dim db As Database 
Dim rst As Recordset 
Dim rst1 As Recordset 
Dim tbl As Table 

Set db = CurrentDb 
Set rst = db.OpenRecordset("tblDetails", dbOpenDynaset, dbSeeChanges) 
'Make new table with unique records from first name field 
CurrentDb.Execute "SELECT distinct first_name INTO [unique_records] from tblDetails;" 

Set rst1 = db.OpenRecordset("unique_records", dbOpenDynaset, dbSeeChanges) 
rst1.Requery 
Do Until rst1.EOF 

CurrentDb.Execute "SELECT tblDetails.* INTO tblNew" & rst1!first_name & _ 
" FROM unique_records LEFT JOIN tblDetails ON unique_records.first_name = tblDetails.first_name" & _ 
" WHERE (((tblDetails.first_name)='" & rst1!first_name & "'));" 



rst1.MoveNext 

Loop 
rst1.Close 
rst.Close 
db.Close 
Set rst1 = Nothing 
Set rst = Nothing 
Set db = Nothing 

End Sub 

回答

0

我的猜測是你在那裏得到一個空間或無效字符。在表格名稱周圍添加[],如果您不想要領導/培訓空間,請將其修剪出來。

CurrentDb.Execute "SELECT tblDetails.* INTO [tblNew" & rst1!first_name & _ 
"] FROM unique_records LEFT JOIN tblDetails ON unique_records.first_name = tblDetails.first_name" & _ 
" WHERE (((tblDetails.first_name)='" & rst1!first_name & "'));" 

如果仍然出現錯誤,在指定的字符串的EXECUTE給一個字符串變量,並將其粘貼到MS Access和看看它說。有時在查看實際的SQL時,問題很明顯。

+0

該代碼在Excel 2010中工作,以前我在Excel 2013中運行,所以它可能是一些兼容性問題,但我上面在我的問題中說明的代碼終於工作。 – 2014-12-16 18:22:53

相關問題