2009-08-04 15 views
0

Je dois créer des rapports avec certaines données d'une base de données d'accès. Je veux automatiser ce processus en utilisant Visual Basic. J'ai créé des requêtes pour y parvenir mais le problème est chaque fois que j'ai une base de données différente (avec la même structure).créer des requêtes pendant l'exécution dans msaccess

requêtes que j'ai à "créer une table", en raison de laquelle je suis incapable de déclencher ces requêtes de VB6 directement. Est-ce que je peux résoudre ce problème?

Répondre

1

Vous pouvez utiliser la clause IN dans les requêtes SQL pour faire référence à différentes fichiers MDB Par exemple:.

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

Vous pouvez exécuter une instruction SQL DDL CREATE TABLE (pas une requête!) Sur le moteur de base de données Access à partir de VB6 en utilisant une technologie d'accès aux données. ADO est meilleur pour DDL (par exemple syntaxe plus riche que DAO).

Vous pouvez créer une nouvelle table, y compris les données, en utilisant

SELECT * INTO MyTableClone FROM MyTable; 

mais il ne copie aucune contrainte par exemple toutes les colonnes seront annulable :(

Vous pouvez également utiliser SQL DDL pour créer un VIEW ou un PROCEDURE en fonction de ce que vous entendez par « requête ».

+0

yup. mais j'essayais de savoir si exécuter "select * dans la table1 de la table où col1 = col" directement. Créer une table puis déplacer chaque jeu d'enregistrements serait toujours là. :) – adbanginwar

+0

Désolé, mais je ne comprends pas ce que vous voulez dire quand vous dites: "Créer une table et ensuite déplacer chaque jeu d'enregistrements serait toujours là." – onedaywhen

1

Vous pouvez exécuter les requêtes SQL et VBA à partir Voici quelques notes

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 

Votre datab.. ase aura besoin de beaucoup de compactage si vous ajoutez et supprimez régulièrement des tables et des requêtes, il est donc préférable d'éviter cela.

Questions connexes