Un día intentaba conectarme a AdventureWorks sample BD desde una app en Visual Basic 6.
Declaraba un recordset como sigue:
db.Open miConnectionString 'db es un objeto tipo Connection
Set rs = db.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
para poder listar todas sus tablas, usando un bucle.
Mi problema era que al ejecutar un query en SQL:
Dim s as String
Do Until rs.EOF
s="Select * from " & rs!Table_Name
' Hacer muchas muchas cosas con la variable "s"
rs.MoveNext
Loop
Me botaba error, ya que sólo tenía el nombre de la tabla. Para que funcionara, el query dentro de la variable "s" necessitaba también el nombre del esquema (Schema Name) y contruirlo todo de la siguiente forma:
Select * from Schema_Name.Tabla
Luego de mucho rebuscar en Google, hallé esta web
http://www.techrepublic.com/article/much-ado-about-field-properties/1045310
Donde explican lo que hace OpenSchema. Para mi caso, utilizo el SchemaID "AdSchemaTables", el cual incluye un filtro llamado "TABLE_SCHEMA".
Finalmente mi query queda:
Dim s as String
Do Until rs.EOF
s="Select * from " & rs!Table_Schema & "." & rs!Table_Name
' Hacer muchas muchas cosas con la variable "s"
rs.MoveNext
Loop
Update!
Cómo saber si una tabla tiene un nombre de esquema asignado:
Basta añadir este código en el bucle ("miTabla" es una variable tipo String):
miTabla = vbNullString
miTabla = rs!TABLE_SCHEMA
If miTabla <> vbNullString Then
miTabla = rs!TABLE_SCHEMA & "." & rs!TABLE_NAME
Else
miTabla = rs!TABLE_NAME
End If
4 comentarios:
Cariño, te sugiero LINQ para todas tus necesidades SQL.
Saludos desde Cali, Colombia.
-DT
Hola!
El problema es que Ling es sólo para .Net, y también estoy desarrollando en el viejo, vieeejo, VB6
Saludozz!
Wow, VB6 es nocivo para la salud bonita.
Poz sí....
Es un lenguaje que, si no pones Option Explicit y como es CaSe iNseNsItiVe, te acostumbra a "malas prácticas" de programación.
Por ello siempre recurro al C# salvador, con sus lambdas, sus punteros unsafe y su intolerancia a una mayúscula mal puesta o a una variable no declarada...
Y cuando se enoja, cómo avienta excepciones el muy miserable...
Publicar un comentario