在ms访问期间在运行时创建查询

时间:2009-08-04 10:45:42

标签: ms-access vb6

我必须使用访问数据库中的某些数据创建报告。我想通过使用visual basic自动化这个过程。我已经创建了查询来实现这一点,但问题是每次我有一个不同的数据库(具有相同的结构)。

我的查询有“创建表”,因此我无法直接从VB6触发这些查询。有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

您可以使用数据访问技术从VB6对Access数据库引擎运行CREATE TABLE SQL DDL语句(而不是查询!)。 ADO最适合DDL(例如比DAO更丰富的语法)。

您可以使用

创建一个新表,包括数据
SELECT * INTO MyTableClone FROM MyTable;

但它不会复制任何约束,例如所有列都可以为空:(

您还可以使用SQL DDL创建VIEWPROCEDURE,具体取决于您对“查询”的含义。

答案 1 :(得分:1)

您可以在SQL查询中使用IN子句来引用不同的MDB文件。例如:

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

答案 2 :(得分: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

如果您经常添加和删除表格和查询,您的数据库将需要大量压缩,因此通常最好避免这种情况。