Ir al contenido


Foto

Error con Update en firebird


  • Por favor identifícate para responder
15 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 10 julio 2009 - 11:01



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
  • 2.137 mensajes

Escrito 11 julio 2009 - 10:24

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
  • 4.483 mensajes
  • LocationVenezuela

Escrito 11 julio 2009 - 08:53

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
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 11 julio 2009 - 09:07

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
  • 2.137 mensajes

Escrito 12 julio 2009 - 08:32

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
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 12 julio 2009 - 10:59

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


  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 12 julio 2009 - 12:54



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
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 julio 2009 - 06:55



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
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 julio 2009 - 07:26

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

Saludos.
  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 13 julio 2009 - 07:36

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
  • 4.483 mensajes
  • LocationVenezuela

Escrito 13 julio 2009 - 08:17

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
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 julio 2009 - 09:11

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
  • 4.483 mensajes
  • LocationVenezuela

Escrito 13 julio 2009 - 09:30



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
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 julio 2009 - 10:26

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 mensajes
  • LocationMonterrey

Escrito 15 julio 2009 - 11:46

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
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 15 julio 2009 - 03:47

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




IP.Board spam blocked by CleanTalk.