| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 29 May, 2012 1:05 pm Asunto: Existe una tabla? |
|
|
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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mar 29 May, 2012 1:42 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 29 May, 2012 2:05 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 29 May, 2012 2:52 pm Asunto: |
|
|
Este es el error que da, es el mismo que antes.
Que puede ser?
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 30 May, 2012 7:01 am Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mie 30 May, 2012 11:27 am Asunto: |
|
|
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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mie 30 May, 2012 12:29 pm Asunto: |
|
|
| 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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mie 30 May, 2012 12:46 pm Asunto: |
|
|
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 |
|
 |
|