Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Como saber si existe tabla.

753 views
Skip to first unread message

Leandro

unread,
Aug 2, 2004, 3:54:46 PM8/2/04
to
Hola a todos, resulta que por medio de una sentencia sql
se crea una tabla en determinado momento, y en otro se
elimina.

lo que necesito saber si la tabla existe en la base de
datos.

gracias!

julian-vlc-sp

unread,
Aug 2, 2004, 4:02:57 PM8/2/04
to
Te aporto una idea que no se implementar

En el caso de que la tabla no este vacía, podías contar los registros que
tiene, y si tienes valores mayores que cero es que existe

--

SALUDOS.
julian-valencia-españa

http://www.access-sin-codigo.tk
http://www.mvp-access.com

"Leandro" <anon...@discussions.microsoft.com> escribió en el mensaje
news:99d001c478ca$8f980c90$a601...@phx.gbl...

Emilio

unread,
Aug 2, 2004, 4:06:31 PM8/2/04
to
Hola Leandro
aqui tienes una función que te dice si existe una tabla y además si quieres
de paso la borra

'***************************************************************************
****
'* ExisteTabla
'* comprueba si existe la tabla pasada como parámetro, devolviendo Verdadero
/ Falso
'* si así se solicita elimina la tabla
'* Argumentos: strTabla => nombre de la tabla
'* bolBorrar => Opcional borrar la tabla (Si/No)
'* uso: ExisteTabla(strTabla, True) elimina la tabla en el caso de que
exista
'* ExisteTabla(strTabla) devuelve Verdadero
'* ESH 09/12/03 11:11 cambio el planteamiento, usando TableDef, en lugar de
'* buscar en la tabla MSysObjects
'* ESH 08/04/00 18:55
'***************************************************************************
****

Public Function ExisteTabla(strTabla As String, Optional bolBorrar As
Boolean = 0) As Boolean
Dim tdf As TableDef

' hago un bucle en la colección TableDefs para buscar la tabla

On Error GoTo ExisteTabla_TratamientoErrores

For Each tdf In CurrentDb.TableDefs
If tdf.name = strTabla Then
' si existe devuelvo "Verdadero"
ExisteTabla = True
' si se ha solicitado la eliminación, la borro
If bolBorrar Then CurrentDb.TableDefs.Delete tdf.name
' salgo
Exit Function
End If
Next tdf

ExisteTabla_Salir:
On Error GoTo 0
Exit Function

ExisteTabla_TratamientoErrores:

MsgBox "Error " & Err.Number & " en proc.: ExisteTabla de Módulo:
Módulo1 (" & Err.Description & ")"

GoTo ExisteTabla_Salir

End Function ' ExisteTabla

--
Saludos a tod@s desde Huelva
Emilio
miliuco56 ALGARROBA hotmail.com

Reglas de conducta de los grupos de noticias:
http://support.microsoft.com/default.aspx?scid=fh;ES-ES;newsreglas

"Leandro" <anon...@discussions.microsoft.com> escribió en el mensaje
news:99d001c478ca$8f980c90$a601...@phx.gbl...

Leandro

unread,
Aug 2, 2004, 4:34:56 PM8/2/04
to
lo que sucede es que si hago referencia a una tabla que no
existe, seguramente me devolverá un error.

gracias de todas maneras

>-----Mensaje original-----

>.
>

Leandro

unread,
Aug 2, 2004, 4:35:38 PM8/2/04
to
muchas gracias Emilio, voy a probar tu código

gracias!
>-----Mensaje original-----

>.
>

Lluís Franco

unread,
Aug 3, 2004, 4:04:37 AM8/3/04
to
:-)
Hola,
Otra variante más sencilla:
Puedes acceder directamente a la coleción TableDefs por el nombre de tabla
(key) e interceptar el error:

Public Function ExistTable(sTableName As String) As Boolean
On Error GoTo ErrHandlerNoExiste
Dim stmp As String
stmp = CurrentDb.TableDefs(sTableName).Name
ExistTable = True
ErrHandlerNoExiste:
End Function

Nos vemos,
--

Lluís Franco i Montanyés
[MS-MVP-MCP Visual Basic]


FIMARGE, S.A.
Principat d'Andorra
lfranco@ODIO_EL_SPAMfimarge.ad
Tel.: +376 805 100
Fax: +376 824 500

--
(Guía de netiquette del foro)
http://www.mvp-access.com/rubenvigon/foro/

Búho

unread,
Aug 3, 2004, 5:02:19 AM8/3/04
to
...pues ala, ya puestos, otra mas con ADOX, por si acaso...

Function ExisteTablaADO(ByVal NombreTabla As String) As Boolean

Dim Catalogo As New ADOX.Catalog
Dim ObjetoTabla As ADOX.Table
Catalogo.ActiveConnection = CurrentProject.Connection

For Each ObjetoTabla In Catalogo.Tables
If ObjetoTabla.Name = NombreTabla Then
ExisteTablaADO = True
Exit For
End If
Next
Set Catalogo = Nothing

End Function

y...todo un placer leerte por estos lares de Access... :-)

--

Saludos desde Valladolid
Francisco Javier García Aguado
buho...@mvp-access.com
---
http://www.mvp-access.com/buho
http://www.mvp-access.com/foro
http://groups.msn.com/Access2000VisualBasic/
Mi Perfil de MVP en Microsoft:
http://tinyurl.com/6ysvu
---


---
Este correo ha sido testeado y no tiene virus (Al menos conocidos). Saludos
de Francisco Javier García Aguado (Buho)
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.733 / Virus Database: 487 - Release Date: 02/08/2004


Lluís Franco

unread,
Aug 3, 2004, 5:24:09 AM8/3/04
to
:-P
Je, je, je...
Ya puestos, nos hemos olvidado del viejo y bueno (aunque cutre y
salchichero) 'Select' de toda la vida:

Public Function ExistTable(sTableName As String) As Boolean
On Error GoTo ErrHandlerNoExiste

Dim oRs As New ADODB.Recordset
oRs.Open "SELECT * FROM [" & sTableName & _
"] WHERE 1=0", CurrentProject.Connection
If oRs.State = adStateOpen Then
ExistTable = True
oRs.Close
End If
ErrHandlerNoExiste:
End Function

> y...todo un placer leerte por estos lares de Access... :-)

El placer es mío Búhito...
Saludos andorranos!
:-D

Búho

unread,
Aug 3, 2004, 6:44:49 AM8/3/04
to
:-DDD pues ala, otra mas, esta vez con sintaxis propia de VBA :-P

Function ExisteTabla(NombreTabla As String) As Boolean

If Len(Nz(DLookup("Name", "msysobjects", _
"type=1 and Name= '" & NombreTabla & "'"), "")) <> 0 Then
ExisteTabla = True
End If
End Function

Victor Delgadillo

unread,
Aug 3, 2004, 6:54:48 AM8/3/04
to
Yo uso tablas auxiliares temporales donde inserto datos. Una vez que la
tabla no me sirve mas, en vez de borrar la tabla, borro los registros con un
simple: DELETE * FROM Tabla. Asi no tengo que volver a crearla, sino
simplemente almacenar datos provisionales, usarla, borrar datos dejar la
tabla vacia. Para probar que esta vacia:
If DCount("[campo]","Tabla") > 0 Then
' hay campos
Else
' no hay campos
End If


--
Victor Delgadillo [MVP Access]
Miami, Florida

Consultas al grupo, asi todos nos beneficiamos.
Vea los MVP: http://www.microsoft.com/communities/mvp/mvp.mspx

"Leandro" <anon...@discussions.microsoft.com> wrote in message
news:9cb201c478d0$2c6936c0$a501...@phx.gbl...

Lluís Franco

unread,
Aug 3, 2004, 7:29:15 AM8/3/04
to
XDDDDDDDDDDDDDD
Ja, ja, ja!!!

Me descubro Búho, plas, plas!!!
Sólo me queda adaptarla también a SQL Server (pocas ganas de currar tengo
hoy :-D)

Y todavía se puede mejorar... por ejemplo, buscando en otra BD de Access,
no?
Saludos!

Option Compare Database
Option Explicit

Public Enum EnumDBType
MSAccess = 0
MSSQL = 1
End Enum

Public Type EventArgs
TipoBD As EnumDBType
ServerName As String
DataDaseName As String
User As String
PWD As String
End Type

Public Function ExistsTable(sTableName As String, e As EventArgs) As Boolean
Dim oCon As ADODB.Connection, oRs As ADODB.Recordset, sTmp As String
If e.TipoBD = MSAccess Then


If Len(Nz(DLookup("Name", "msysobjects", _

"type=1 and Name= '" & sTableName & "'"), "")) <> 0 Then
ExistsTable = True
End If
ElseIf e.TipoBD = MSSQL Then
Set oCon = New ADODB.Connection
sTmp = "Provider=SQLOLEDB.1;" & _
"Password=" & e.PWD & _
";Persist Security Info=True" & _
";User ID=" & e.User & _
";Initial Catalog=" & e.DataDaseName & _
";Data Source=" & e.ServerName
oCon.Open sTmp
sTmp = "SELECT name FROM sysobjects " & _
"WHERE (xtype = 'U') AND (uid = 1) AND (name = N'" & sTableName &
"')"
Set oRs = New ADODB.Recordset
oRs.Open sTmp, oCon


If oRs.State = adStateOpen Then

If Not oRs.EOF Then ExistsTable = True
End If
oRs.Close
Set oRs = Nothing
oCon.Close
Set oCon = Nothing
End If
End Function

Public Sub Test()
Dim ea As EventArgs

'Test access
ea.TipoBD = MSAccess
MsgBox ExistsTable("Clientes", ea), vbInformation

'Test SQL
ea.TipoBD = MSSQL
ea.ServerName = "LFRANCO"
ea.DataDaseName = "Northwind"
ea.User = "sa"
ea.PWD = ""
MsgBox ExistsTable("Customers", ea), vbInformation
End Sub

Búho

unread,
Aug 3, 2004, 11:16:58 AM8/3/04
to
:-DDD
Chapeau !!!
;-)

Leandro

unread,
Aug 3, 2004, 3:11:24 PM8/3/04
to
eeepa!!
no habia leido todo esto!!!


Excelente! muchas gracias

Leandro


>-----Mensaje original-----

>.
>

0 new messages