Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Existe una tabla?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Existe una tabla? Responder citando

Que hago mal?

bool __fastcall TFMain::ExisteTablaSQL(AnsiString Tabla)
{
TQuery->SQL->Clear();
TQuery->SQL->Add("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '"+Tabla+"'");
try
{
TQuery->ExecSQL();
return true;
}
catch(Exception &exception)
{
return false;
}
}

Lo raro es que si lo hago desde el desde el SQL Manager Studio de microsoft lo hace bien, pero si lo hago desde código da un error.

Se os ocurre algo?

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Veo que no miras el resultado, ya que si existe la tabla tendras el valor 1 y si no existe 0
No estoy acostumbrado a usar los query de esa forma (tengo mis propias clases de acceso a dato), pero la funcion deberia ser algo asi:
Código:

bool __fastcall TFMain::ExisteTablaSQL(AnsiString Tabla)
{
bool lr;
TQuery->SQL->Clear();
TQuery->SQL->Add("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '"+Tabla+"'");
try
{
TQuery->Open();
lr = (TQuery->Fields->Fields[0]->AsInteger == 1);
TQuery->Close();
}
catch(Exception &exception)
{
lr = false;
}
return lr;
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si, tienes razon,

Pero es que el error lo da en el Select, de todas maneras voy a comprobarlo a ver.

Gracias

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Este es el error que da, es el mismo que antes.

Que puede ser?



Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

A mi ese error me lo da cuando las tablas no las tengo asignadas a un TDatabase y un TSession; en este caso hay que poner el nombre completo de la tabla, incluyendo la extensión y la vía de acceso. Algo así:
Código:
TQuery->SQL->Clear();
TQuery->SQL->Add("SELECT COUNT(*) FROM '" + ViaAcceso + "\\TABLES.DB' WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '"+Tabla+"'");
try
{
     TQuery->ExecSQL();
     return true;
}
catch(Exception &exception)
{
     return false;
}

Siempre y cuando la tabla sea Paradox o Dbase. Otra forma que tienes de comprobar si la tabla existe o no es con un FileExists:
Código:
if (FileExists(ViaAcceso + "\\Tables.db"))

Si tienes declarado un TDatabase y un TSession no hace falta incluir ni vía ni tipo en los querys.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Lo extraño es eso,

No es una tabla Paradox o DBase, es SQL Server, por eso no entiendo nada,

No se que pasa voy a seguir investigando a ver.

UN abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola Carlos, no te puedo ayudar mucho con ese error, pero creo que debes de buscarlo en tus parámetros de conexion (quizás derechos usuario), ya que yo ejecuté tu consulta sobre un ms sql para probarla y funcionaba correctamente (devolviendo el count 0 ó 1).
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No se,

Hago cualquier consulta y sale bien, hago esa y me da error, no entiendo nada, ademas yo tambien hago la consulta directamente en SQL Server y funciona.

Sigo dandole vueltas.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.