Ir al contenido


Foto

Actualizar dato campo memo SQL

memo update adoquery

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

#1 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 30 marzo 2017 - 09:48

Estimados, tengo un detalle ...

 

Sucede que cuando hago una actualización de un campo memo, cada que checo los registros actualizado, solo el campo memo la plabra o valor que pongo en ese campo, le agrega unos comillas simples, por ejemplo ... si en el campo memo pongo la palabra => Actualizado para checar, al consultar ese registro lo guarda con => ' Actualizado para checar'

 

Tengo el siguiente código para actualizar..


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. Begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = "'+ QuotedStr(Trim(Memo2.Lines.Text)) +'", DESC_ONT = "'+ Trim(Edit19.Text) +'" ');
  7. SQL.Add(' WHERE FOLIO LIKE ' +quotedstr('%' + StaticText1.Caption + '%')+' ');
  8. ExecSQL;
  9. end;

Cual creen que sería el detalle de que cada que actualizo le agrega una nueva comillas simples??

 

Saludos!..


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 31 marzo 2017 - 10:28

A mi me parece que le estas agregando vos mismo las comillas 

 

No es mejor usar parametros?


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = :Notas, DESC_ONT = :Desc');
  7. SQL.Add(' WHERE FOLIO LIKE :Folio');
  8. ParamByName('Notas').AsString := Trim(Memo2.Lines.Text);
  9. ParamByName('Desc').AsString := Trim(Edit19.Text);
  10. ParamByName('Folio').AsString := Trim('%' + StaticText1.Caption + '%');
  11. ExecSQL;
  12. end;


  • 0

#3 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 10:49

 

A mi me parece que le estas agregando vos mismo las comillas 

 

No es mejor usar parametros?


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = :Notas, DESC_ONT = :Desc');
  7. SQL.Add(' WHERE FOLIO LIKE :Folio');
  8. ParamByName('Notas').AsString := Trim(Memo2.Lines.Text);
  9. ParamByName('Desc').AsString := Trim(Edit19.Text);
  10. ParamByName('Folio').AsString := Trim('%' + StaticText1.Caption + '%');
  11. ExecSQL;
  12. end;

 

Me envía el siguiente mensaje...

 

---------------------------

Debugger Exception Notification
---------------------------
Project CTRO.exe raised exception class EOleException with message 'Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------
 

 

use lo siguiente ya que no me acepta el parametro asString


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = :Notas, DESC_ONT = :Desc');
  7. SQL.Add(' WHERE FOLIO LIKE :Folio');
  8. Parameters.ParamByName('Notas').Value := Trim(Memo2.Lines.Text);
  9. Parameters.ParamByName('Desc').Value := Trim(Edit19.Text);
  10. Parameters.ParamByName('Folio').Value := Trim('%' + StaticText1.Caption + '%');
  11. ExecSQL;
  12. end;


  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 31 marzo 2017 - 11:00

Estimados, tengo un detalle ...

 

Sucede que cuando hago una actualización de un campo memo, cada que checo los registros actualizado, solo el campo memo la plabra o valor que pongo en ese campo, le agrega unos comillas simples, por ejemplo ... si en el campo memo pongo la palabra => Actualizado para checar, al consultar ese registro lo guarda con => ' Actualizado para checar'

 

Tengo el siguiente código para actualizar..


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. Begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = "'+ QuotedStr(Trim(Memo2.Lines.Text)) +'", DESC_ONT = "'+ Trim(Edit19.Text) +'" ');
  7. SQL.Add(' WHERE FOLIO LIKE ' +quotedstr('%' + StaticText1.Caption + '%')+' ');
  8. ExecSQL;
  9. end;

Cual creen que sería el detalle de que cada que actualizo le agrega una nueva comillas simples??

 

Saludos!..

 

En efecto amigo estás agregando tu mismo las comillas ya que pones las comillas manualmente y además usas el QuotedStr. Quita éste último e intenta.

 

Para poder usar los parámetros intenta utilizar .AsMemo en lugar de .Value y nos comentas (y)

 

Saludox ! :)


  • 0

#5 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 31 marzo 2017 - 11:09

Ah es verdad, estas usando ADO. En ADO los parametros no tienen los metodos .AsString, .AsInteger y demas.. entiendo tu pesar  8o|

 

Como estan definidos los campos en la tabla?

 

Tambien los parametros tienen una propiedad DataType (que es un valor del tipo enumerativo Data.DB.TFieldType) que podes usar de este modo


delphi
  1. Parameters.ParamByName('CampoString').DataType := ftString;
  2. Parameters.ParamByName('CampoEntero').DataType := ftInteger;
  3. Parameters.ParamByName('CampoPuntoFlotante').DataType := ftFloat;
  4.  
  5. // hay mucho mas tipos


  • 0

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 31 marzo 2017 - 11:22

Yo tambien uso ADO y contra una BD Sql Server 2008R2 lo hago de este modo:

 

Primero la tabla tiene un campo Observaciones de tipo varchar(MAX)

 

Luego para actualizar el campo, simplificando, seria asi:


delphi
  1. procedure ActualizarCliente(const Id: Integer; const Observaciones: string);
  2. var
  3. cmd: TADOCommand;
  4. begin
  5. cmd := TADOCommand.Create(nil);
  6. try
  7. cmd.Connection := AsignarConexion;
  8. cmd.CommandText := ' UPDATE Clientes SET Observaciones = :Observaciones WHERE Id = :ID ';
  9. cmd.Parameters.ParamByName('Observaciones').Value := Observaciones;
  10. cmd.Parameters.ParamByName('Id').Value := Id;
  11. cmd.Execute;
  12. finally
  13. cmd.Free;
  14. end;
  15. end;

Y la llamada:


delphi
  1. begin
  2. ActualizarCliente(AlgunId, Memo1.Text);
  3. end;

Y asi es como queda grabada la informacion:

 

Archivo adjunto  obs.png   97,48KB   1 descargas


  • 0

#7 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 11:23

En efecto amigo estás agregando tu mismo las comillas ya que pones las comillas manualmente y además usas el QuotedStr. Quita éste último e intenta.

 

Para poder usar los parámetros intenta utilizar .AsMemo en lugar de .Value y nos comentas (y)

 

Saludox ! :)

 

 

Efectivamente, con el comando QuotedStr quitando se solucionó el problema.. Gracias a los dos !! 


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. Begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = "'+ Trim(Memo2.Lines.Text) +'", DESC_ONT = "'+ Trim(Edit19.Text) +'" ');
  7. SQL.Add(' WHERE FOLIO LIKE ' +quotedstr('%' + StaticText1.Caption + '%')+' ');
  8. ExecSQL;
  9. end;

En cuanto al uso de parámetros me sigue mandado el mismo mensaje anterior, igualmente con AsMemo no funciona, no aparece solo Value.


  • 0

#8 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 11:34

Yo tambien uso ADO y contra una BD Sql Server 2008R2 lo hago de este modo:

 

Primero la tabla tiene un campo Observaciones de tipo varchar(MAX)

 

Luego para actualizar el campo, simplificando, seria asi:


delphi
  1. procedure ActualizarCliente(const Id: Integer; const Observaciones: string);
  2. var
  3. cmd: TADOCommand;
  4. begin
  5. cmd := TADOCommand.Create(nil);
  6. try
  7. cmd.Connection := AsignarConexion;
  8. cmd.CommandText := ' UPDATE Clientes SET Observaciones = :Observaciones WHERE Id = :ID ';
  9. cmd.Parameters.ParamByName('Observaciones').Value := Observaciones;
  10. cmd.Parameters.ParamByName('Id').Value := Id;
  11. cmd.Execute;
  12. finally
  13. cmd.Free;
  14. end;
  15. end;

Y la llamada:


delphi
  1. begin
  2. ActualizarCliente(AlgunId, Memo1.Text);
  3. end;

Y asi es como queda grabada la informacion:

 

attachicon.gifobs.png

 

 

Si me actualiza los datos, pero me sigue mandando el mismo mensaje .. lo puse de esta otra forma ..


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = :Notas, DESC_ONT = :Desc');
  7. SQL.Add(' WHERE FOLIO LIKE :Folio');
  8.  
  9. Parameters.ParamByName('Notas').DataType := ftMemo;
  10. Parameters.ParamByName('Notas').Value := Trim(Memo2.Lines.Text);
  11. Parameters.ParamByName('Desc').DataType := ftString;
  12. Parameters.ParamByName('Desc').Value := Trim(Edit19.Text);
  13. Parameters.ParamByName('Folio').DataType := ftInteger;
  14. Parameters.ParamByName('Folio').Value := StrToInt(StaticText1.Caption);
  15.  
  16. ExecSQL;
  17. end
  18. ;


  • 0

#9 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 11:39

 

Ah es verdad, estas usando ADO. En ADO los parametros no tienen los metodos .AsString, .AsInteger y demas.. entiendo tu pesar  8o|

 

Como estan definidos los campos en la tabla?

 

Tambien los parametros tienen una propiedad DataType (que es un valor del tipo enumerativo Data.DB.TFieldType) que podes usar de este modo


delphi
  1. Parameters.ParamByName('CampoString').DataType := ftString;
  2. Parameters.ParamByName('CampoEntero').DataType := ftInteger;
  3. Parameters.ParamByName('CampoPuntoFlotante').DataType := ftFloat;
  4.  
  5. // hay mucho mas tipos

 

En la tabla ..

 

DESC_ONT = Varchar(35)

NOTAS = Varchar(254)

FOLIO = Int(11)


  • 0

#10 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 11:52

Una duda ...

 

El siguiente mensaje...

 

 

---------------------------

Debugger Exception Notification
---------------------------
Project CTRO.exe raised exception class EOleException with message 'Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------
 

 

Checando !! .. Si el programa lo compilo y lo ejecuto desde Delphi (en mi caso D7), me envía este mensaje cuando uso los parámetros mencionados, si me guarda los cambios pero me manda el mensaje ....

 

Pero ....

 

Cuando creo el ejecutable y desde alli hago las operaciones de actualización .... alli NO me aparece ningun mensaje y me actualiza los datos correctamente ...

 

esto es normal? .. asi debe ser???  :|

 

 


  • 0

#11 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 31 marzo 2017 - 11:56

Parece que el problema esta en otra parte.. en que linea te marca el depurador si le das a Break?


  • 0

#12 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 12:08

Parece que el problema esta en otra parte.. en que linea te marca el depurador si le das a Break?

 

En la primera linea donde estan los parámetros..


delphi
  1. ..
  2. SQL.Add('NOTAS = :Notas, DESC_ONT = :Desc');
  3. ...
  4. .

Pero como comente en lo anterior, en tiempo de ejecucion desde D7, me muestra ese mensaje y me actualiza los datos... pero si ejecuto el programa desde el ejecutable sin tener D7 ejecutandose, NO me parece ningún mensaje y también los actualiza.


  • 0

#13 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 31 marzo 2017 - 12:14

No estaras ocultando las excepciones? No tenes codigo similar a esto?


delphi
  1. try
  2. // ejecutar sql
  3. except
  4.  
  5. end;


  • 0

#14 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 12:35

 

No estaras ocultando las excepciones? No tenes codigo similar a esto?


delphi
  1. try
  2. // ejecutar sql
  3. except
  4.  
  5. end;

 

Solo lo use las transacciones, en esta parte no, al parecer es por eso ... pero en todo caso, por que si me hace la actualización aun enviando es mensaje?


  • 0

#15 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 31 marzo 2017 - 12:57

Solo lo use las transacciones, en esta parte no, al parecer es por eso ... pero en todo caso, por que si me hace la actualización aun enviando es mensaje?

 

 

Coloqué lo siguiente ..


delphi
  1. with Dmod1.ADOQueryCtrlONT do
  2. begin
  3. Close;
  4. SQL.Clear;
  5. SQL.Add('UPDATE ctrlont SET ');
  6. SQL.Add('NOTAS = :Notas, DESC_ONT = :Desc');
  7. SQL.Add(' WHERE FOLIO LIKE :Folio');
  8.  
  9. Parameters.ParamByName('Notas').DataType := ftMemo;
  10. Parameters.ParamByName('Notas').Value := Trim(Memo2.Lines.Text);
  11. Parameters.ParamByName('Desc').DataType := ftString;
  12. Parameters.ParamByName('Desc').Value := Trim(Edit19.Text);
  13. Parameters.ParamByName('Folio').DataType := ftInteger;
  14. Parameters.ParamByName('Folio').Value := StrToInt(StaticText1.Caption);
  15.  
  16. end
  17.  
  18. try
  19. Dmod1.ADOQueryCtrlONT.ExecSQL;
  20. except
  21. on E:Exception do // Si hay Error de Conexión
  22. begin
  23. // -------------------------
  24. MSG:='Ocurrió un detalle al guardar la actualización : ' + E.Message;
  25. Application.MessageBox(PChar(MSG),'ERROR !!!', MB_ICONSTOP );
  26. // -------------------------
  27. raise;
  28. exit;
  29. end; // on
  30. End; // try excep

y sigue aparecien el mensaje cuando lo ejecuto desde D7, pero en el ejecutable no muestra ningún mensaje.


  • 0




IP.Board spam blocked by CleanTalk.