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)
-   -   Aplicacion consola para conectarse a firebird (https://www.clubdelphi.com/foros/showthread.php?t=45753)

pereyra 13-07-2007 03:14:10

Aplicacion consola para conectarse a firebird
 
Buenas noches
Desde hace tiempo que estoy buscando la manera de obtener datos de una base de datos firebird sin utilizar componentes visuales. Todos los ejemplos que encontré están basados en componentes visuales (la situación clásica).

Hasta ahora tengo lo siguiente:

Código Delphi [-]
program Test2007071203;
{$APPTYPE CONSOLE}  
uses
   SysUtils,
   DBTables,
   DB;  
var
   DataSource1: TDataSource;
   Table1: TTable;  
begin
   Table1 := TTable.Create(nil);
   Table1.DatabaseName:= 'dbagenda';
   Table1.TableName:='CONTACTO';
   Table1.Active := True;
   DataSource1 := TDataSource.Create(nil);
   DataSource1.DataSet:=Table1;
   readln;
end.


Así como está el código, creo un objeto TTable estableciendo las propiedades de la base de datos. Esto lo asocio luego con el TDataSource. La documentación que se adjunta con el IDE (Utilizo TurboDelphi) descansa toda la explicación en los componentes visuales.

Como mi intención es modelar nada más que los datos desde consola estoy totalmente perdido. Incluso, luego debo modificar datos en la base de datos y no encuentro algo que sea independiente de los componentes visuales que me permita hacerlo.

Desde ya, muchas gracias.

Neftali [Germán.Estévez] 13-07-2007 10:41:46

No se si cuando dices "componentes visuales" te refieres realmente a componentes visuales o a componentes que se sueltan en el formulario.

Lo que tú estás haciendo aquí es crear una TTable por código, cosa que no es muy diferente de utilizarlo en un form. De todas formas no entiendo que quieres de cir con "modelar los datos".

Si usas un TTable, podras acceder a los datos, modificarlos, guardarlos,...
Eso es lo que quieres. ¿Qué tipo de salida necesitas?

mamaro 13-07-2007 14:01:06

hola
 
Saludos!

..

Si bien los componentes que se suelen utilizar pueden ser creados por código en tiempo de corrida, es mucho más cómodo utilizarlos en diseño ... pues :rolleyes: lo más sencillo que se me ocurre es que utilices un Data Module (File->New->DataModule), luego incluyes el módulo en la cláusula uses (Ejem: uses ...., UDataModule1;) ... y listo, trabajás visualmente con los componentes de bases de datos.

pereyra 16-07-2007 17:12:35

Solucionado
 
Al fin encontré lo que buscaba. Muchas gracias Neftali y mamaro por las sugerencias. Me ayudó para encontrar el camino.
Al final no usé BDE porque los datos VARCHAR del firebird no era leídos. Así que usé dbexpress, configurándolo previamente en el Turbo Delphi. Todo sin problemas. Aquí de el código de la aplicación consola que se conecta a una base de datos firebird utilizando dbexpress para que le sirva de referencia a alguien que pase por la misma situación que yo.
Saludos

Código Delphi [-]
program p01Select;

{En los ejemplos con base de datos se utilizará
dbexpress. Para trabajar con los componentes es
necesario agregar los Units DBXpress, SqlExpr y DB}

{$APPTYPE CONSOLE}

uses
  SysUtils,
  DBXpress,
  SqlExpr,
  DB;

var
  Conn: TSQLConnection;
  ds: TSQLDataSet;
  i,j: Integer;
  query:String;
  s1,s2:String;
begin
  Conn := TSQLConnection.Create(nil);
  try
    Conn.LoadParamsOnConnect:=True;
    Conn.ConnectionName:='agendaTest';
    Conn.LoginPrompt:=False;
    Conn.Connected:=True;


    ds:=TSQLDataSet.Create(nil);
    ds.SQLConnection:=Conn;
    s1:='%n';
    s2:='M%';
    query:=Concat(
    'select * from contacto ',
    'where nombre like ''',s1,''' ',
    'and apellido like ''',s2,'''');
    writeln(query);
    ds.CommandText:=query;
    ds.Open;

    ds.First;
    for I := 0 to ds.Fields.Count - 1 do
    begin
      write(ds.Fields[i].DisplayName,' : ');
    end;
    writeln;
    writeln('-------------------------------------------');

    j:=10;
    while (not ds.Eof) and (j>0) do
    begin
      for I := 0 to ds.Fields.Count - 1 do
      begin
        write(ds.Fields[i].AsString,' : ');
      end;
      writeln;

      ds.Next;
      Dec(j);
    end;
    ds.Close;

    Conn.Close;
    ReadLn;
  except
    on e:Exception do
    begin
      if Assigned(Conn) then
      begin
        Writeln('Excepcion:',e.Message);
        Conn.Close;
        Readln;
      end;
    end;
  end;

end.


La franja horaria es GMT +2. Ahora son las 05:30:54.

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