listar las tablas

goblin135
26 de Abril del 2004
Hola a todos.
He encontrado este cdigo para listar las tablas de una BD, aunque tambin lista las consultas. Alguien sabe como diferenciar entre unas y otras? Solo me interesaria sacar las tablas..

<%Set cnn1 = server.createobject("ADODB.Connection")
Cnn1.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/database/xxxx.mdb"))


Set oRS = cnn1.OpenSchema(4)
tablax=""
Do Until ors.EOF
if tablax<>ors("TABLE_NAME") then
tablax=ors("TABLE_NAME")
response.write ors("TABLE_NAME") &"<br>"
end if
ors.MoveNext
Loop
ors.Close
cnn1.Close
SET cnn1=nothing
%>

Gracias.


Pedro Perez
26 de Abril del 2004
Chequea el campo TABLE_TYPE del registro. Ahi debe estar almacenado 'TABLE', 'VIEW' y no se que mas.

goblin135
26 de Abril del 2004
Si te refieres a intentar algo como:

ors("TABLE_TYPE")

ya lo intent y no existe la coleccion. TABLE_NAME si, pero TABLE_TYPE no,,,

Alguna otra sugerencia??

Ya est empezando a rayar el tema...
Nadie ha necesitado nunca sacar las tablas de una BD??? Creo que eso ha de ser algo muy comun no?? Como lo hacen??

Muchas Gracias.

sdemingo
26 de Abril del 2004
es la priemra vez que tengo que sacar las tablas de una bbdd, y me veo con el mismo problema que tu.

Este es mi cdigo:

Private Sub Form_Load()
Dim itmX As ListItem
Dim rs As New ADODB.Recordset

ListView1.ColumnHeaders.Add , , "Nombre de la Tabla", ListView1.Width
ListView1.View = lvwReport

Set rs = oConexion.OpenSchema(adSchemaTables)
Do Until rs.EOF
Set itmX = ListView1.ListItems.Add(, , rs("TABLE_NAME"))
rs.MoveNext
Loop
rs.Close

End Sub

Me saca el nombre de las tablas y ms cosas que no me interesan en absoluto.

Necesito ayuda. Solo quiero los nombres de las tablas!!!!

sdemingo
26 de Abril del 2004
Con el ejemplo que he puesto antes, funciona bien. Tan solo tienes que filtrar las tablas del sistema que aparecen, ya que sabemos que todas empiezan con 'MSys'
Tras el filtrado, las que te queden son las fsicas.

Un saludo

Rick
26 de Abril del 2004
prueba el valor 20 en la llamada a openschema (adSchemaTables) y debers tener table type disponible:

adSchemaTables = 20
Set rstSchema = cnn1.OpenSchema(adSchemaTables)

Do Until rstSchema.EOF


response.write("Table name: " & rstSchema.fields("TABLE_NAME") & " " & " Table type: " & rstSchema.fields("TABLE_TYPE") & "<br>")
'response.write(rstSchema.fields("TABLE_NAME"))
rstSchema.MoveNext

Loop

rstSchema.Close

cnn1.Close

Manuel Navea
26 de Abril del 2004
Me funciono sin problemas pero para SQL Server.
Gracias

Dim cnn1
Set cnn1 = Server.CreateObject("ADODB.Connection")
cnn1.Open "Provider=SQLoledb; Server=ARICOM02; catalog=BD; uid=usuario; pwd=clave"


Set oRS = cnn1.OpenSchema(4)
tablax=""
Do Until ors.EOF
if tablax<>ors("TABLE_NAME") then
tablax=ors("TABLE_NAME")
if left(ors("TABLE_NAME"),3) = "ANX" Then
response.write ors("TABLE_NAME") &"<br>"
end if
end if
ors.MoveNext
Loop
ors.Close
cnn1.Close
SET cnn1=nothing
%>


para lo tuyo haz lo contrario, discrimna las consulta agregando un sufijo al comienzo del nombre de la consulta o elimina las consultas del archivo mdb.