Ir al contenido


Foto

Actualizar campo con valor Null

adoquery mysql update null

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

#1 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 25 marzo 2017 - 10:26

Buenos dias estimados, tengo un detalle que por mas que busco no veo por donde tenga el error, quizá ustedes puedan detectarlo mejor ..

 

Lo que requiero es actualizar 3 campos solamente de una tabla dandoles el valor de Null osea sin valores, tengo lo siguiente:


delphi
  1. with DMod1.ADOQueryCL do
  2. Begin
  3. Close;
  4. // Actualizamos Tabla Clientes dejando los campos en blanco
  5. SQL.Add('UPDATE `clientes` SET ');
  6. SQL.Add('FOLIO = NULL, INDEX_ID = NULL, ONT_ID = NULL ');
  7. SQL.Add(' WHERE ID_CL = ' + Trim(Label43.Caption));
  8. ExecSQL;
  9. end;

Los campos a actualizar son FOLIO, INDEX_ID y ONT_ID, todos ellos son de tipo Integer, donde la condición es que sea el ID del cliente (ID_CL) que lo he visualizado en un label (Label43.Caption)

 

Pero al correr el programa me marca error de sintaxis, en que parte estaré mal?

 

El mensaje manda lo siguiente:

 

 

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

Debugger Exception Notification
---------------------------
Project CTRO.exe raised exception class EOleException with message '[MySQL][ODBC 5.3(a) Driver][mysqld-5.5.5-10.0.10-MariaDB]You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE `clientes` SET 
FOLIO = NULL, INDEX_ID = NULL, ONT_ID = NULL 
 WHERE ID' at line 2'. Process stopped. Use Step or Run to continue.
---------------------------
 

 

Gracias de antemano !! 


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 marzo 2017 - 10:34

A mi me hacen ruido dos cosas

 

1) el uso de las comilla ``para nombrar la tabla. Aunque se que las herramientas que trabajan con MariaDB las usan

2) el parametro que le pasas al Id. Le estas pasando un string, cuando se supone que deberia ir un numero

 

Igualmente antes de hacer nada yo probaria el update en algun gestor, a ver si puede ser mas especifico con el error


  • 0

#3 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 25 marzo 2017 - 10:45

A mi me hacen ruido dos cosas

 

1) el uso de las comilla ``para nombrar la tabla. Aunque se que las herramientas que trabajan con MariaDB las usan

2) el parametro que le pasas al Id. Le estas pasando un string, cuando se supone que deberia ir un numero

 

Igualmente antes de hacer nada yo probaria el update en algun gestor, a ver si puede ser mas especifico con el error

 

* Sobre las comillas, asi es la herramienta que estoy usando me permite hacer eso, aunque igual no es "obligatorio" pero lo hago para ser mas claro en lo que quiero hacer y diferenciar los campos usados.

* Sobre el parámetro, efectivamente pero intente hacerlo convirtiendo el valor string a entero (IntToStr) pero me marco error el compildor. asi que lo deje asi.

 

Y efectivamente uso un gestor para hacer las comprobaciones y tal cual estan pues en el gestor lo hce sin ningun problema.

 

Pero .. sabes cuál era el error? .. me falto limpiar el parámetro SQL...


delphi
  1. with DMod1.ADOQueryCL do
  2. Begin
  3. Close;
  4. SQL.Clear; // Limpiar consulta antes de hacer otra nueva
  5. // Actualizamos Tabla Clientes dejando los campos en blanco
  6. SQL.Add('UPDATE `clientes` SET ');
  7. SQL.Add('FOLIO = NULL, INDEX_ID = NULL, ONT_ID = NULL ');
  8. SQL.Add(' WHERE ID_CL = ' + Trim(Label43.Caption));
  9. ExecSQL;
  10. end;

y ahora si pude actualizar los campos...

 

De todas formas estimado gracias por tus observaciones que igual ayudan mucho saber eso. puede darlo como resuelto, ahora que si hay aportaciones para mejorarlo bienvenidos ..

 

Saludos !! 


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2017 - 10:47

¿Y por qué no simplemente colocarle -1 ó 0?, al igual que Agustín, en delphi ó lazarus no es necesario colocar los acentos a las tablas.


  • 0

#5 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 25 marzo 2017 - 11:04

¿Y por qué no simplemente colocarle -1 ó 0?, al igual que Agustín, en delphi ó lazarus no es necesario colocar los acentos a las tablas.

 

¨Pues si le soy sincero no sabia que eso se podía hacer igual, ya que hasta dnde sabía si no querias un valor se usaba el Null, pero igual es una buena idea gracias.

 

Sobre los acentos es correcto, solo que en lo personal lo uso para que no me pierda entre el código y pueda identificarlo mejor. (cuestión de gustos)

 

Saludos !!


  • 0

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 marzo 2017 - 11:41

Ah, entonces se trata de una sentencia sql que se va a ejecutar varias veces, es siempre el mismo comando update, lo unico que varia es el parametro
 
Te sugiero que lo hagas de esta manera, que ademas es mas eficiente, deberias inicializar el query o command en alguna parte, por ejemplo en el constructor del DataModule o en tiempo de diseño
 


delphi
  1. procedure TDataModule1.DataModuleCreate(Sender: TObject);
  2. begin
  3. ADOQueryCl.SQL.Text :=
  4. ' UPDATE `clientes` SET ' +
  5. ' FOLIO = NULL, INDEX_ID = NULL, ONT_ID = NULL ' +
  6. ' WHERE ID_CL = :ID_CL ';
  7.  
  8. ADOQueryCl.Parameters.ParamByName('ID_CL').DataType := TFieldType.ftInteger;
  9. ADOQueryCl.Prepared := True;
  10. end;

Y luego utilizas el query:


delphi
  1. Mod1.ADOQueryCl.Parameters.ParamByName('ID_CL').Value := StrToInt(Label43.Caption);
  2. Mod1.ADOQueryCl.ExecSQL;

Por otra parte te recomiendo que hagas algo con respecto al almacenamiento del ID del cliente en un caption de un label.

 

De hecho hay software que puede modificar el texto de un label desde afuera de tu aplicacion, por lo cual ya es una vulnerabilidad

 

Con hacer algo tan simple como almacenar el valor en una variable de instancia del form, y pasar eso como parametro al query, solucionas el problema

 


  • 0




IP.Board spam blocked by CleanTalk.