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?

¿Fue útil?

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top