Jump to content


Photo

Error con Update en firebird


  • Please log in to reply
15 replies to this topic

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 10 July 2009 - 11:01 PM



delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2. begin
  3.   DMmonitorenred.ZqActivas.SQL.Add('update activas set nota = ' + (WNOTAS + chr(10) + RicheditNotas.Text +  formatdatetime('  dd/mm/yyyy hh:mm:ss',now)));
  4.   DMmonitorenred.ZQActivas.ExecSQL;
  5.   close;
  6. end;



y mi consulta original en el ZQactivas es esta:



sql
  1. SELECT FIRST 100 *  FROM  Activas  INNER JOIN evento ON activas.evento= evento.evento LEFT JOIN acmsub ON activas.csid=acmsub.csid
  2. ORDER BY  ALARMNUM DESC




cuando presiono el boton de guardar nota me da este error:
Imagen Enviada

http://img234.imageshack.us/img234/1455/firebirdupdate1.jpg 


  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 11 July 2009 - 10:24 AM

Hola, aunque no conozco los componentes Zeos,  este mismo problema lo he solucionado en Ado o dbExpress de la siguiente manera: hay que definir campos persistentes para el query, y  configurar a True la propiedad ProviderFlags pfInKey de el campo que represente la clave principal de la tabla a actualizar(en tu caso la clave principal de  Activas), y para los campos  de la tabla asociada en tu caso(Eventos) configurar a false las propiedades ProviderFlags pfInUpdate y pfInWhere.


  • 0

#3 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 11 July 2009 - 08:53 PM

Hola, una duda, para que agregas un update luego del Select  :s



delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2. begin
  3.   DMmonitorenred.ZqActivas.SQL.Text('update activas set nota = ' + (WNOTAS + chr(10) + RicheditNotas.Text +  formatdatetime('  dd/mm/yyyy hh:mm:ss',now)));
  4.   DMmonitorenred.ZQActivas.ExecSQL;
  5.   close;
  6. end;



El unico incoveniente, es que con ese codigo se actualizan TODOS los registros  (y)

  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 11 July 2009 - 09:07 PM

Utilizaba este codigo exactamente igual con ado y sql server y no me daba ningun error
y solo actualiza el registro activo.

Tengo un dbgrid y en el evento oneditclickbutton se abre el formulario para escribir un comentario en un campo tipo memo. La persona puede escribir varios comentarios en momentos diferentes.

No se porque me da error con zeos y firebird.

Estoy probando la solucion  de  wilson y todavia nada.

aqui esta el codigo completo del formulario



delphi
  1. var
  2.   FRMnotas: TFRMnotas;
  3.   WNOTAS  : String;
  4.  
  5. implementation
  6.  
  7. uses  frmmonitoreoenred, UDMmonitorenred, UfrmPendiente2;
  8.  
  9. {$R *.dfm}
  10.  
  11. procedure TFRMnotas.SALIR1Click(Sender: TObject);
  12. begin
  13.   close;
  14. end;
  15.  
  16. procedure TFRMnotas.CORTAR1Click(Sender: TObject);
  17. begin
  18.   RicheditNotas.CutToClipboard;
  19. end;
  20.  
  21. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  22. begin
  23.   DMmonitorenred.ZqActivas.SQL.Add('update activas set nota = ' + (WNOTAS + chr(10) + RicheditNotas.Text + formatdatetime('  dd/mm/yyyy hh:mm:ss',now)));
  24.   DMmonitorenred.ZQActivas.ExecSQL;
  25.   close;
  26. end;
  27.  
  28. procedure TFRMnotas.PEGAR1Click(Sender: TObject);
  29. begin
  30.   RicheditNotas.PasteFromClipboard;
  31. end;
  32.  
  33. procedure TFRMnotas.COPIAR1Click(Sender: TObject);
  34. begin
  35.   RicheditNotas.CopyToClipboard;
  36. end;
  37.  
  38. procedure TFRMnotas.BitBtn1Click(Sender: TObject);
  39. begin
  40.   DMmonitorenred.ZQactivas.Edit;
  41.   DMmonitorenred.ZQActivasNOTA.AsString := WNOTAS + chr(10) + RicheditNotas.Text + formatdatetime('  dd/mm/yyyy hh:mm:ss',now);
  42.   DMmonitorenred.ZQActivas.Post;
  43.   close;
  44. end;
  45.  
  46. procedure TFRMnotas.BitBtn2Click(Sender: TObject);
  47. begin
  48.   FRMnotas.Close;
  49. end;
  50.  
  51. procedure TFRMnotas.FormShow(Sender: TObject);
  52. begin
  53.   WNOTAS                          := '';
  54.   RicheditNotas.Text              := '';
  55.   RadioGroupOpcionNotas.ItemIndex := 0;
  56.   WNOTAS                          := DMmonitorenred.ZQActivasNOTA.AsString;
  57. end;
  58.  
  59. procedure TFRMnotas.RadioGroupOpcionNotasClick(Sender: TObject);
  60. begin
  61.   case RadioGroupOpcionNotas.ItemIndex of
  62.   0: begin
  63.         RicheditNotas.ReadOnly  := False;
  64.         RicheditNotas.Text := '';
  65.     end;
  66.   1: begin
  67.         RicheditNotas.ReadOnly  := True;
  68.         if RicheditNotas.Text <> '' then
  69.           WNOTAS := WNOTAS + chr(10) +
  70.                     RicheditNotas.Text +
  71.                     formatdatetime('  dd/mm/yyyy hh:mm:ss',now);
  72.         RicheditNotas.Text := WNOTAS;
  73.     end;
  74.   end;
  75. end;









  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 12 July 2009 - 08:32 AM

Hola, una duda, para que agregas un update luego del Select 

Comparto la duda de Eduarcol, creo que deberí­as usar un Query independiente para realizar la actualización.

De momento  Zeos dice que no pude actualizar por el encuentro natural de dos tablas mediante el INNER JOIN, entonces la cuestión podrí­a quedar mas o menos así­, para actualizar solo el registro actual:



delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2. begin
  3. DMmonitorenred.ZqQueryActualizacion.SQL.Add('update activas set nota = ' + (WNOTAS + chr(10) + RicheditNotas.Text + formatdatetime('  dd/mm/yyyy hh:mm:ss',now))+'WHERE Activas.ClavePrincipal =:Valor');
  4. DMmonitorenred.ZqQueryActualizacion.Parametros[0].Value :=
  5. ZqActivas.ClavePrincipal.Value;// No se exactamente como se pasan parámetros en Zeos
  6. DMmonitorenred.ZqQueryActualizacion.ExecSQL; 
  7. DMmonitorenred.ZqActivas.Refresh;
  8. close;
  9. end;



  • 0

#6 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 12 July 2009 - 10:59 AM

gracias wilson por tu respuesta, voy a probar y te aviso


  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 12 July 2009 - 12:54 PM



delphi
  1. DMmonitorenred.ZqQueryActualizacion.Params[0].Value :=
  2.  
  3.  
  4. DMmonitorenred.ZqQueryActualizacion.ParambyNAme('Valor').Value :=



Cualquiera de esas sirve
  • 0

#8 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 13 July 2009 - 06:55 AM



delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2. begin
  3.  
  4.  
  5.   DMmonitorenred.ZQnotas.SQL.Add(' update activas set nota = ' + (WNOTAS + chr(10) + RicheditNotas.Text + formatdatetime('dd/mm/yyyy hh:mm:ss',now))+  ' where alarmnum = :anum ' );
  6.   dMmonitorenred.Zqnotas.ParambyNAme('anum').Value :=DMmonitorenred.ZQactivasALARMNUM.Value;    // strtoint(FRMactivasred.alanum);
  7.   DMmonitorenred.ZQnotas.ExecSQL;
  8.   close;
  9. end;



haciendo asi la consulta para el update me da el siguiente error:

Imagen Enviada

http://img33.imagesh...aserror1.jpg 

el query ZQconsultas esta hecho en el datamodule asi:



delphi
  1. select  alarmnum, nota  from activas
  2. where alarmnum=  :anum





  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 13 July 2009 - 07:26 AM

Prueba agregando los parámetros en la propiedad Parameters del ZQuery e intenta de nuevo.

Saludos.
  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 13 July 2009 - 07:36 AM

A ver amigo, primero que todo creo que te están sobrando dos paréntesis en la primera lí­nea (antes de WNOTAS y depués de formatdatetime('dd/mm/yyyy hh:mm:ss',now)), y también recordarte que ZQNotas no debiera tener nada en su propiedad SQL en tiempo de diseño.

Corregido podrí­a quedar así­:


delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2. begin   
  3. DMmonitorenred.ZQnotas.SQL.Add(' update activas set nota = ' + WNOTAS + chr(10) + RicheditNotas.Text + formatdatetime('dd/mm/yyyy hh:mm:ss',now)+  ' where alarmnum = :anum ' ); 
  4. dMmonitorenred.Zqnotas.ParambyName('anum').Value :=DMmonitorenred.ZQactivasALARMNUM.Value;    // strtoint(FRMactivasred.alanum); 
  5. DMmonitorenred.ZQnotas.ExecSQL;
  6. DMmonitorenred.ZQactivas.Refresh;
  7. close;
  8. end;



el query ZQconsultas esta hecho en el datamodule asi:



delphi
  1. select  alarmnum, nota  from activas
  2. where alarmnum=  :anum


Que hace ZQConsultas en el proceso en cuestión?

Saludos
  • 0

#11 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 13 July 2009 - 08:17 AM

Agregando a lo dicho por Wilson, para asegurarte que el query no tenga nada en su propiedad SQL agrega esta linea antes del add

DMmonitorenred.ZQnotas.SQL.Clear;


  • 0

#12 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 13 July 2009 - 09:11 AM

Gracias por sus respuestas amigos.

Me sigue dando el mismo error, le cambie algunas partes, para ver si era lo del parametro que no me funcionaba
y le quite lo del formatdatetime  para probar y quedo asi:



delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2.  
  3. begin
  4. DMmonitorenred.ZQnotas.SQL.Clear;
  5. DMmonitorenred.ZQnotas.SQL.Add(' update activas set nota = ' + WNOTAS + chr(10) + (RicheditNotas.Text )+  ' where alarmnum = ' + DMmonitorenred.ZQactivasALARMNUM.ASSTRING );  // :anum ' );
  6. //dMmonitorenred.Zqnotas.ParambyName('anum').Value :=DMmonitorenred.ZQactivasALARMNUM.Value;    // strtoint(FRMactivasred.alanum);
  7. DMmonitorenred.ZQnotas.ExecSQL;
  8. DMmonitorenred.ZQactivas.Refresh;
  9. close;
  10. end;



entonces me da el siguiente error:

Imagen Enviada
http://img132.images...error2.jpg   



  • 0

#13 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 13 July 2009 - 09:30 AM



delphi
  1. DMmonitorenred.ZQnotas.SQL.Add(' update activas set nota = ' + QuotedStr(WNOTAS + chr(10) + (RicheditNotas.Text ))+  ' where alarmnum = ' + DMmonitorenred.ZQactivasALARMNUM.ASSTRING );



Al ser un campo Texto el valor ingresado debe ir entre apostrofe, si con esta modificacion te da error, coloca un breakpoint en execsql y muestramos el contenido de DMmonitorenred.ZQnotas.SQL.Text antes de ejecutar la sentencia.
  • 0

#14 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 13 July 2009 - 10:26 PM

Gracias Eduarcol al parecer lo que faltaba era el [shadow=red,left]quotedstr[/shadow] porque ahora funciona bien
quedo de esta manera:



delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2.  
  3. begin
  4. DMmonitorenred.ZQnotas.SQL.Clear;
  5. DMmonitorenred.ZQnotas.SQL.Add(' update activas set nota = ' + quotedstr(WNOTAS + chr(10) + (RicheditNotas.Text) + '  ' + (formatdatetime('dd/mm/yyyy hh:mm:ss',now)))+  ' where alarmnum =  :anum ');
  6. dMmonitorenred.Zqnotas.ParambyName('anum').asstring := FRMactivasred.alanum;
  7. DMmonitorenred.ZQnotas.ExecSQL;
  8. DMmonitorenred.ZQactivas.Refresh;
  9. close;



frmactivasred.alanum  es el valor de el campo alarmnun de la tabla activas que le asigno a esta variable al presionar el oneditclickbutton del dbgrid del  formulario frmactivasred, que es el que me envia al fomulario para escribir las notas.

Gracias wilson por toda tu ayuda y tu esfuerzo.

gracias enecumene por tu respuesta tambien.



  • 0

#15 paoti

paoti

    Member

  • Miembros
  • PipPip
  • 12 posts
  • LocationMonterrey

Posted 15 July 2009 - 11:46 AM

Hola, que bueno que tu duda llego a buen temrino de solucion


un tip, cuando una isntruccion te falle, es hacer los siguiente:



delphi
  1. procedure TFRMnotas.GUARDAR1Click(Sender: TObject);
  2. var
  3. cadena : string;
  4. begin
  5.   cadena := ' update activas set nota = ' + quotedstr(WNOTAS + chr(10) + (RicheditNotas.Text) + '  ' +
  6.               (formatdatetime('dd/mm/yyyy hh:mm:ss',now)))+  ' where alarmnum =  156 ';
  7.   cajadetexto.text = cadnea;
  8. {
  9. DMmonitorenred.ZQnotas.SQL.Clear;
  10. DMmonitorenred.ZQnotas.SQL.Add(cadena);
  11. dMmonitorenred.Zqnotas.ParambyName('anum').asstring := FRMactivasred.alanum;
  12. DMmonitorenred.ZQnotas.ExecSQL;
  13. DMmonitorenred.ZQactivas.Refresh;
  14. }
  15. close;



es decir, que si te marca un error una intruccion que esta siendo formada de forma dinamica, lo que hago yo, es ver como se genera la isntrccion, copiarla y ejecutarla en el administrador de base de datos, y ver el error de sintaxis, ya que todo esta correcto, ahora si descomento el codigo de afectacion de los datos.
  • 0

#16 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 15 July 2009 - 03:47 PM

Gracias Paoti por tu recomendacion, la tendre en cuenta.
  • 0




IP.Board spam blocked by CleanTalk.