PDA

Ver la Versión Completa : Como compartir metodos entre formularios y tambien la conexion a postgres??


aviatorz
28-11-2012, 18:52:56
En Lazarus 1.0.2, estoy intentando hacer una clase que solo contenga métodos y en esos métodos se realice cualquier operación y desde los formularios llamar a esos métodos.

El problema es el siguiente cuando quiero por ejemplo inicializar la conexión de postgres.

...
class var
{Variables de clases}
SQLquery:TSQLQuery;
Datasource:TDataSource;
Transaccion:TSQLTransaction;
PQConexion:TPQConnection;
...
class procedure StaticData.Inicializa_conexion(usuario,contrasena,host,db:string);
begin
PQConexion.hostname:=host;
PQConexion.databaseName:=db;
PQConexion.username:=usuario;
PQConexion.password:=contrasena;

PQConexion.transaction:= Transaccion;
Transaccion.DataBase:=PQConexion;
SQLQuery.Transaction:=Transaccion;
Datasource.DataSet:=SQLQuery;

try
PQConexion.connected:=true;
Application.MessageBox(PChar('Conexion realizada con exito'),PChar('Conexion'),MB_ICONINFORMATION);
except
on e:exception do
begin
Application.MessageBox(PChar('Ha ocurrido el siguiente Error: '+e.Message),PChar('Error'),MB_ICONINFORMATION);
PQConexion.connected:=false;
end;
end;
end;
me aparece un error que según entiendo tiene que ver algo con la instanciacion del objeto PQConexion, el error dice:
El proyecto x ha lanzado una excepcion de la clase 'External:SIGSEGV'. en direccion 403AD0
Corrí el proyecto paso a paso y el error se da cuando intenta hacer la primera asignación al PQConexion
PQConexion.hostname:=host;Por eso supongo que tiene que ver algo con instanciar el PQConexion, que opinan?

aviatorz
28-11-2012, 22:11:43
Al final la solución no estaba tan difícil, solo habia que instanciar los objetos de la siguiente manera

PQConexion:=TPQConnection.Create(nil);
Transaccion:=TSQLTransaction.Create(nil);
SQLQuery:=TSQLQuery.Create(nil);
Datasource:=TDataSource.Create(nil);
Tambien funciona de esta manera

PQConexion:=TPQConnection.Create(Application);
Transaccion:=TSQLTransaction.Create(Application);
SQLQuery:=TSQLQuery.Create(Application);
Datasource:=TDataSource.Create(Application);

rretamar
29-11-2012, 14:57:02
Se agradece el aporte.