PDA

Ver la Versión Completa : Aplicacion consola para conectarse a firebird


pereyra
13-07-2007, 03:14:10
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:

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
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
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

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.