DDL compatible (CREATE TABLE) a través de diferentes bases de datos SQL?
-
12-10-2019 - |
Pregunta
Estoy trabajando en una aplicación de escritorio que debe soportar extremos traseros (actualmente) de MS Access y SQL Server. La aplicación está en constante desarrollo y con frecuencia se están haciendo cambios a la base de datos, sobre todo la adición de tablas y vistas para soportar nuevas características (pero también algunas gotas y tablas ALTER para agregar nuevas columnas).
Tengo un sistema que recopila el DDL en el ejecutable, comprueba la base de datos para ver si el archivo ejecutable cualquier nuevo DDL que tiene que ser ejecutado, y lo ejecuta. Esta multa trabaja para una sola base de datos.
Mi problema inmediato es que SQL Server y soporte de acceso completamente diferentes nombres para los tipos de datos por lo que un TABLE que se ejecuta contra el acceso no se ejecutarán en SQL Server (o, peor aún, se ejecutará, pero crear una tabla con diferentes tipos de datos) Crear.
¿Hay un método que puede ser usado para crear DDL (especialmente CREATE comandos tabla) que se puede ejecutar a través de ADO contra ambos de estas bases de datos sin tener que elaborar DDL separado para cada proveedor?
Solución
Dado que ya está utilizando ADO, debe mirar en Microsoft ADOX
Esto le permite manipular las estructuras en una fuente de datos utilizando un modelo de objetos ADO que es independiente del tipo de fuente de datos subyacente. es decir, sin recurrir a DDL explícita ??p>
El apoyo a ADOX no está garantizada por cualquier proveedor de ADO dado, y el nivel de apoyo ADOX puede variar incluso cuando está disponible. Pero para MS Access y MS SQL Server creo que encontrará toda la capacidad que necesite (y posiblemente más)
Otros consejos
Esto se puede hacer usando DBX en Delphi.
El siguiente es enlaces a código de ejemplo que muestra cómo se puede hacer esto. http://cc.embarcadero.com/item/26210
Yo tenía el mismo problema. Resolví que la aplicación de un preprocesador de C al SQL antes de ejecutarlo. El preprocesador incluye macros con el fin de manejar los diferentes DBS.
Stefano