FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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))+') '; Nota:Uso Delphi 6, Paradox 7 y un TQuery para la consulta. Ya cheque y los .db no son solo lectura. Salu2 |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
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; 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. |
#4
|
||||
|
||||
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; 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 Salu2 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|