Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-03-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
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...
Responder Con Cita
  #2  
Antiguo 06-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por rotsen26 Ver Mensaje
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 06-03-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
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...
Responder Con Cita
  #4  
Antiguo 06-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 06-03-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
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...
Responder Con Cita
  #6  
Antiguo 06-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola rotsen26.
Cita:
Empezado por rotsen26 Ver Mensaje
...
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 09-03-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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!!!
Responder Con Cita
  #8  
Antiguo 09-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 09-03-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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...
Responder Con Cita
  #10  
Antiguo 09-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por rotsen26 Ver Mensaje
.., 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 Ver Mensaje
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Realizar consulta con query lealtime Tablas planas 1 10-01-2013 17:53:20
Query dentro de otro query (Access) FGarcia SQL 2 28-12-2007 05:46:05
Delphi For PHP: Acceder a query desde JavaScript? maro PHP 4 01-10-2007 12:35:05
Hacer un Query de otro Query francisco260184 SQL 9 10-04-2007 03:46:18
Como hacer referencia a un query dentro de otro query? JuanBCT SQL 2 05-09-2006 18:35:25


La franja horaria es GMT +2. Ahora son las 17:54:44.


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
Copyright 1996-2007 Club Delphi