2009-08-04 91 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。如果您经常添加和删除表和查询,则需要大量的压缩,所以通常最好避免这种情况。