Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2004
cesar_picazo cesar_picazo is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 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
  #2  
Antiguo 28-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola

¿ Existe alguna razón para tener 60 SQLConnections ?. A mi no se me ocurre ninguna.

Lo habitual es tener una única conexión (en un DataModule), y que la utilizen todas las consultas y actualizaciones.

NOTA: Además no sé porqué vas abriendo y cerrando las conexiones. De nuevo, lo habitual es abrir la conexión al arrancar el programa, y olvidarte de ella, es decir no cerrarla hasta no finalizar el programa.

Otras observaciones : no hay ninguna necesidad de ir liberando los campos manualmente, puedes ejecutar el método Clear sobre la colección Fields. En mi opinión especificas demasiadas propiedades en tiempo de ejecución (Connection, Dataset, Datasource, ...) todo esto lo puedes hacer en tiempo de diseño.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:08:10.


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
Copyright 1996-2007 Club Delphi