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 19-06-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
RequestLive de TQuery no puede, q mas puedo usar?

Hola necesito modifcar el valor de un campo resultado de una consulta y no puedo hacerlo con Update pues debo de asignar a los campos el resultado de ciertas operaciones segun los valores de cada registro. Obviamente asigne True a RequestLive pero al tratar de hacer las modificaciones me enviaba un error ("Cannot Modify a ReadOnly Dataset"), lei en la ayuda y el problema segun era q no debo usar Joins, Distincts, etc en la consulta para poder modificarla. La modifique de este manera:
Código:
SELECT Contratos.NCONTRATO, Clientes.RAZON_SOCIAL, Ventas_mov.NUM_RECIBO, 
Ventas_mov.FECHA, Ventas_mov.EFECTIVO, Ventas_mov.CHEQUE, Ventas_mov.BANCO, 
Ventas_mov.NUM_CHQ, Ventas_mov.CVE_COBRADOR, Ventas_mov.IDUsuario, 
Clientes.MUNICIPIO, Ventas_mov.Comision, Contratos.Tipo, Contratos.Vendedor, 
Ventas_mov.CLAVECOMISION 
FROM Contratos, Clientes, Ventas_Mov 
  Where  (Contratos.NCONTRATO = Ventas_mov.NCONTRATO) 
   AND (Contratos.NUM_CLI = Clientes.NUM_CLI) 
AND(Contratos.VENDEDOR = '+QuotedStr(IntToStr(VendedoresNUM_VEN.Value))+') ';
Pero sigue enviandome el mensaje de error y pues segun yo he cumplido los terminos establecidos. Mi pregunta es: ¿Esta mal la consulta (para q sea modificable obviamente)?, ¿Es imposble hacerlo de esta manera y si existe otro camino?.

Nota:Uso Delphi 6, Paradox 7 y un TQuery para la consulta. Ya cheque y los .db no son solo lectura.

Salu2
Responder Con Cita
  #2  
Antiguo 19-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Normalmente no podrás modificar los resultados de una consulta que involucre varias tablas.

Echale una leída a la ayuda de la componente TUpdateSql. Esta componente se usa precisamente para casos como el tuyo.

// Saludos
Responder Con Cita
  #3  
Antiguo 19-06-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Unhappy

Hola Roman, tarde pues me puse a seguir tu consejo y solo tengo un ultimo problema. Genero la consulta y campos persistentes para el Query q la construye. Ademas añadi un campo calculado (MONTOCOMISION) q obtiene el total q deseo asignar a un campo fisico (COMISION) de una de las tablas involucradas en la consulta, ahora lo q me falta es pasarle una clave consecutiva para identificar a los regsitros incluidos en dicha consulta en particular y el valor del campo calculado que corresponde a cada registro.
Hago lo siguiente en AfterPost de la cabecera:
Código:
 
procedure TDM.ComisionesAfterPost(DataSet: TDataSet);
begin
UpdateComision.ModifySQL.Text:='update Ventas_Mov '+
'set  '+
'  CLAVECOMISION = :'+QuotedStr(IntToStr(ComisionesCLAVE.Value))+','+
'  COMISION = :MONTOCOMISION '+
' where'+
'  NUM_RECIBO = :OLD_NUM_RECIBO and'+
'  NCONTRATO = :OLD_NCONTRATO and'+
'  IDUsuario = :OLD_IDUsuario and'+
'  FECHA = :OLD_FECHA and'+
'  EFECTIVO = :OLD_EFECTIVO and'+
'  CHEQUE = :OLD_CHEQUE and'+
'  BANCO = :OLD_BANCO and'+
'  NUM_CHQ = :OLD_NUM_CHQ and'+
'  CVE_COBRADOR = :OLD_CVE_COBRADOR and'+
'  CLAVECOMISION = :OLD_CLAVECOMISION and'+
'  COMISION = :OLD_COMISION';
UpdateComision.ExecSQL(ukModify);
DetailComision.ApplyUpdates;
end;
Y el error es que al dar ExecSQL, me manda un mensaje de error q dice q el valor de COMISIONESClave.Value no es un campo. La razon es obvia pues no es un campo de la consulta. Pero el punto es q debo de asignar dicho valor a todos los registros. Asi q cual es la sintaxis para q acepte dicho valor?. Busque en los mensajes del Foro y en la ayuda de Delphi pero no encontre la solucion.

Espero haberme explicado.

Salu2.

Nota: Al asignar update Object al Query la Rejilla me permite agregar valores y supuestamente se guardan pero no ocurre en la realidad.
Responder Con Cita
  #4  
Antiguo 21-06-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Hola una vez mas, leyendo mas acerca del UpdateSQL encontre q este permite editar sobre el resultado de la consulta pero segun como el desarrollador lo establezca se estaran vaciando los datos almacenados en cache a la base de datos y como mi sistema estara en red intente hacer la actualizacion despues de guardar en la tabla de cabecera asi:
Código:
MyQuery.Database.StartTransaction;
try
MyQuery.ApplyUpdates;
MyQuery.Database.Commit;
MyQuery.CommitUpdates;
except
MyQuery.Database.Rollback;
end;
Pero envia una excepcion ("Type mistmatch Expresion"), a decir verdad no encuentro la razon de dicha excepcion pues ya no modifico la sentencia de actualizacion generada por el UpdateSQLEditor, sino q solo "vuelco los datos" a la Bd con las instrucciones anteriorermente citadas. El codigo q me genera el editor es:
Código:
update Ventas_Mov
set
  NUM_RECIBO = :NUM_RECIBO,
  NCONTRATO = :NCONTRATO,
  IDUsuario = :IDUsuario,
  FECHA = :FECHA,
  EFECTIVO = :EFECTIVO,
  CHEQUE = :CHEQUE,
  BANCO = :BANCO,
  NUM_CHQ = :NUM_CHQ,
  CVE_COBRADOR = :CVE_COBRADOR,
  CLAVECOMISION = :CLAVECOMISION,
  COMISION = :COMISION
where
  NUM_RECIBO = :OLD_NUM_RECIBO and
  NCONTRATO = :OLD_NCONTRATO and
  IDUsuario = :OLD_IDUsuario and
  FECHA = :OLD_FECHA and
  EFECTIVO = :OLD_EFECTIVO and
  CHEQUE = :OLD_CHEQUE and
  BANCO = :OLD_BANCO and
  NUM_CHQ = :OLD_NUM_CHQ and
  CVE_COBRADOR = :OLD_CVE_COBRADOR and
  CLAVECOMISION = :OLD_CLAVECOMISION and
  COMISION = :OLD_COMISION
Esperando haberme explicado escucho sugerencias.
Salu2
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


La franja horaria es GMT +2. Ahora son las 20:29:59.


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