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)
-   -   Conocer lista de tablas de Base Datos (Firebird 2.0 y Componentes IBObjects) (https://www.clubdelphi.com/foros/showthread.php?t=40372)

mpedrero 14-02-2007 17:06:28

Conocer lista de tablas de Base Datos (Firebird 2.0 y Componentes IBObjects)
 
Esta pregunta es parecida a la de más abajo, pero...

¿alguien sabe como obtener los nombres de las tablas de una base de datos Firebird 2.0 usando los componentes IBObjects 4.7 en delphi?.

Necesito saberlo, para que a la hora de crear una tabla saber si esta existe o no en la base de datos.

Saludo y gracias a todos...

fdelamo 14-02-2007 17:47:16

No he utilizado los IBObjects, pero supongo que habrá un componente para hacer una query, ¿no?

Prueba como se dice Aquí, o lo que también se puede hacer es intentar crear la tabla de todas formas con un try ... except y controlar el error que da si la tabla existe.

Un saludo

Lepe 14-02-2007 19:12:15

En FB 1.5 esto furula:
Código Delphi [-]
const SALTOLINA = #13#10;

procedure CheckTablename(const TableName:string);
var Tablas:string;
begin
    tablas := uppercase(GetTableNames);
    if Pos(uppercase(TableName),tablas)= 0 then
      raise Exception.Create(Format('La Tabla "%s" no existe en la BBDD.'+saltolinea+
                               'Tablas Correctas:'+SALTOLINEA+
                               '%s',[TableName,tablas]));
end;

function GetTableNames:string;
var Tablas:TStringList;
    m :TMDOQuery;
begin
  Tablas := TStringList.Create;
  m := TMDOQuery.Create(nil);
  try
    m.Database:= dtm.DB;
    m.Transaction:= dtm.Trans;
{----------------------------NOMBRES DE TABLAS Y VISTAS ----------------------}
    m.SQL.Text:=   'SELECT RDB$RELATION_NAME FROM RDB$RELATIONS' + {do not localize}
                          ' WHERE RDB$SYSTEM_FLAG = 0'; {do not localize}

    m.Open;
    lpsql.VerResultadoSql(m,tablas);
    Result := Format('Tablas existentes en la BBDD:'+saltolinea+
                               '%s',[insertbreakline(tablas.CommaText,76)]);

  finally
    FreeAndNil(m);
  end;
end;

VerResultadossql: toma todos los registros de la consulta "m", (cada registro es el nombre de una tabla o vista) y las añade al StringList "tablas".

InsertBreakLine hace lo propio, cada 76 caracteres, añade un salto de linea.

No incluyo esas funciones, ya que uso otras rutinas de terceros y se alargaría mucho el post.

Saludos

mpedrero 15-02-2007 11:31:15

Antes de nada, gracias a todos por la ayuda, acabo de encontrar la solución a mis problemas, al menos usando sentencias SQL... para colaborar aqui vá la sentencia SQL, que espero sea la definitiva, para obtener únicamente las tablas de una base de datos:

Código SQL [-]
SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS
WHERE RDB$SYSTEM_FLAG = 0 AND
RDB$RELATION_NAME NOT IN (SELECT RDB$VIEW_NAME
FROM RDB$VIEW_RELATIONS);

Espero que os sirva... ;)

Ahora, espero impaciente, que alguien descubra como obtener las tablas sin usar sentencias SQL, usando IBObjects.
Gracias a todos por la ayuda... :)

fjcg02 15-02-2007 23:42:45

He utilizado Delphi de mayordomo alguna vez. Si cuando meto un objeto TTable puedo seleccionar las tablas de la bbdd de una lista, seguro que existe una función ya creada que lo haga. Además la ha escrito un especialista, seguro.
A mi me funciona con Access, pero seguro que funciona con cualquier motor de bbdd ( cual no funciona con Delphi ? )

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.Connected:= True;
ADOConnection1.GetTableNames(Memo1.lines,true);
end;

Suerte y un saludo

Lepe 16-02-2007 10:55:59

Hombre, depende de los componentes que uses.

Cuando en el IDE eres capaz de elegir una tabla, eso corre por parte de los editores de propiedades de esos componentes. Pero está hecho para el IDE, no para usarlos en tu código.

Es cierto que Delphi tiene esa alegría, Todo lo que se propone en el IDE, también lo ofrecen por código para que lo uses como programador, pero no es algo obligatorio. Incluso cuando te ofrecen el código fuente de esos editores de propiedades, resulta algo engorroso extraer el código que hace esa opción que necesitas.

Por ejemplo, te habrás fijado que los componentes TIBDataset implementan un parser para crear las cadenas SQL de actualización, borrado, inserción, etc, ese parser no está inmediatamente disponible para usarlo en tus programas.

Saludos


La franja horaria es GMT +2. Ahora son las 16:08:43.

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