PDA

Ver la Versión Completa : Para que sirve el componente TUpdateSQL


David
23-10-2006, 17:31:33
hola

Sé que se enlaza con la propiedad UpdateObject del TQuery . Al hacer doble clic , se muestran los campos y en la segunda page tiene propiedades delete , insert y modify .

Pero realmente no sé su utilidad , veo la ayuda , pero tampoco me aclara demasiado .

Alguien me puede poner un ejemplo de utilidad de este componente .

Saludos

afxe
23-10-2006, 18:05:37
Este componente permite indicar al TQuery cómo debe hacer las actualizaciones y se usa junto a la propiedad CacheUpdates del mismo.

Imagina que tienes la siguiente consulta:


Código SQL [-] (http://www.clubdelphi.com/foros/#)
SELECT P.CODIGO, P.FECHA, P.IMPORTE, P.COD_CLIENTE, C.NOMBRE_CLIENTE
FROM PAGOS P LEFT JOIN CLIENTES C ON P.COD_CLIENTE = C.COD_CLIENTE
WHERE P.COD_CLIENTE = :Codigo





Con esta consulta traemos los pagos efectuados de un cliente, pero no podemos actuar directamente contra ella para hacer INSERT, UDPATE o DELETE, ya que el BDE no sabrá cómo manejarse.

Poniendo la propiedad CacheUpdate a True y asignando un TUpdateObject puedes definir cómo se debe actualizar los datos:
Para insertar:

Código SQL [-] (http://www.clubdelphi.com/foros/#)
INSERT INTO PAGOS (CODIGO, COD_CLIENTE, FECHA, IMPORTE)
VALUES (:CODIGO, :COD_CLIENTE, :FECHA, :IMPORTE)




Para Borrar:

Código SQL [-] (http://www.clubdelphi.com/foros/#)
DELETE FROM PAGOS WHERE CODIGO = :CODIGO





e idem para actualizar. Cuando ejecutes sobre el TQuery el método ApplyUpdates se ejecutarán las sentencias SQL apropiadas para cada acción llevada a cabo con cada uno de los registros del TQuery mientras ha estado en Caché.

Como ves, el funcionamiento es muy parecido a lo TIBDataSet de las IBX.

Es muy útil para hacer modificaciones masivas a datos sin que se tengan que ir grabando en la BD hasta que el usuario dé conformidad.

¿Aclarado?

David
23-10-2006, 18:27:26
No lo entiendo . :confused:

Vamos a ver , en la consulta que has sacado sacas los pagos que ha realizado cada cliente . Estos pagos estan en la tabla pagos , los clientes estan en la tabla clientes .

Cuando aplicas del ApplyUpdate del Query , que es lo que hace , por que que es lo que inserta y donde lo inserta , que es lo que borra y donde lo borra y que es lo que modifica y donde lo modifica .

Además supongo que hará alguna de esta acciones , insertar ,modificar y eliminar , pero obviamente no las tres a la vez .

Saludos

kuan-yiu
23-10-2006, 18:44:02
No lo entiendo . :confused:

Vamos a ver , en la consulta que has sacado sacas los pagos que ha realizado cada cliente . Estos pagos estan en la tabla pagos , los clientes estan en la tabla clientes .

Cuando aplicas del ApplyUpdate del Query , que es lo que hace , por que que es lo que inserta y donde lo inserta , que es lo que borra y donde lo borra y que es lo que modifica y donde lo modifica .

Además supongo que hará alguna de esta acciones , insertar ,modificar y eliminar , pero obviamente no las tres a la vez .

Saludos
Borrará, insertará y modificará lo que tú le digas, para eso escribes el contenido de cada consulta.
Yo tengo un par de ejemplos de uso pero son algo complejos... A ver que trato de simplificarlo un poco.

Lepe
23-10-2006, 19:47:28
¿qué inserta?

INSERT INTO PAGOS (CODIGO, COD_CLIENTE, FECHA, IMPORTE)
VALUES (:CODIGO, :COD_CLIENTE, :FECHA, :IMPORTE)


Pues inserta en la tabla PAGOS, el código, código de cliente, fecha e importe.

¿de donde?
Pues de los DBEdits asociados a la consulta original de tu Form, o de tu DBGrid.

¿Qué o cuando se realiza cada acción?
Si tienes un DBNavigator asociado a esa consulta, cuando pulses el boton de:
- Eliminar.... ¿Qué sentencia SQL crees que se va a ejecutar? ;)
- Insertar ... lo mismo
- Guardar ... lo mismo
- etc.

Añadir una cosita más: Cuando tienes el CacheUpdate a true, significa que todos esas inserciones que haces o modificaciones se harán en memoria, (lo ves en el grid que tengas) pero realmente no se han hecho en las tablas. Cuando Apliques los cambios (ApplyUpdates) entonces, y solo entonces se llevan a cabo todas y cada una de las modificaciones que has hecho previamente.

¿Ahora sí?

Saludos

gama_blind
13-01-2007, 04:04:59
:confused: si entiendo la utilidad,,, pero lo que no se es como se utiliza por ejemplo yo tengo un DBGRID el cual esta enlazado a un DataSource,TQuery y en la propiedad UpdateObject del TQuery tengo un TUpdateSQL , el TUpdateSQL ya lo tengo configurado con:

update integrantes_cursos
set
CALIFICACION_CURSO = :CALIFICACION_CURSO
where
ID_CURSO = :OLD_ID_CURSO and
ID_ALUMNO = :OLD_ID_ALUMNO and
ID_MAESTRO = :OLD_ID_MAESTRO and
CALIFICACION_CURSO = :OLD_CALIFICACION_CURSO

lo que no se es donde invocar updateSQL1.Apply(ukModify); si es que esta es correcta forma de invocarlo. el DBGrid no me deja escribir en un campo,,, ya revise todas las propiedades para escritura del dbgrid y el Datasource y el Tquery, he realizado pruebas tambien con un DBEdit y me pasa lo mismo se coloca el cursor para escribir pero no acepta ninguna tecla,, porfavor tengo dias con el miismo problemita a ver si alguien ayuda...

YA ENCONTRE EL PEQUEÑO DETALLE FALTABA EN EL TQUERY HABILITAR EL CACHEUPDATES pero como aplico cambios y en que propiedad de que componente?

Lepe
13-01-2007, 10:21:47
No suelo trabajar con cacheUpdates, pero en principio, sería llamando a los métodos del Tquery, por ejemplo query1.Edit, modificas los datos y despues query1.Post, realizas todos los cambios que quieras y por último, para aplicarlos fisicamente a la tabla (ya que al estar en cacheupdate se hacen en memoria local), tienes que acceder al método query1.ApplyUpdates(0);

Revisa que el DBGrid no esté en solo-Lectura.

Si alguien puede ampliar la información, bienvenida será ;).

Saludos

gama_blind
14-01-2007, 02:29:06
:D:D
Listo... gracias por el aporte.... lo que logre hacer es insertar datos en un dbgrid en tiempo de ejecucion.
Yo utilize...

(http://www.clubdelphi.com/foros/#)TDATABASE

TDBGRID
en evento:
DataSource: TDataSource
en propiedades:
opciones:
dgEditing: True

TUPDATESQL
en propiedades:
modifySQL: //Codigo SQL que genere al entrar al Componente TUpdateSQL (haciendo DobleClick)
TQUERY
en propiedades:
CacheUpdates: True
UpdateObject: TUPDATESQL


TDATASOURCE
en propiedades:
DataSet: TQuery
AutoEdit: True
en evento:
ONDATACHANGE: TUPDATESQL.Apply(ukModify);



Espero y me haya explicado bien ... y les sirva... ;)

Lepe
15-01-2007, 12:14:53
Si en el evento OnDataChange haces un ApplyUpdates, no tiene mucho sentido, quizás debieras quitar la Cache.

Es cierto que en algunos casos puntuales, puede servir, no sé si es tu situación. Normalmente se hace cuando el servidor de la BBDD está lejos, así añades 50, 100 registros y por último se mandan todos de una sola vez para insertar físicamente.

Saludos

delphi.com.ar
15-01-2007, 20:42:20
Otra explicación mas vieja: http://www.clubdelphi.com/foros/showthread.php?s=&threadid=985