Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Realizar un Update en delphi con un query concondicion desde otro query!!! (https://www.clubdelphi.com/foros/showthread.php?t=82417)

rotsen26 06-03-2013 00:43:53

Realizar un Update en delphi con un query concondicion desde otro query!!!
 
Buenas tardes, como dice en el título, necesito hacer un update en un query con la condicion agarrandolo de otro query, si alguien puede ayudareme se lo agradecería mucho...

ecfisa 06-03-2013 00:47:29

Cita:

Empezado por rotsen26 (Mensaje 456044)
Buenas tardes, como dice en el título, necesito hacer un update en un query con la condicion agarrandolo de otro query, si alguien puede ayudareme se lo agradecería mucho...

Hola rotsen26.

Por favor reformula tu pregunta de forma mas detallada, realmente no se entiende el contenido.

Saludos.

rotsen26 06-03-2013 00:51:10

Código Delphi [-]
  with qry_consumo do
               begin
                 close;
                 sql.text:=' update det_consumo set estatus='+Quotedstr('DEV')+
                           ' where pk_consumo = pk_consumo ';
                  ExecSQL;

les pongo el codigo que estoy utilizando en la consulta... En el
Código Delphi [-]
where pk_consumo = pk_consumo

el pk_consumo lo quero igualar con el pk_consumo pero este está en un query... y es por eso que no se como hacer referencia a ese campo dentro del query...

ecfisa 06-03-2013 01:58:38

Hola rotsen26.

Si no te entiendo mal, creo que sería:
Código Delphi [-]
  with qry_consumo do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE DET_CONSUMO SET ESTATUS = :PSTATUS');
    SQL.Add('WHERE PK_CONSUMO = :PCONSUMO');
    ParamByName('PSTATUS').AsString := 'DEV';
    ParamByName('PCONSUMO').Value := El_Otro_Qry.FieldByName('PK_CONSUMO').Value;
    ExecSQL;
  end;

Saludos.

rotsen26 06-03-2013 02:32:41

Código Delphi [-]
  with qry_consumo do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE DET_CONSUMO SET ESTATUS = :PSTATUS');
    SQL.Add('WHERE PK_CONSUMO = :PCONSUMO');
    ParamByName('PSTATUS').AsString := 'DEV';  //marca error en el AsString
    ParamByName('PCONSUMO').Value := El_Otro_Qry.FieldByName('PK_CONSUMO').Value;
    ExecSQL;
  end;

El error dice 'TParameter' deos not contain a member named 'AsString'

Saludos!!!

Te comente el error...

ecfisa 06-03-2013 04:00:28

Hola rotsen26.
Cita:

Empezado por rotsen26 (Mensaje 456052)
...
El error dice 'TParameter' deos not contain a member named 'AsString'

Saludos!!!

Te comente el error...

Es posible... el código que te puse es orientativo, no todos los componentes poseen las mismas propiedades y métodos. Algunos, como por ejemplo TADOQuery, no admiten la propiedad AsString en los parámetros. Y entre los detalles que has omitido está el tipo de componentes con los que te conectas (también que SGBD estas usando).

Intentá de este modo:
Código Delphi [-]
ParamByName('PSTATUS').Value:= 'DEV';
Si no funciona, comentanos con que componentes y SGBD estas trabajando

Prácticamente no hay límites en los caracteres que podes incluir en un mensaje, acostumbrate a detallar minuciosamente el problema y el ambiente en que se produce. Cuanta mas información brindes sobre la situación mas rápidamente se solucionará.

Saludos.:)

rotsen26 09-03-2013 18:34:26

Cita:

Empezado por ecfisa (Mensaje 456055)
Hola rotsen26.

Es posible... el código que te puse es orientativo, no todos los componentes poseen las mismas propiedades y métodos. Algunos, como por ejemplo TADOQuery, no admiten la propiedad AsString en los parámetros. Y entre los detalles que has omitido está el tipo de componentes con los que te conectas (también que SGBD estas usando).

Intentá de este modo:
Código Delphi [-]
ParamByName('PSTATUS').Value:= 'DEV';
Si no funciona, comentanos con que componentes y SGBD estas trabajando

Prácticamente no hay límites en los caracteres que podes incluir en un mensaje, acostumbrate a detallar minuciosamente el problema y el ambiente en que se produce. Cuanta mas información brindes sobre la situación mas rápidamente se solucionará.

Saludos.:)



Exactamente ese código utilicé, y ya me funciona, bueno, me funciona a medias.. Porque de hace 2 días a hoy, hace la deolucion de mercancia, pero hace de todo lo que se había agregado, y antes solo me devolvía la que se seleccionaba...

Te pongo el codigo que estoy utilizando!!!

Código Delphi [-]
  if sendMessage('Información','¿Está seguro de devolver el Artículo?',mb_yesno + mb_iconquestion)= IDNO then
     exit;
 with qry_dev do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE DET_CONSUMO dc, det_alm_art daa SET dc.ESTATUS = :PSTATUS, dc.comentario=: DBMemo1, daa.existencia=:exi');
    SQL.Add('WHERE PK_CONSUMO = :PCONSUMO');
    Parameters.ParamByName('PSTATUS').Value := 'DEV';
    Parameters.ParamByName('DBMemo1').Value := DBMemo1.Text;
    Parameters.ParamByName('PCONSUMO').Value := qry_consumo.FieldByName('PK_CONSUMO').Value;
    Parameters.ParamByName('exi').Value:=(qry_consumoexistencia.Value)+1;
    ExecSQL;
  end;


despegué los : de memo porque ponía una carita!!!

ecfisa 09-03-2013 20:07:43

Hola rotsen26.

Esta es tu sentencia SQL:
Código SQL [-]
UPDATE DET_CONSUMO dc, det_alm_art daa 
SET dc.ESTATUS = :PSTATUS, 
    dc.comentario=: DBMemo1,  /* Error: Aquí hay un espacio entre ':' y DBDemo1  */
   daa.existencia=:exi
WHERE PK_CONSUMO = :PCONSUMO
Según entiendo, estas intentando modificar múltiples tablas con [UPDATE] mediante esa sentencia SQL.
Al menos en los [SGBD] que conozco y hasta donde sé, no es posible.

Por otro lado todavia sigues sin mencionar cuál SGBD estas utilizando... Infiero que los componentes que utilizas deben ser ADO por el uso de la propiedad Parameters.

Es por eso que insistimos en la importancia de brindar la mayor información posible !!!

Saludos.

rotsen26 09-03-2013 21:12:04

Cita:

Empezado por ecfisa (Mensaje 456326)
Hola rotsen26.

Esta es tu sentencia SQL:
Código SQL [-]
UPDATE DET_CONSUMO dc, det_alm_art daa 
SET dc.ESTATUS = :PSTATUS, 
    dc.comentario=: DBMemo1,  /* Error: Aquí hay un espacio entre ':' y DBDemo1  */
   daa.existencia=:exi
WHERE PK_CONSUMO = :PCONSUMO
Según entiendo, estas intentando modificar múltiples tablas con [UPDATE] mediante esa sentencia SQL.
Al menos en los [SGBD] que conozco y hasta donde sé, no es posible.

Por otro lado todavia sigues sin mencionar cuál SGBD estas utilizando... Infiero que los componentes que utilizas deben ser ADO por el uso de la propiedad Parameters.

Es por eso que insistimos en la importancia de brindar la mayor información posible !!!

Saludos.

Por si no leíste al último hice un comentario el porque había despegado los :. Y estoy utilizando MySQL. Con ADOQuery y DataSource, el problema es que solo quiero quitar un regristro de la base de datos, pero al darle clic al boton se me quitan todos los que aparecen en el GRID...

ecfisa 09-03-2013 22:17:47

Cita:

Empezado por rotsen26 (Mensaje 456331)
.., el problema es que solo quiero quitar un regristro de la base de datos, pero al darle clic al boton se me quitan todos los que aparecen en el GRID...

Hola.

Si estas usando un sólo TADOQuery, tanto para mostrar los resultados como para realizar el update y este asociado a un DBGrid, tenes que salvar la sentencia SQL anterior y restaurarla luego de realizar la operación:
Código Delphi [-]
var
  BackSQL: string;
begin
  with qry_dev do
  begin
    BackSQL := SQL.Text;
    (*
      ...
      Aqui la operación anterior (tu código) 
      ...
    *)
    Close;
    SQL.Text:= BackSQL;
    Open;
  end;
  ...
Cita:

Empezado por rotsen26 (Mensaje 456331)
Por si no leíste al último hice un comentario el porque había despegado los :

Había leido, pero no entendí a que te referías. Te comento que existen las etiquetas [noparse]:D[/noparse] para eliminar ese efecto, ejemplo:
Código Delphi [-]
   SQL.Add('UPDATE DET_CONSUMO dc, det_alm_art daa SET dc.ESTATUS = :PSTATUS, dc.comentario=:DBMemo1,...');
Encontrarás todo acerca ellas aqui: [Etiquetas vB]


Por otro lado, según estos enlaces, parece que MySQL (motor que no conozco) si permite realizar ese tipo de sentencias:
Saludos.


La franja horaria es GMT +2. Ahora son las 23:31:40.

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