Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   problema con upDate (https://www.clubdelphi.com/foros/showthread.php?t=86195)

maxi915 29-06-2014 21:28:08

problema con upDate
 
HOla, tengo una tabla TurnoCliente compuesta por: ID_turnoCliente, Id_turno, Id_cliente.


el Problema surge al intentar actualizar un campo de la tabla TurnoCliente.

Debo actualizar el campo "id_cliente" de la tabla TurnoCliente cuando "IdTurno" sea igual a la variable "turno".

este es el procedimiento que utilizo pero me salta error de sintaxis.

alguna ayuda por favor?! se agradece nuevamente!!

Código Delphi [-]
procedure Insertar_EnturnoCliente_IdTurno(queryturnoCliente:TADOQuery;turno,cliente:Integer);
begin
 with queryturnoCliente do
    begin
     Close;
     sql.clear;
     sql.Add('update TurnoCliente set Id_turno ='+turno' where (id_turno='+(turno)');
     Parameters.ParamByName('ID_cliente').Value:=cliente;
     ExecSQL;
    end;
end;

ecfisa 29-06-2014 21:57:35

Hola maxi915.

Segun lo que solicitas,
Cita:

Empezado por maxi915 (Mensaje 478465)
...
Debo actualizar el campo "id_cliente" de la tabla TurnoCliente cuando "IdTurno" sea igual a la variable "turno".
...

la consulta debería ser:
Código Delphi [-]
procedure UpdateCustomerTurn(Qry: TADOQuery; const TurnId, CustId: Integer);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE TURNOCLIENTE SET ID_CLIENTE = :CUSTID');
    SQL.Add('WHERE IDTURNO = :TURNID');
    Parameters.ParamByName('CUSTID').Value:= CustId;
    Parameters.ParamByName('TURNID').Value:= TurnId;
    ExecSQL;
  end;
end;

Saludos :)

Casimiro Notevi 29-06-2014 22:00:44

La cara oculta de Delphi :)

maxi915 29-06-2014 22:29:36

me tira el siguiente error:

no se han especificado valores para algunos de los parametros requeridos

maxi915 29-06-2014 22:35:01

utilizando este tipo de consulta tambien deberia actualizarse el campo, el problema es que no conozco la sintaxis correcta.

Código Delphi [-]
with queryturnoCliente do
    begin
     Close;
     sql.clear;
     sql.Add('update TurnoCliente set Id_turno ='+turno' where (id_turno='+(turno)'); //problema de comillas o puntos en la sintaxis
     Parameters.ParamByName('ID_cliente').Value:=cliente;
     ExecSQL;
    end;

Casimiro Notevi 29-06-2014 23:00:29

Ya te lo ha explicado ecfisa, muy acertadamente, por cierto.

Casimiro Notevi 29-06-2014 23:01:58

Cita:

Empezado por maxi915 (Mensaje 478470)
el problema es que no conozco la sintaxis correcta.

Cita:

Empezado por Casimiro Notevi (Mensaje 478468)

;)


.

ecfisa 29-06-2014 23:02:58

Hola maxi915.
Cita:

Empezado por maxi915 (Mensaje 478469)
me tira el siguiente error:

no se han especificado valores para algunos de los parametros requeridos

Con seguridad sucede lo que te dijeron aquí (y lee lo que te sugiere Casimiro ;))

Saludos :)

maxi915 30-06-2014 19:32:51

Solucionado!

Código Delphi [-]
procedure actualizardisponibilidad(QueryTurnos:TADOQuery; turno:Integer; lugares:Integer);
Begin
   with QueryTurnos do
    begin
     Close;
     sql.clear;
     sql.Add('update turnos set disponibilidad ='+inttostr(lugares)+' where id_turno='+IntToStr(turno));//sintaxis correcta
     ExecSQL;
    end;
end;

ecfisa 30-06-2014 20:35:08

Hola maxi915.

Primero que nada me alegra solucionaras tu problema ^\||/.

Pero considero apropiado hacer nuevamente esta observación:

Siendo QueryTurnos de tipo TADOQuery y las variables Lugares y Turno de tipo integer, los siguientes códigos:
1)
Código Delphi [-]
  with QueryTurnos do
  begin
    Close;
    sql.clear;
    sql.Add('update turnos set disponibilidad ='+inttostr(lugares)+' where id_turno='+IntToStr(turno));//sintaxis correcta
    ExecSQL;
  end;
2)
Código Delphi [-]
  with QueryTurnos do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE TURNOS SET DISPONIBILIDAD = :DISP');
    SQL.Add('WHERE ID_TURNO = :TURNO'); // sintáxis correcta (y aconsejada)
    Parameters.ParamByName('DISP').Value:= Lugares; 
    Parameters.ParamByName('TURNO').Value:= Turno;
    ExecSQL;
  end;
provocan el mismo resultado final. (Ambos modifican el valor de la columna DISPONIBILIDAD de acuerdo a una condición)

Pero las implicancias que trae aparejado usar un método o el otro son muy diferentes...

El primero deja la puerta abierta a los ataques de Inyección SQL. Siempre que sea posible es aconsejable usar el segundo modo.

Saludos :)

Casimiro Notevi 30-06-2014 20:53:15

Cita:

Empezado por ecfisa (Mensaje 478507)
es aconsejable usar el segundo modo.

^\||/^\||/^\||/

maxi915 04-07-2014 06:35:31

gracias por el consejo!!!

maxi915 04-07-2014 06:42:07

tengo una duda mas con el update y tipo fecha, necesito actualizar esto:
cambiar fechaInscripcion, por la variable fecha.

Código Delphi [-]
procedure actualizarFechaPago(Queryclientes:TADOQuery; id_cliente:integer; fecha:string);
Begin
   with Queryclientes do
    begin
     Close;
     sql.clear;
     sql.Add('update Clientes set FechaInscripcion ='+(fecha)+' where id_cliente='+IntToStr(id_cliente));
     ExecSQL;
    end;
end;

:D

Casimiro Notevi 04-07-2014 10:50:15

Haciéndolo como se te ha aconsejado, con parámetros, no tendrías ningún problema con eso ;)

maxi915 04-07-2014 20:53:38

perfecto lo voy a probar..ahora que seria la variable "DISP", y el simbolo "=:"...gracias

Código Delphi [-]
  with QueryTurnos do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE TURNOS SET DISPONIBILIDAD = :DISP');
    SQL.Add('WHERE ID_TURNO = :TURNO'); // sintáxis correcta (y aconsejada)
    Parameters.ParamByName('DISP').Value:= Lugares; 
    Parameters.ParamByName('TURNO').Value:= Turno;
    ExecSQL;
  end;

maxi915 04-07-2014 21:02:02

Este es mi codigo y me tira error parametro fechaInscripcion not found....

Código Delphi [-]
procedure actualizarFechaPago(Queryclientes:TADOQuery; id_cliente:integer; fecha:string);
Begin
   with Queryclientes do
    begin
     Close;
     sql.clear;
     SQL.Add('UPDATE Clientes SET fechaInscripcion = :fecha');
    SQL.Add('WHERE ID_Cliente = :id_cliente');
    Parameters.ParamByName('fechainscripcion').Value:= fecha;
    ExecSQL;
     ExecSQL;
    end;
end;

ecfisa 05-07-2014 05:39:24

Cita:

Empezado por maxi915 (Mensaje 478721)
Este es mi codigo y me tira error parametro fechaInscripcion not found....

El error es claro y correcto (parámetro 'fechaInscripcion' no encontrado).

Fijate que en tu código SQL declaras como nombre de parámetro a fecha (*). Sin embargo en ParamByName, intentas hacer referencia a él como fechainscripcion siendo este último el nombre de la columna que deseas modificar...

Lo sintácticamente correcto sería:
Código Delphi [-]
  with Queryclientes do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE Clientes SET fechaInscripcion = :fecha');
    SQL.Add('WHERE ID_Cliente = :id_cliente');
    Parameters.ParamByName('fecha').Value:= fecha;
    Parameters.ParamByName('id_cliente').Value:= una_variable_o_valor;
    ExecSQL;
  end;

Saludos :)

(*) Dentro del código SQL los parámetros se distinguen por estar precedidos por dos puntos ':'.

maxi915 05-07-2014 05:50:00

Un millon de gracias, era justamente ese el problema!!!
errores basicos que se comenten...al no entender bien la sintaxis sql y delphi

maxi915 05-07-2014 05:53:27

seria muy util una guia donde detalle todo los tipos de consultas con sus variaciones, y demas, por ejemplo seleccionar todos los registros que cumplan ciertas condiciones...etc...pero bueno sera cuestion de buscar y encontrar algo lo que se necesita porque dudo que exista algo tan detallado

Casimiro Notevi 05-07-2014 10:42:48

http://terawiki.clubdelphi.com/Delph...phi_4_pdf_.zip


La franja horaria es GMT +2. Ahora son las 09:24:04.

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