Jump to content


Photo

Problema con conexión MySQL


  • Please log in to reply
4 replies to this topic

#1 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 posts

Posted 16 July 2012 - 10:06 AM

Buenas, tengo un inconveniente con un DBLookUpComboBox.
Resulta que en mi aplicación por ahora tengo 2 Forms, uno principal y otro oculto que se muestra cuando haces click en un botón.
El formulario 2, prácticamente es un formulario de alta de un registro a la db. Este contiene algunos DBLookUPComboBox que reutilizan el DataSource de el formulario principal, pero hay uno en el que necesito hacer una query nueva.
Creo la transacción, la query y el datasource, referenciandolos a la conexión del forumulario principal.
A la hora de compilar y ejecutar la aplicación me tira el siguiente excepción:

Database not assigned


Acaso no es posible utilizar una conexión de otro form ?.

Saludos y gracias.

  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 16 July 2012 - 11:26 AM

Pues claro, el error indica que no le has asignado una BD al query:



delphi
  1. Query1.DataBase := 'PRUEBAS';



Por ahí van los tiros ;)

Saludos.
  • 0

#3 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 posts

Posted 16 July 2012 - 12:26 PM

Clarom pero yo la conexion "PRUEBAS" la tengo en el form "Main" llamada "Conexion" y la necesito en el form "Alta".
Intente con un:



delphi
  1. SubmitQ.Database := Main.Conexion;



Pero me da el siguiente error:

alta_video_unit.pas(86,32) Error: Identifier not found "Main"


Probé poniendo la unit de Main en Alta, mediante uses, pero me dice esto:

alta_video_unit.pas(9,78) Fatal: Circular unit reference between alta_video_unit and vid_unit_1


Y es porque el form de Main también llama al de Altas. Hay alguna forma de evitar eso ? algo así como el include_once() o require_once() de PHP, que evita esa circularidad ?.

Saludos y gracias.
  • 0

#4 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 posts
  • LocationEspaña

Posted 16 July 2012 - 12:57 PM

Buenas,

A ver, te comento como funciona el tema de los uses. En un formulario/clase tenemos 2 "apartados" por defecto, la interface y la implementation (pueden haber dos más, la initialization y la finalitation, pero eso ya es otro tema jejejeje).

En ambos casos podemos poner la cláusula uses para hacer uso de una unidad. La diferencia radica en que la cláusula uses de la interface es, por decirlo de alguna manera, excluyente. Es decir, si en el form A haces uses en la interface del form B, en el form B no puedes hacer uses del form A en la interface porque entonces aparece el error de "Circular unit reference".

Para evitar este error, debemos de hacer el uses del segundo formulario en la implementation.

ejemplo incorrecto



delphi
  1. unit FormA;
  2.  
  3. interface
  4.  
  5. uses FormB;
  6.  
  7. implementation
  8. .....
  9.  
  10. ###############################
  11. unit FormB;
  12.  
  13. interface
  14.  
  15. uses FormA;  // referencia circular
  16.  
  17. implementation
  18. .....
  19.  



Ejemplo correcto


delphi
  1. unit FormA;
  2.  
  3. interface
  4.  
  5. uses FormB;
  6.  
  7. implementation
  8. .....
  9.  
  10. ###############################
  11. unit FormB;
  12.  
  13. interface
  14. ................
  15.  
  16. implementation
  17. uses FormA;  // referencia NO circular
  18.  



No obstante, y en la medida de lo posible, es bueno evitar referencias circulares (aunque se eviten declarando uno en la interface y otro en la implementation - o los dos en la implementatio -) y hacer uso de paso de parámetros o bien definir unidades intermedias donde poner las funciones/objetos comunes a los dos formularios.

  • 0

#5 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 posts

Posted 16 July 2012 - 01:15 PM

Muchas gracias cadetill. Me ha servido tu baldazo de teoría !.
He logrado lo que buscaba.

Saludos !.
  • 0




IP.Board spam blocked by CleanTalk.