создание запросов во время выполнения в msaccess - PullRequest
0 голосов
/ 04 августа 2009

Мне нужно создавать отчеты с определенными данными из базы данных доступа. Я хочу автоматизировать этот процесс с помощью Visual Basic. Я создал запросы для достижения этой цели, но проблема в том, что каждый раз, когда у меня есть другая база данных (с той же структурой).

запросов, которые у меня есть, имеют «создать таблицу», из-за чего я не могу запустить эти запросы непосредственно из VB6 Есть ли способ решить эту проблему?

Ответы [ 3 ]

1 голос
/ 05 августа 2009

Вы можете использовать предложение IN в запросах SQL для ссылки на различные файлы MDB. Например:

"SELECT srpID, srpServiceRecordID, srpInvoiceDate, srpInvoiceNumber, srpParts " & _ 
"FROM ServiceRecordParts IN '" & strDatabasePathandName & "';"
1 голос
/ 07 августа 2009

Вы можете запускать как запросы, так и SQL из VBA. Вот несколько заметок.

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

Ваша база данных нуждается в большом сжатии, если вы регулярно добавляете и удаляете таблицы и запросы, поэтому обычно лучше этого избегать.

1 голос
/ 04 августа 2009

Вы можете запустить оператор SQL DDL CREATE TABLE (не запрос!) Для ядра базы данных Access из VB6, используя технологию доступа к данным. ADO лучше всего подходит для DDL (например, с более высоким синтаксисом, чем DAO).

Вы можете создать новую таблицу, включая данные, используя

SELECT * INTO MyTableClone FROM MyTable;

но он не будет копировать какие-либо ограничения, например все столбцы будут обнуляться: (

Вы также можете использовать SQL DDL для создания VIEW или PROCEDURE в зависимости от того, что вы подразумеваете под «запросом».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...