Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problemas visualizacion info en red usando ADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=77086)

mizzard 20-12-2011 01:07:54

Problemas visualizacion info en red usando ADOQuery
 
Hola, os comento mi problema (un tanto curioso).

Resulta que dispongo de una aplicación que la ubico en una carpeta de red en la que diferentes usuarios tendrán acceso. Simplificando el asunto, digamos que mi aplicación accede a la base de datos de un segundo programa (comercial). El por qué de esto.... simplemente porque el programa comercial se queda cojo en ciertos aspectos y estoy ampliando funcionalidades :P


Como caso curioso he observado que cuando hago una consulta a una tabla del programa comercial y muestro la informacion en mi programa, cuando intento añadir informacion adicional desde el programa comercial en esa tabla (con mi programa visualizando esa tabla) el programa se queda colgado hasta que no hago otro query... no se si me explico, pongamos por caso este codigo:

Código:

        frmPrincipal->qryMostrarEntrada->Close();
        frmPrincipal->qryMostrarEntrada->SQL->Clear();
        strSQL = "SELECT *";
        strSQL = strSQL + " WHERE [CodFabricacion] = " + leerOF;
        frmPrincipal->qryMostrarEntrada->SQL->Add(strSQL);
        frmPrincipal->qryMostrarEntrada->Active = true;

En el cual muestro en mi programa la tabla de la base de datos del programa comercial.

Pongamos por caso que ahora deseo añadir una nueva informacion (seria dentro del * que aparece en el select) manteniendo mi programa abierto y es cuando el programa comercial se queda enganchado.

He observado que cuando pulso en otro boton de mi programa que contiene esta linea de codigo:

Código:

        frmPrincipal->qryMostrarClientes->Close();
        frmPrincipal->qryMostrarClientes->SQL->Clear();
        strSQL = "SELECT *";
        strSQL = strSQL + " WHERE [Codigo] LIKE '43000%' ORDER BY [Codigo]";
        frmPrincipal->qryMostrarClientes->SQL->Add(strSQL);
        frmPrincipal->qryMostrarClientes->Active = true;

que no tiene nada que ver con la informacion mostrada es cuando se desengancha.

He probado a realizar diferentes supuestos y efectivamente cuando hago una nueva consulta (da igual cual sea), es cuando el programa comercial funciona perfectamente aun estando abierto el mio.

Es por lo cual me surge la siguiente duda....

Debido a que el problema esta solucionado colocando el segundo fragmento de codigo que he puesto, pero que a lo que solucionar un problema entendiendo el por que, no me convence....

Sabeis el por qué se debe esto y como podria solucionarlo de una manera "mas profesional".


Muchas gracias a todos, en especial al interes mostrado en ecfisa y _cero_ que tanto me han ayudado en cuestiones previas y que hacen que este foro sea un lugar con una fuente de conocimiento muy amplia ;)

ecfisa 20-12-2011 02:49:49

Hola mizzard.

Mirando esta parte de tu código:
Código:


 strSQL = "SELECT *";
 strSQL = strSQL + " WHERE [CodFabricacion] = " + leerOf;

La cadena que queda formada en strSQL es "SELECT * WHERE[CodFabricacion] = "+ (valor de la variable leerOF). En ambos códigos te estaría faltando la cláusula FROM.

Probá hacerlo de este modo:
Código:

  ...
  qryMostrarEntrada->Close();
  qryMostrarEntrada->SQL->Clear();
  qryMostrarEntrada->SQL->Add("SELECT * FROM TU_TABLA WHERE CodFabricacion = :VALOR");
  qryMostrarEntrada->Parameters->ParamByName("VALOR")->Value = leerOF;
  qryMostrarEntrada->Open();

Donde "TU_TABLA" sería el nombre de la tabla de donde extraes los datos.

Y para el segundo caso:
Código:

...
 qryMostrarEntrada->Close();
 qryMostrarEntrada->SQL->Clear();
 qryMostrarEntrada->SQL->Add("SELECT * FROM TU_TABLA WHERE CodFabricacion LIKE :VALOR");
 qryMostrarEntrada->Parameters->ParamByName("VALOR")->Value = leerOF + "%";
 qryMostrarEntrada->Open();

Un saludo.

mizzard 20-12-2011 11:52:19

Hola, gracias por la respuesta. Tienes razón al copiar y pegar se me olvido poner la parte donde hacia referencia a la clausula from (quite codigo y se me olvido pegar eso).

De la forma que me comentas no soluciona nada, el problema no lo tengo al visualizar la informacion, puesto q se visualiza. El problema esta en que necesito que se visualice la informacion y que deje las tablas libres para que el otro programa pueda hacer operaciones sin que se quede enganchado.

La segunda consulta que hago es pq he comprobado que si lo pongo no se queda enganchado en donde digo, pero no le veo sentido pq esa consulta no tiene nada que ver con la informacion mostrada.

Yo creo que se trata que me falta por poner alguna linea de codigo que libere el acceso a esa tabla.

PD: he probado con cerrar el query y limpiar el string SQL:
Código:

        frmPrincipal->qryDetalleEntrada->Close();
        frmPrincipal->qryDetalleEntrada->SQL->Clear();

Y tampoco funciona


La franja horaria es GMT +2. Ahora son las 22:02:27.

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