Question

Je travaille sur une application de bureau qui doit prendre en charge (actuellement) extrémités arrière MS Access et SQL Server. L'application est en constante évolution et les changements sont souvent réalisés à la base de données, la plupart du temps l'ajout de tables et vues pour soutenir de nouvelles fonctionnalités (mais aussi quelques gouttes et TABLEs ajouter ALTER nouvelles colonnes).

J'ai un système qui compile l'exécutable dans le DDL, vérifie la base de données pour voir si l'exécutable a une nouvelle DDL qui doit être exécuté, et l'exécute. Cela fonctionne très bien pour une seule base de données.

Mon problème immédiat est que le soutien SQL Server et Access d'une manière extravagante des noms différents pour les types de données si une instruction CREATE TABLE qui exécute contre l'accès ne sera pas exécuter contre SQL Server (ou pire, exécutera, mais créer une table avec différents types de données).

Y at-il une méthode qui peut être utilisé pour créer DDL (en particulier les commandes CREATE TABLE) qui peut être exécuté par ADO contre ces deux bases de données sans avoir à concevoir DDL pour chaque fournisseur?

Était-ce utile?

La solution

Puisque vous utilisez déjà ADO, vous devriez regarder dans Microsoft ADOX

Cela vous permet de manipuler des structures dans une source de données à l'aide d'un modèle d'objet ADO qui est indépendant du type de source de données sous-jacentes. dire sans avoir recours à explicite DDL

Soutien à ADOX est garanti par aucun fournisseur ADO donné, et le niveau de soutien ADOX peut varier même lorsqu'elle est disponible. Mais pour MS Access et MS SQL Server je pense que vous trouverez toutes les capacités dont vous avez besoin (et peut-être plus!)

Autres conseils

Cela peut être fait en utilisant DBX dans Delphi.

Voici des liens vers des exemples de code montrant comment cela peut se faire. http://cc.embarcadero.com/item/26210

J'ai eu le même problème. Je résolus qu'il l'application d'un préprocesseur C à SQL avant de l'exécuter. Le préprocesseur comprend des macros afin de gérer les différentes dbs.

Stefano

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top