Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con forms y zeos (https://www.clubdelphi.com/foros/showthread.php?t=47590)

enecumene 01-09-2007 07:04:00

Problema con forms y zeos
 
Saludos Compañeros, de nuevo recurro a ustedes para que me ayuden en un nuevo problema que se me presenta sucede lo siguiente, tengo un formulario donde contiene los siguientes componentes:

1 - speedbutton
2 - ZQuery

y en el otro form contiene los edits corresponidientes al ZQuery, en el speedbutton tengo el siguiente codigo:

Código Delphi [-]
procedure TFTramiteMod.SpeedButton21Click(Sender: TObject);
begin
if (DBEdit1.Text = '') OR (DBEdit1.Text = '0') then
 begin
  MessageDlg('¡No se encuentra el número de registro!',mtError,[mbOK],0);
 end
 else
 begin
    FModPed:=TFModPed.Create(self);
    ZModPed.SQL.Add(' where no="'+DBEdit1.Text+'"');
    ZModPed.open;
    FModPed.ZDpto.Open;
    FModPed.Show;
 end;
end;

clickeo el boton el codigo funciona perfecto, aqui viene el problema, cierro el form que llame con el boton, no? y si vuel vo a presionar el mismo boton que hace un momento me funciono me tira esos errores:

primero me sale:

Cita:

source file not found: ZDbcMySqlUtils.pas
si presiono a ignorar me sale ese otro error:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project Sigesped.exe raised exception class EZSQLException with message 'SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where no="1"' at line 3'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
no entiendo por que me sucede si al primer intento me funciona pero luego si lo presiono de nuevo me tira ese error:confused::confused::confused:.

saludos...

dec 01-09-2007 07:15:14

Hola,

La consulta SQL debería quedar tal que así:

Código SQL [-]
where no = 'valor'

Y creo tal vez también funcionaría sin comillas simples, pero, el problema está en que usas comillas dobles. Vamos, eso creo... :)

Quizás con la función "Format" (SysUtils.pas) pudieras arreglarlo... para empezar...

Código Delphi [-]
ZModPed.SQL.Add(Format(' where no = ''%s''',[DBEdit1.Text]));

enecumene 01-09-2007 07:27:54

Gracias dec por tu pronta respuesta pero de las dos formas que me sugeriste me da el mismo error al presionar el boton de nuevo:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project Sigesped.exe raised exception class EZSQLException with message 'SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where no = 258' at line 3'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

dec 01-09-2007 07:34:13

Hola,

Pues es que el mismo mensaje de error está declarando dónde está el problema: en el "where" de la consulta SQL. Y es un problema de "sintáxis". Antes era por usar comillas dobles (creo estar seguro, pero, vamos, pueden corregirme) y ahora es por no usar comillas simples... eso, o estoy completamente equivocado. :)

En definitiva tienes que conformar la consulta SQL de forma que quede así:

Código SQL [-]
... where no = '123'

Y no:

Código SQL [-]
... where no = 123

Ni tampoco:

Código SQL [-]
... where no = "123"

enecumene 01-09-2007 07:38:52

eso es bastante raro dec, si es problema de xintaxis de sql no me deberia funcionar en el primer intento para luego no me funcione. digo eso creo yo, segun mi impresion que de alguna manera luego de presionar el boton la sintaxis where esté repetida dos veces, esa es la impresion que me da.

saludos...

dec 01-09-2007 08:12:29

Hola,

... Pues tal vez tengas que "limpiar" antes el componente...

Código Delphi [-]
ZModPed.SQL.Clear();
{...}

eduarcol 01-09-2007 13:45:37

Cita:

Empezado por enecumene (Mensaje 227583)
la sintaxis where esté repetida dos veces, esa es la impresion que me da.

saludos...

Tienes una muyt buena impresion de lo que sucede

Cita:

Empezado por dec (Mensaje 227584)
Hola,

... Pues tal vez tengas que "limpiar" antes el componente...

Código Delphi [-]
ZModPed.SQL.Clear();
{...}

En realidad con eso funciona pero como tienes precargadas la sentencia sql si le da el clear se va a borrar toda la instruccion. la unica opcion q veo es cargar la setencia completa cada vez que presione el boton, usar parametros o usar banderas

enecumene 01-09-2007 15:25:26

Hey, Muchas Gracias DEC y EDUARCOL por su ayuda, era algo tan simple, el codigo me quedo asi:

Código Delphi [-]
procedure TFTramiteMod.SpeedButton21Click(Sender: TObject);
begin
if (DBEdit1.Text = '') OR (DBEdit1.Text = '0') then
 begin
  MessageDlg('¡No se encuentra el número de registro!',mtError,[mbOK],0);
 end
 else
 begin
    FModPed:=TFModPed.Create(self);
    ZModPed.SQL.Clear;
    ZModPed.SQL.Add('select * from reg_pedidos');
    ZModPed.SQL.Add(Format(' where no = ''%s''',[DBEdit1.Text]));
    ZModPed.open;
    FModPed.ZDpto.Open;
    ShowMessage(ZModPed.SQL.Text);
    FModPed.Show;
 end;
end;

Nuevamente les doy las gracias, Saludos..


La franja horaria es GMT +2. Ahora son las 06:31:58.

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