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 11-11-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Error dbexpress y clientdatasets

Hola a todos,

tengo un problema un tanto curioso y me gustaría saber si a alguno de vosotros os ha ocurrido.

Resulta que tengo dos módulos de datos que se crean al arrancar la aplicación.

Tengo tropecientos formularios que creo en runtime. Hay uno, que si lo abro antes de abrir otro concreto, funciona correctamente. Sin embargo, si lo abro tras abrir el otro, o estando este segundo abierto, me da el error

"SQLConnection property required for this operation"

y el formulario no arranca. Pongo un punto de ruptura en la primera instrucción que se ejecuta en el evento FormCreate, y casca antes de llegar ahí.
No siempre casca, pero sí en el 95% de las veces.
Deduzco que hay internamente algún código que se ejecuta antes del evento FormCreate, pero no sé cómo trazarlo.

Es un tema muy raro, aunque sí debo decir que utilizo querys comunes en los dos formularios ( sin clonarlas ). entiendo que podría dar un error de lógica, pero no de 'inconsistencia'.

Me trae en jaque. Recorro todos los DataSets para ver si algún SQLDataset no tiene alimentado el valor SQLConnection, pero casca antes.

Utilizo firebird, dbexpress, sqlDatasets, datasetproviders y clientdatasets. Delphi 7.

Gracias por vuestra atención.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #2  
Antiguo 11-11-2010
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Comprueba si tienes abierto algún dataset del formulario en tiempo de diseño. Antes del create propiamente dicho se ejecuta la carga de componentes del formulario, y tiene toda la pinta de que uno de los componentes necesita conectarse a la base de datos mientras se está creando.

Un saludo
Responder Con Cita
  #3  
Antiguo 11-11-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Javier.

El mensaje de error que señalas aparece cuando el conjunto de datos SQLDataSet necesita realizar algo a través del objeto TSQLConnection, pero éste no se encuentra asignado en la propiedad SQLConnection.

Es como si el segundo formulario causara que la propiedad SQLConnection de una de las consultas se perdiera.

Por otra parte, no es buena idea dejar en tiempo de diseño la propiedad Active de los conjuntos de datos en True. Sino, abrirlos en tiempo de ejecución conforme los procesos y formularios de la aplicación los necesiten.

En cuanto a poder ver el camino que siguió el programa hasta llegar al punto de ruptura, usa la ventana de pila de llamadas (call stack), pero compilando primero la aplicación con la opción Use Debug DCUs de las opciones del proyecto.

Algunas preguntas:

¿Estás creando y destruyendo módulos de datos en tiempo de ejecución o solamente formularios?

¿Todos los componentes de acceso a datos están en los módulos de datos o algunos están en formularios?

¿Existen componentes TSQLDataSet que no estén en el mismo módulo de datos que el componente TSQLConnection?

¿Usas herencia visual? (plantillas de formularios)

Me voy a dormir, pero por la mañana americana regresaré a echar otro vistazo.
Responder Con Cita
  #4  
Antiguo 11-11-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Gracias a todos por responder.

Intentaré explicar con más detalle la batería de preguntas que me haceis.

Cita:
El mensaje de error que señalas aparece cuando el conjunto de datos SQLDataSet necesita realizar algo a través del objeto TSQLConnection, pero éste no se encuentra asignado en la propiedad SQLConnection.
Está asignado, si no sería imposible que alguna vez funcionara. Además, es una propiedad que asigno en diseño y no vuelvo a tocar.

Cita:
Es como si el segundo formulario causara que la propiedad SQLConnection de una de las consultas se perdiera.
Exacto, ,aunque no entiendo porqué, ya que como digo anteriormente, es una propiedad que no toco en runtime. Si no funcionase, no lo haría nunca.

Cita:
Por otra parte, no es buena idea dejar en tiempo de diseño la propiedad Active de los conjuntos de datos en True. Sino, abrirlos en tiempo de ejecución conforme los procesos y formularios de la aplicación los necesiten.
Salvo error u omisión, están todos cerrados. Los abro explícitamente al crear los formularios o cuando son necesarios. Es fácil al probar saber si me he dejado alguno sin abrir, ya que sino, no funciona.

Cita:
En cuanto a poder ver el camino que siguió el programa hasta llegar al punto de ruptura, usa la ventana de pila de llamadas (call stack), pero compilando primero la aplicación con la opción Use Debug DCUs de las opciones del proyecto.
Intentaré utilizarlo, aunque soy un poco trontxo.

Cita:
¿Estás creando y destruyendo módulos de datos en tiempo de ejecución o solamente formularios?
Sólamente formularios. Los módulos de datos se crean al principio.

Cita:
¿Todos los componentes de acceso a datos están en los módulos de datos o algunos están en formularios?
Mixto, los principales en los módulos de datos, alguno auxiliar ( los menos ) en los formularios. Lo que sí garantizo es que no hay referencias desde un formulario a componentes de datos de otro formulario ( podría no haber sido creado y cascaría ). Concretamente sólo tego dos sqldataset en cada uno de los formularios. Los demás están en los módulos de datos.

Cita:
¿Existen componentes TSQLDataSet que no estén en el mismo módulo de datos que el componente TSQLConnection?
Sí, aunque hasta ahora no he tenido ningún problema. Lo que sí tengo siempre juntos en el mismo módulo o formulario son los SQLDataset, datasetprovider y clientdataset que están relacionados.


Cita:
¿Usas herencia visual? (plantillas de formularios)
Sí, ... aunque he comprobado que estos dos formularios no son heredados.


Seguiré investigando e intentaré retroalimentar los avances o la solución.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 12-11-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Esto es un poltergueist o como demonios se escriba

Si comento la apertura de un SQLDataset + clientDataset concreto, no me da el error. Si lo descomento, me da.

Insisto, es cuando abro primero un módulo y luego el otro. Si lo hago en orden inverso, funciona.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #6  
Antiguo 13-11-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Bueno, haciendo diferentes pruebas he conseguido llegar a que no me casque y funcione como debe hacerlo.

No sé porqué extraña razón, hasta el momento, un servidor de Uds. para hacer dos datasets maestro detalle, los hacía un poco a manija. ( Por favor no os riais ).

Qué quiere decir esto: que tengo un maestro, y en su evento OndataChange, por cada tabla detalle, cierro el dataset, doy valor al parámetro, y vuelvo a abrirlo. Hasta ahora siempre me ha funcionado, hasta éste el caso que nos ocupa.

Finalmente, una vez identificado el dataset que me provocaba el error ( que por cierto sigo sin saber porqué fallaba ) , he cambiado la manera de relacionarlo con el dataset maestro, y he utilizado las propiedades de ClientDataset, MasterSource y MasterFields, abriéndolo al crear el formulario y quitando del evento OnDataChange del maestro la apertura del mismo.

No sé si ha sido un aviso de Delphi del tipo "no seas tan burro" o algo similar, pero como os contaba, hasta ahora NUNCA ME HABIA PASADO.

Espero que le sirva a alguien la respuesta, al menos a los que os habeis interesado para saber que está resuelto el problema

Gracias a todos

PD: Al, la invitación sigue en pie
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 01-12-2010
korinho90 korinho90 is offline
Registrado
NULL
 
Registrado: dic 2010
Posts: 1
Poder: 0
korinho90 Va por buen camino
ayuda

buenas hola ha todos
miren tengo que hacer un programa que elimine registros y el codigo lo tengo asi
cd.query1.close;
cd.query1.SQL.add('delete*from clilentes');
cd.query1.SQL.add('where id_cliente=:id');
cd.query1.Params[0].AsInteger:=strtoint(edit1.Text);
cd.query1.Prepare;
cd.query1.UnPrepare;
cd.query1.ExecSQL;
y pos si me elimina pero cuando quiero eliminar por segunda ves me marca error
quiero que me elimine cuantos quiera
Responder Con Cita
  #8  
Antiguo 01-12-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por korinho90 Ver Mensaje
buenas hola ha todos
miren tengo que hacer un programa que elimine registros y el codigo lo tengo asi
cd.query1.close;
cd.query1.SQL.add('delete*from clilentes');
cd.query1.SQL.add('where id_cliente=:id');
cd.query1.Params[0].AsInteger:=strtoint(edit1.Text);
cd.query1.Prepare;
cd.query1.UnPrepare;
cd.query1.ExecSQL;
y pos si me elimina pero cuando quiero eliminar por segunda ves me marca error
quiero que me elimine cuantos quiera
Hola korinho90 Bienvenido(a) al club, como eres nuevo(a) te ruego que antes de postear y exponer tus dudas leas la Guía de estilo para conocer ciertas reglas del foro.
En tu caso, tu duda que tienes no tiene nada que ver con el tema que se estaba tratando, en otras palabras para cada duda o problema diferentes debes abrir un nuevo tema(Hilo), de ahí que es importante leer la Guía de Estilo., sin olvidar que tambien antes de postear puedes hacer una busqueda con el buscador del Club
Saludos y muchas gracias por tu comprensión
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
dbExpress - ClientDataSets anidados PabloZZZ Conexión con bases de datos 4 13-10-2010 22:58:29
ClientDataSets y Firebird Walterdf Conexión con bases de datos 19 27-08-2010 20:41:31
dbexpress Error: unknown error Code '101' raorre Conexión con bases de datos 3 13-10-2008 07:53:49
ClientDataSets- Personalizar errores rochi Conexión con bases de datos 0 03-05-2008 06:47:52
Clientdatasets anidados con ADO Johnny Q Conexión con bases de datos 4 03-11-2005 02:53:25


La franja horaria es GMT +2. Ahora son las 10:43:59.


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