PDA

Ver la Versión Completa : Database not assigned


IVAND
26-04-2012, 17:47:41
Hola a todos
Delphi es un muy buen lenguaje de programacion llevo algunos anios con el , pero a veces deja mucho que decir , por ejemplo aplicativos que estan corriendo sin ningun problema presentan de la noche a la manana problemas tan tontos como el que indico en mi titulo , utilizo delphi6 , firebird 1.5 (dialecto 3) , IBx

El error se presenta en la siuiente forma

Tengo un datamodulo que contiene un Ibdataset , que lo llamo de la ventana A , la primer vez ejecuta sin problemas , la segunda vez me sale el error database not assignet y ni siquera se ha llamado a ningun evento , buscando la posible causa casi adivinando , logre desactivar el evento onshow la llamada al componte A y el sistema ejecuta sin problemas , el error lo puedo quitar colocando ese Ibdataset en la forma , pero se pueden ustedes imaginar el trabajo que llevara el tener que colocar y cambiar la programacion en todas las formas

he asignado manualmente el Database.name y nada el error persiste en la segunda ocacion que se ejecuta


Esperando que ustedes puedan ayudarme y que la solucion no sea un parche quedo de ustedes como siempre muy agradecido

Nota: en el foro set trata de algo como esto y meciona un amigo que usemos el evento onactivate del form para abrir el objeto pero el error persiste

ecfisa
26-04-2012, 17:57:44
Hola INVAND.

Sin saber como y cuando se le asigna el TIBDatabase al TIBDatset, es muy difícil de diagnosticar que puede estar sucediendo. Lo que es indudable que cuando ejecutas el método Open, la propiedad Database del TIBDataSet no tiene un valor asignado de áhí el error: Database not asigned. Habría que ver el código.

Saludos.

IVAND
26-04-2012, 18:31:59
Gracias por responder

Bueno te comento que el componente de base de datos se le asigna la ruta de la base de forma constante es decir la ruta ya esta digitada
y la asignacion al compoente se asigna de manera estatica es decir ya esta puesta en el componente

no se altera nada

solo lo abro la primera vez y la segunda ya sale el error he tratado se asignarle manualmente , pero el errro sale antes de que se ejecute cualquier cosa , seria bueno saber o ver de alguna forma que esta asiendo el delphi , si pongo las lineas de quiebre nunca llegan a ejecutarse

Es mas , les puedo indicar que el aplicativo se muere despues del mensaje , ademas si quito el componente que lo tengo en un datamodule y lo coloco en la forma que da el problema , todo se soluciona , pero ese no es lo que se debe de hacer

ecfisa
26-04-2012, 18:58:12
Hola IVAND.

Es muy extraño... permitime consultarte unas dudas, ¿ El TDataModule está en autocreate o se crea y destruye luego de usarlo ? ¿ El IBDataSet se abre en el form o en el DataModule ? ¿ En que evento se abre y en cuál se cierra ?

Saludos.

IVAND
26-04-2012, 19:14:31
Si es muy extranio en verdad

El TDataModule está en autocreate ? Si se crea automaticamente

¿ El IBDataSet se abre en el form o en el DataModule ? Se abre en el form , pero el Ibdataset esta en el datamodule

¿ En que evento se abre y en cuál se cierra ? en el evento onshow del formulario y se cierra en el closequery y si no lo cierras es el mismo problema

Lo mas extrano es que si quito el Ibdataset del datamodule y lo coloco en el form se arregla el problema

Hay bendito delphi que no permite ver con mas claridad este tipo de cosas

ecfisa
26-04-2012, 19:53:04
Lo mas extrano es que si quito el Ibdataset del datamodule y lo coloco en el form se arregla el problema

Hola IVAND.

Hacé la prueba de cambiarle el nombre al TIBDataSet, por que realmente lo único que se me ocurre es que estés abriendo otro IBDataSet con el mismo nombre que no tenga asignada la base de datos.

Es decir, siendo:

DataModule2.IBDataSet1.Database:= DataModule2.IBDatabase1;


Y en la apertura del DataSet, sea donde se haga, utilices:

DataModule2.IBDataSet1.Open;

No veo el modo de que recibas ese error...

Saludos.

IVAND
26-04-2012, 20:10:05
Mil gracias por tu interes


Ya he echo eso , he quitado el componente y lo he vuelto a crear , lo unico que ha funcionado es colocar el Ibdataset dentro de la forma

Estoy pensando en dejar este dichoso delphi ,,,,, gracias nuevamente

ecfisa
26-04-2012, 20:13:17
Mil gracias por tu interes


Ya he echo eso , he quitado el componente y lo he vuelto a crear , lo unico que ha funcionado es colocar el Ibdataset dentro de la forma

Estoy pensando en dejar este dichoso delphi ,,,,, gracias nuevamente

La verdad, nunca me pasó algo así. Me he quedado sin más hilo en el carretel con que ayudarte :(

Espero que a algún otro compañero se le pueda ocurrir algo...

Saludos :)

IVAND
26-04-2012, 20:38:30
He buscado bastante en google y hay varios amigos que preguntan lo mismo en varios foros


De todos modos muchas gracias por tu tiempo , es bueno saber que podemos contar con gente como ustedes

Casimiro Notevi
26-04-2012, 20:45:19
Está claro que se está pasando algo, y simple, lástima que no podamos ver el código. ¿Es posible?

roman
26-04-2012, 21:19:26
pero a veces deja mucho que decir

Ya veremos...



El error se presenta en la siuiente forma

la primer vez ejecuta sin problemas , la segunda vez me sale el error database not assignet


¿La segunda vez que ejecutas el programa, o la segunda vez que abres el formulario durante la misma ejecución?

Mencionas que el DataModule está en el AutoCreate. ¿El formulario también? ¿Antes o después? La propiedad Active del IbDataSet, ¿qué valor tiene durante el diseño?


Desde luego no podemos garantizar que averigüemos la causa de tu problema, pero, ¿de verdad piensas que esto es un problema de Delphi? Un problema de este tipo, hace muchos años que habría acabado ya con el prestigio de Delphi.

// Saludos

ecfisa
26-04-2012, 22:03:07
Hola.

Me olvidé de comentar que utilizando dos forms y un DataModule, probé todas las combinaciones que se me ocurrieron con los Forms y DataModule en autocreación y con el IBDataSet abierto en diseño.

También creando todo en ejecución con el IBDataSet cerrado, abriéndolo en el evento OnShow del tercer Form inclusive dejándolo abierto desde el evento OnCreate del DataModule... creo que no dejé nada en el tintero pero no pude lograr reproducir el error. Siempre estuvo asignada la propiedad Database del TIBDataSet.

El único modo que logré que me mostrase la excepción ya sea al IBDataSet del DataModule o agregando otro IBDataSet del mismo nombre al Form y abrir este, fué no asignando valor a la propiedad Database en alguno de ellos. Es decir que probé todo lo que normalmente hago y lo que no. :)

Estoy convencido a ojos cerrados que no es un problema de Delphi. En aplicaciones SDI, o en MDI donde además de los DataModule de conexión, utilizo muchos TDataModule con muchos TIBDataSet en cada uno; jamás pero jamás me sucedió algo así. (aunque prácticamente casi ni utilizo el autocreate).

Hay algo que se nos escapa, por no disponer del código, que está 'vaciando' el valor de la propiedad Database del TIBDataSet (o bién se está abriendo en otra parte donde aún no le fue asignado el IBDatabase).

Saludos.

Casimiro Notevi
26-04-2012, 22:59:49
Estoy convencido a ojos cerrados que no es un problema de Delphi.
Eso es seguro al 99,999999999999999999999999999999% :)

Algunas veces nos encontramos con errores/problemas que nos parece imposible que sea un error nuestro, pero en el 99,999999999999999999999999999999% de los casos sí que es error nuestro :D

Delphius
27-04-2012, 00:59:32
Esto se resuelve muy fácil chicos, se le da un más que merecido tiron de orejas a IVAND.
A ver IVAND queridito, si estás tan convencido que es un problema, y "¡huuu.. de gravísimo que me hace imposible la vida!" y que Delphi es la peor porquería ¿Porqué no pones a disposición de la comunidad tu código? No... mejor aún, ve a los foros de Embarcadero y reporta el fallo, y dales tu código a ellos para que reproduzcan el error.

En vez de ser esquivo y de continuar diciendo las pocas palabras repetidas, entonces poné más de tu parte en explicarte. No tenemos una bola de cristal, resulta ser que nuestro proveedor nos falló; y la empresa MIRACLES INC. no hace envíos fuera de mundo mágico donde viven los Padrinos Mágicos. Ya le pedí a Timmy que por favor le diga a sus padrinos que desee que tengamos superpoderes adivinatorios, pero me dijo que es mejor pedir que se te de el poder del habla, el razonamiento y de la escritura para que te expliques.

Saludos,

Delphius
27-04-2012, 01:00:43
Eso es seguro al 99,999999999999999999999999999999% :)

Algunas veces nos encontramos con errores/problemas que nos parece imposible que sea un error nuestro, pero en el 99,999999999999999999999999999999% de los casos sí que es error nuestro :D
Como cuando uno confunde filas con columnas por ejemplo :D :rolleyes: :p

Saludos,

gatosoft
27-04-2012, 01:15:56
Como cuando uno confunde filas con columnas por ejemplo :D :rolleyes: :p

Saludos,

;) Pero con la técnica del Post-it no nos vuelve a pasar, ¿verdad Delphius? :D

Delphius
27-04-2012, 01:20:57
;) Pero con la técnica del Post-it no nos vuelve a pasar, ¿verdad Delphius? :D
Así es. :D Y para evitar que el post-it se despegue (porque son una porquería que apenas tiene algo de pegamento) lo aseguré con cinta transparente de la ancha. :D
Los libros de documentación indican que la tasa de defectos conceptuales a causa de fila/columna pasó de 100% a 0%, espero que siga así. :p

Saludos,

IVAND
28-04-2012, 01:14:31
Nuevamente con mucha educacion y altura como se acostumbra en el foro les digo gracias

A usted sr DELPHIUS queridito, si me atrevo a pedir ayuda es porque mis pocos conocimientos de delphi o muchos no es usted quien para juzgarlos , se me quedaron cortos ya con este problema, al cual el amigo ecfisa muy amable y educadamente respondio a mis inquietudes ,

he intentado todo tal como mis repetidas palabras pueden expresar , uso un datamodule donde tengo un Ibdataset (Hproforma) , el cual lo abro desde el evento onshow de la forma Fproforma , la primera vez

With dm_inv_fac.hproforma do
Begin
close;
Open ;
End ;


Abro mas Ibdataset del mismo datamodule , la segunda vez q abro la forma antes de cualquier cosa sale el error Database not assigned

El error lo corrijo colocando este Ibdataset en la forma Fproforma


With hproforma do
Begin
close;
Open ;
End ;


Y el problema se soluciona


Nota : mis expresiones fueron

Hay bendito delphi que no permite ver con mas claridad este tipo de cosas

¿Porqué no pones a disposición de la comunidad tu código? No... mejor aún, ve a los foros de Embarcadero y reporta el fallo, y dales tu código a ellos para que reproduzcan el error.

Lo siento Delphius si mis pocos conocimientos te ofenden o ofenden al resto de companeros , pero si uno esta en estos foros es justamente porque necesita ayuda no criticas , todo lo que hago esta escrito en palabras repetidas

que pena que personas como tu crean saberlo o expresar los problemas de la mejor forma , que pena en verdad

de todos modos yo se que la mayoria son un poco mas cordiales , gracias a todos

Roman :
¿La segunda vez que ejecutas el programa, o la segunda vez que abres el formulario durante la misma ejecución? la segunda vez que abres el formulario durante la misma ejecucion

Mencionas que el DataModule está en el AutoCreate. SI

¿El formulario también? ¿Antes o después? el formulario lo creo asi , tal como creo todos mis formularios
ScrollBox.WndLists.AddEmbeddedForm(44, nil, TFGp_productos, False, 0, bttNoSelect);


Si reconozco que si fuera un problema de delphi como tal abria acabado con el prestigio del mismo si es cierto , pero cosas como estas donde el codigo es nulo o casi nulo deja mucho que decir , el google se habla mucho de esto y en varios idiomas y la solucion es muy dificil porq las acciones o eventos entre los cuales se puede producir tambien es dificil de reproducir , en mi caso solamente me ha dado en dos formularios de entre 280 que tiene mi aplicativo



ya seguire buscando

muchas gracias por su tiempo


La propiedad Active del IbDataSet, ¿qué valor tiene durante el diseño? False

roman
28-04-2012, 03:26:52
Pero, y esto

ScrollBox.WndLists.AddEmbeddedForm(44, nil, TFGp_productos, False, 0, bttNoSelect);

¿qué es? :confused:

Y, creo que no me contestaste si el IBDataSet está abierto durante el diseño.

Jamás había visto algo así.

// Saludos

Delphius
28-04-2012, 05:12:39
A usted sr DELPHIUS queridito, si me atrevo a pedir ayuda es porque mis pocos conocimientos de delphi o muchos no es usted quien para juzgarlos , se me quedaron cortos ya con este problema, al cual el amigo ecfisa muy amable y educadamente respondio a mis inquietudes ,

he intentado todo tal como mis repetidas palabras pueden expresar (...)


(...)Lo siento Delphius si mis pocos conocimientos te ofenden o ofenden al resto de companeros , pero si uno esta en estos foros es justamente porque necesita ayuda no criticas , todo lo que hago esta escrito en palabras repetidas

que pena que personas como tu crean saberlo o expresar los problemas de la mejor forma , que pena en verdad

de todos modos yo se que la mayoria son un poco mas cordiales , gracias a todos (...)

(...)
Si reconozco que si fuera un problema de delphi como tal abria acabado con el prestigio del mismo si es cierto , pero cosas como estas donde el codigo es nulo o casi nulo deja mucho que decir , el google se habla mucho de esto y en varios idiomas y la solucion es muy dificil porq las acciones o eventos entre los cuales se puede producir tambien es dificil de reproducir , en mi caso solamente me ha dado en dos formularios de entre 280 que tiene mi aplicativo

Yo no critiqué tus conocimientos sino la poca voluntad de tu parte en aportar mucha más información de entrada sobre el problema. Muchos han tirado algunas ideas, pero tu seguías en unas pocas palabras repetidas que poco y nada aportan a encontrar la solución al problema.

Tus escritos traen más preguntas que respuestas. Y en vista a que ibas a seguir, y lo sigues, siendo, esquivo y corto en explicarte; es necesario darte un buen tirón y ahora uno más fuerte un tironazo.

Si en verdad quieres que se llegue a buen puerto entonces debes ser mucho más explícito. Detallar el problema, indicándonos el código que tienes, explicando como tienes configurado los componentes, si lo haces todo en diseño o en tiempo de ejecución... si cambias en algún momento alguna configuración, ¿Liberas algún componente en el medio? ¿Que otras acciones realizas, o pueden producirse en el medio entre la 1ra llamada y la 2da?
¿Ya probaste añadiendo breakpoints y tratando de rastrear el problema? ¿Que otras opciones has estado evaluando? Si dices que en otros sitios se ha hablado del problema ¿porqué no te has tomado la molestia de indicarnos dichas fuentes con un enlace directo?

Como vez.. siguen apareciendo más y más preguntas... y puede que la solución a tu problema sea tan puntual y específico a tu caso que hay que ponerle mucha lupa, lupa que tu no estás cediendo para nada. HE DICHO.

Saludos,

Casimiro Notevi
28-04-2012, 12:49:24
El problema, amigo IVAND (realmente te considero un amigo), es que no das muchas pistas, y así sólo podemos intentar adivinar :)

IVAND
29-04-2012, 02:53:19
Pues si ,en honor a la verdad ni yo mismo se lo que pasa , pero ya ha pasado un par de veces

De todas formas les agradesco enormemente en tratar de ayudar , ya solucione el problema cambiando el Ibdataset a la forma (solamente copie y pegue ) y se acabo el problema aunque seria si muy interesante saber que paso , no se como ver que hace delphi al abrir un formulario es decir la accion se produce antes de llegar al evento activate o onshow , asi que no se que mas decirles y soy muy conciente que asi es muy dificil ayudarme

Un fuerte abrazo a todos ustedes amigos


nota : amigo Roman ScrollBox.WndLists.AddEmbeddedForm(44, nil, TFGp_productos, False, 0, bttNoSelect); esto es la forma como los componentes Jfactivesoft embeben las ventanas en un objeto llamado Scrollbox

Saque un respaldo de la unidad si alquien se atreve a echarle una mirada estaria muy encantado de enviarles esas unidades para que revisen el codigo

Voy a hacer algo mejor aun , voy a sacar esas unidades en un nuevo proyecto y pondre el codigo a disposicion , para como siempre entre todos poder llegar a alguna solucion , son un muy buen grupo de gente

Delphius
29-04-2012, 18:47:55
IVAND, yo no veo otro modo de ayudarte que no sea que compartas al menos la parte del código que entra en conflicto.
Y si estás utilizando componentes de terceros, es una de las primeras cosas que deberías haber recalcado.
Vaya a saber alguno por que cosa será el problema. De lo único que podemos inferir hasta el momento es que algo hace que se pierda la referencia del database; algo cambia la propiedad, algo puede estar liberando algún recurso, algo está cambiando...

Para descubrir ese algo debes estar dispuesto a renunciar la idea de no compartir código. ¿Porqué no haces un nuevo proyecto en limpio e intentas reproducir el error aprovechando los mismos controles que usas? Si es lo que te preocupa sobre lo que hagamos con TU código...

Asi que, piénsalo mejor si realmente quieres de la ayuda. Por cierto, me llegó la bola de cristal pero resulta ser que viene para puerto USB y yo solamente dispongo de serial, asi que ¡ni adivinar puedo! :D

Saludos,

IVAND
29-04-2012, 20:08:37
Si yo creo que sera lo mejor , hare un nuevo proyecto justo con esa unidad que me da problemas y la idea de comparti codigo me parece excelente pues no creo que tenga nada que ocultar , ahora a empezar un nuevo proyecto y a mirar si puedo reproducir el problema

Gracias a todos por estar pendiente de mi problema

roman
30-04-2012, 17:19:11
nota : amigo Roman ScrollBox.WndLists.AddEmbeddedForm(44, nil, TFGp_productos, False, 0, bttNoSelect); esto es la forma como los componentes Jfactivesoft embeben las ventanas en un objeto llamado Scrollbox

A ver, es que tú escribes esto como si tal, como si cualquier programador de dephi hiciera esto desde que hace sus pininos y, la verdad, yo jamás había visto algo así. Obviamente hay toda una infraestructura que se ocupa del manejo de las ventanas y, ¿cómo saber si no viene de ahí el problema?

Tendrás que tratar de aislar el problema, y, sobre todo, tratar de reproducirlo sin el uso de esas librerías.

// Saludos

IVAND
01-05-2012, 00:23:33
Si lo entiendo , lo que voy a hacer es aislar el problema como tu comentas , puede ser algun problema ya lo analizare y les hare saber

gracias