Ver Mensaje Individual
  #1  
Antiguo 27-09-2004
cesar_picazo cesar_picazo is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Reputación: 21
cesar_picazo Va por buen camino
Error al conectar Tabla con Intebase

Buenos dias estoy utilizando Delphi 6 con Firebird 1.5 y para acceso de datos estoy utilizando los componentes de DBExpress.

Estoy terminando una aplicación en donde uso los siguientes objetos pero por una determinada razon que desconosco este codigo no me funciona cada que trato de Abrir tablas, este error es aleatorio y casi siempre se presenta cuando trato de abrir una tablas despues de haber abierto cerrado 3 o 4 veces formularios. El mensaje de error que presenta es al Activar de SQLClientDataset (Project admi.exe raised exception class EdataBaseError with message 'SQLConection Proporty required for this operation' process stoped) alguien sabe el motivo de este mensaje.

DIBcon : array [0..60]of TSQLConnection;
DDataSource: array[0..99] of TDataSource;
DSQLClientDataSet: array[0..60] of TSQLclientDataSet;

Los cuales inicializo al inciar la aplicacion

for vxii:= 1 to 60 do
Begin
principal.DIBcon[vxii] :=TSQLConnection.Create(self);
principal.DSQLClientDataSet[vxii]:= TSQLclientDataSet.Create(self);
principal.DSQLClientDataSet[vxii].Name :='dsqlcldata'+inttostr(vxii);
principal.DDatasource[vxii]:= TDataSource.Create(self);
principal.Dibcon[vxii].Connected :=false;
principal.Dibcon[vxii].close;
End;

Estos los uso en la aplicación para conectar a cualquier Db de Firebird
principal.DSQLClientDataSet[letraanumero].DBConnection:=principal.Dibcon[letraanumerotra];

Se valida que la conexion se realice a la ruta especifica y si no esta conectada lo conecta:
IF (principal.Dibcon[letraanumerotra].Connected =false) or (UpperCase(principal.DSQLClientDataSet[letraanumero].DBConnection.Params.Values['Database'])<>UpperCase(srutadb)) then
FConecta1DB(srutadb,letraanumerotra);

Se cierra la tabla que se va a Abrir y se eliminan si existen campos asociados a la conexion:
Principal.DSQLclientDataSet[vxt].Active := false;
Principal.DSQLclientDataSet[vxt].close;
for cuenta:= 0 to Principal.DSQLclientDataSet[vxt].FieldCount-1 do
Begin
Principal.DSQLclientDataSet[vxt].Fields[0].Destroy;
end;
Se arma el query
principal.ddatasource[vxt].Enabled := fALSE;
Principal.DSQLClientDataSet[vxt].CommandText := 'Select * from ' + tablaponerUso;
principal.ddatasource[vxt].dataset:=Principal.DSQLClientDataSet[vxt];

Nuevamente se le asigna a la tabla la conexion
Principal.DSQLclientDataSet[vxt].dbConnection :=principal.Dibcon[vxt2];

principal.DSQLClientDataSet[VXT].FieldDefs.Clear;

Se abre la tabla
principal.DSQLClientDataSet[vxt].Active := true;
principal.DSQLClientDataSet[vxt].open;
principal.ddatasource[vxt].DataSet :=principal.DSQLClientDataSet[vxt];
principal.ddatasource[vxt].Enabled := true;

Al cerrar el Formulario se cierra la conexion
Este proceso que realiza para abrir una tabla se hace cada que se abre una serie de 3 formularios.

For conttemp:= 1 to 45 do
Begin
Principal.DSQLClientDataSet[conttemp].Active :=false;
Principal.DSQLClientDataSet[conttemp].close;
end;
Principal.DSQLClientDataSet[2].IndexFieldNames :='';
Principal.DSQLClientDataSet[2].MasterFields:='' ;
Principal.DSQLClientDataSet[2]:=Principal.DSQLClientDataSet[49];
ftransaccion(1,3);// Se termina la Transaccion que este iniciada
fclosecon(1); //Se cierra la conexion
principal.Dibcon[1]:=principal.Dibcon[49]; //la conexion se iguala a una conexion que nunca se toca.


Si alguien conoce o tiene algun procedimiento manual de abrir y cerrar tablas
con DBExpress se lo agradeceria ya que no se si me falta algo para poder abrir n numero de tablas, ya que parece que mi prodemiento falla.
Responder Con Cita