Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Commando IBtable1.Exists no me funciona (https://www.clubdelphi.com/foros/showthread.php?t=57039)

pmtzg 04-06-2008 00:20:27

Commando IBtable1.Exists no me funciona
 
hola compañeros , tengo la siguiente situación, cuando intento saber si una tabla existe en una base de datos nunca me regresa el valor de True
a pesar de que la tabla existe este es mi codigo

Código Delphi [-]
 
 
Ibdatabase1.DatabaseName:= 'D:\Prueba\NDocto\BdIbx.fdb';                           IBDatabase1.DefaultTransaction:=IBTransaction1;
IBDatabase1.Params.Add('user_name=SYSDBA');
IBDatabase1.Params.Add('password=masterkey');
ibtransaction1.DefaultDatabase:=ibdatabase1;
ibdatabase1.Connected:=true;
ibdatabase1.Open;
IBtransaction1.Active:=true;
Ibscript1.Database:= Ibdatabase1;
ibsborra.Database:=ibdatabase1;
mitable:='latabla';   {nombre de la tabla}
IBscript1.Script.Strings[0]:='CREATE TABLE '+mitable;
IBSborra.Script.Strings[0]:='DROP TABLE '+mitable;
IBtable1.Database:=IBdatabase1;
IBtable1.TableName:=mitable;
IBtable1.Transaction:=IBtransaction1;
    if IBtable1.Exists then
       begin
       IBSborra.ExecuteScript;   {borro la tabla con datos};
       end;
      ibscript1.ExecuteScript;  {creo la tabla vacia}

no se que me falta o que estoy haciendo mal
espero que me puedan aydar
si quito el

if IBtable1.Exists then

y corro asi me programa si crea tabla o la borra
pero el problema viene cuando existe la tabla y no la borra
y ejecuto volver a crear una tabla nueva con el mismo nombre

gracias

defcon1_es 04-06-2008 10:25:53

Hola, mira el código del procedimiento GetExists del IBTable:

Código Delphi [-]
function TIBTable.GetExists: Boolean;
var
  Query: TIBSQL;
begin
  Result := Active;
  if Result or (TableName = '') then Exit;
  Database.InternalTransaction.StartTransaction;
  Query := TIBSQL.Create(self);
  try
    Query.Database := DataBase;
    Query.Transaction := Database.InternalTransaction;
    Query.SQL.Text :=
    'Select USER from RDB$RELATIONS where RDB$RELATION_NAME = ' + {do not localize}
    '''' +    {do not localize}
    FormatIdentifierValue(Database.SQLDialect,
      QuoteIdentifier(DataBase.SQLDialect, FTableName)) + '''';  {do not localize}
    Query.Prepare;
    Query.ExecQuery;
    Result := not Query.EOF;
  finally
    Query.Free;
    Database.InternalTransaction.Commit;
  end;
end;

Quizás te interese hacer un procedimiento similar, pero que tenga en cuenta alguna opción más que quieras comprobar tu.

Salu2.


La franja horaria es GMT +2. Ahora son las 08:18:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi