Extraer consulta de definición de base de datos JET a través de ADO
-
30-09-2019 - |
Pregunta
Tengo un programa en Delphi 2010 que utiliza una base de datos JET (MDB) a través de ADO. Me gustaría ser capaz de extraer las definiciones de algunas de las consultas en la base de datos y mostrarlos al usuario. ¿Es esto posible, ya sea a través de SQL, alguna de las interfaces de ADO, o interrogando a la base de datos en sí (que no parecen tener derecho a MSysObjects).
Solución
Parte de esa información está disponible a través de llamadas ADOX. Existe una visión general de la API con algunos ejemplos (por desgracia no en Delphi) en el sitio web de MSDN .
Básicamente lo que tendrá que hacer es es importar la biblioteca de tipos ADOX, y luego usar la envoltura que se genera para acceder a la API subyacente. A partir de ahí su tan simple como navegar por la jerarquía para obtener los datos que necesita.
Se necesitará acceder a la específica Ver objeto, y de ahí obtener la propiedad de comandos.
Otros consejos
A través de DAO, es bastante fácil. Se limita a extraer la propiedad SQL de cada QueryDef. En DAO desde Access, que sería:
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = DBEngine.OpenDatabase("[path/name of database]")
For Each qdf In db
Debug.Print qdf.SQL
Next qdf
Set qdf = Nothing
db.Close
Set db = Nothing
No sé cómo traducir eso, pero creo que es el método más simple, una vez que se sienta cómodo con el uso de DAO en lugar de ADOX.
Yo no uso de ADO en absoluto, pero supongo que tiene una colección de puntos de vista y la propiedad SQL trabajaría para consultas SELECT. Sin embargo, si usted está interesado en obtener el SQL para todos QueryDefs guardados, usted también tiene que mirar a las consultas DML, por lo que tendría que mirar los procedimientos almacenados. Tendría que mirar hacia arriba para que la sintaxis, pero estoy bastante seguro de que te mostramos cómo llegar a la información a través de ADO.