2009-08-04 94 views
0

我必須創建具有來自訪問數據庫的某些數據的報告。我想通過使用visual basic來自動化這個過程。我創建了查詢來實現這一點,但問題是每次我有不同的數據庫(具有相同的結構)。在msaccess中運行時創建查詢

查詢,我有「創建表」,由於我無法直接從VB6觸發這些查詢。有什麼辦法可以解決這個問題嗎?

回答

1

您可以使用SQL查詢IN子句來引用不同MDB文件,例如:

"SELECT srpID, srpServiceRecordID, srpInvoiceDate, srpInvoiceNumber, srpParts " & _ 
"FROM ServiceRecordParts IN '" & strDatabasePathandName & "';" 
1

您可以使用數據訪問技術從VB6對Access數據庫引擎運行CREATE TABLE SQL DDL語句(不是查詢!)。 ADO最適合DDL(例如比DAO更豐富的語法)。

您可以創建一個新表,包括數據,使用

SELECT * INTO MyTableClone FROM MyTable; 

,但它不會複製任何限制例如所有列將可爲空:(

您還可以使用SQL DDL創建取決於你的意思是「查詢」什麼VIEWPROCEDURE

+0

是。但我試圖找出是否直接執行「select * into table1 from table where col1 = col」。創建表格然後移動每個記錄集總是在那裏。 :) – adbanginwar 2009-08-04 12:20:36

1

您可以從VBA查詢和SQL這裏有幾個注意事項

Dim db As Database 
Dim strSQL As String 
Dim qdf As QueryDef 

''Execute 
Set db = CurrentDb 
strSQL = "SELECT EmpID, EmpName INTO NewT FROM tblT WHERE EmpName Is Not Null" 
''This will fail if the table already exists 
''Only Action queries can be Executed 
db.Execute strSQL, dbFailOnError 
Debug.Print db.RecordsAffected 

''This is not such a good approach 
''Open query, will give warning 
''that the table is about to be deleted. 
DoCmd.OpenQuery "qryUpdate" 

''Also not so good 
''Open query, skip warning 
DoCmd.SetWarnings False 
DoCmd.OpenQuery "qryUpdate" 
''This line is very important indeed 
''never set warnings off, unless you 
''set then on again 
DoCmd.SetWarnings True 

''Use query 
Set qdf = db.QueryDefs("qryUpdate") 
''The table in this SQL already exists, so 
''a small diversion 
db.Execute "DROP TABLE NewT", dbFailOnError 
''Back on track 
qdf.Execute dbFailOnError 
Debug.Print qdf.RecordsAffected 

''Change query SQL 
qdf.SQL = strSQL 

''Use SQL from query 
strSQL = qdf.SQL 
''The table in this SQL already exists, so 
''a small diversion 
db.Execute "DROP TABLE NewT", dbFailOnError 
''Back on track 
db.Execute strSQL, dbFailOnError 
Debug.Print db.RecordsAffected 

你的數據B。如果您經常添加和刪除表和查詢,則需要大量的壓縮,所以通常最好避免這種情況。