![]() |
como utilizar el UpdateSQL
Buenas, como tengo que utilizar los UpdateSQL para modificar los datos de una consulta.
Ya pregunte la ultima vez como podria modificar los datos de una consulta, y me dijeron que con un UpdateSQL, pero n se como funciona. Os agredeceria que me respondierais pronto. Gracias. Irina. |
Si no me equivoco yo fui quien te sugirió usarlo, y algo te expliqué de como usarlo.
Cuando uno tiene una consulta con varias tablas relacionadas, se le hace imposible al TQuery saber de donde proviene cada dato, entonces para solucionar ese problema, existen los TUpdateSQL, que a mi parecer, son una idea fantástica. Lo que uno hace en un TUpdateSql, es decirle al DataSet qué Sql´s ejecutar para cada Insert, Update o Delete, al igual que Oracle permite crear tres trigges en una vista para que esta sea modificable. Si tenemos el un TQuery con el sql: Código:
SELECT T.ID, T.NOMBRE, T.DOMICILIO, T.ID_PROVINCIA, P.DESCRIPCION InsertSql Código:
INSERT INTO TRABAJADORES Código:
UPDATE TRABAJADORES Código:
DELETE FROM TRABAJADORES Bueno, espero haber sido claro, me parece que este es un tema un poco conocido o poco utilizado, aunque existe desde las primeras versiones de Delphi, te prometo que voy a hacer un ejemplo para y lo publicaré en Internet. Saludos! |
Oye muchas gracias por tu respuesta, te lo has currado mogollon, todavia no le he provado, pero lo he entendidio todo.
Gracias por tu ayuda. Un saludo Irina. :D |
Cita:
Saludos! |
No sabia que eras argentino, perdona.
'Te lo has currado mogollon' significa que has hecho un buen trabajo, que me has ayudado mucho, que sabes de que va el tema, en fin cosas asi. Por cierto me encanta tu acento. Me refiero al agento argentino, ya que el tuyo no lo conozco y no puedo opinar, ya me entiendes. Un saludo Irina |
UpdateSql con paradox
Hola amigos, tengo problemas con con mi UpdateSQL, les explico tengo una tabla en paradox con datos de los alumnos (Matricula, Nombre, Dirección, Telefono, Reinscrp, etc.), genero el query siguiente:
Select Matricula, Nombre from Alumnos Where reinscrip = 'S' en un updateSql genero el codigo de forma automatica y me da el siguiente resultado: -------------------- delete from "ALUMNOS.DB" where MATRICULA = :OLD_MATRICULA and NOMBRE = :OLD_NOMBRE ------------------------ insert into "ALUMNOS.DB" (MATRICULA, NOMBRE) values (:MATRICULA, :NOMBRE) ------------------------- update "ALUMNOS.DB" set MATRICULA = :MATRICULA, NOMBRE = :NOMBRE where MATRICULA = :OLD_MATRICULA and NOMBRE = :OLD_NOMBRE ------------------------------- Conecto un DBNavigator y un DBGrid al query para ver los resultados y no puedo insertar, modificar ni eliminar ningun registro. delphi.com.ar comentas en este hilo que "Cuando uno tiene una consulta con varias tablas relacionadas, se le hace imposible al TQuery saber de donde proviene cada dato, entonces para solucionar ese problema, existen los TUpdateSQL,", así que hice lo propio y modifique mi consulta y updateSql para usar dos tablas relacionas pero el resultado es el mismo no puedo modificar, insertar ni eliminar registros de mi consulta, tengo estas mismas tablas en intebase así que probe copiando el sql del query y los del updateSql al IBDataset y este funciona bien. Que creen que me este faltando. Gracias |
hola Jorge. No hace falta que los datos de tu Query provengan de diferentes tablas para poder usar los TupdateSQL... pero son el único mecanismo disponible en todos los motores (a excepción de oracle) para lograr modificar consultas de este tipo, que son Read-Only por "circunstancia"... valiendose de la jerga del BDE.
Creo que en tu caso simplemente podes quitar el objeto TUpdateSQL, y poner la propiedad del query RequestLive a True. Si de cualquier forma queres aprender mas sobre esta técnica... por aqui te dejo una pequeña introducción... Cita:
;) |
Solo añadir que las sentencias SQL que te ha generado Delphi están en perfecto estado..
|
Cita:
Saludos! |
para completar la idea, y por si a alguno le interesa... los triggers se crean sobre las vistas, bajo la categoría instead of (en lugar de).
Código:
Create or Replace Trigger NombreTrigger Hasta luego ;) |
Cita:
Saludos! |
La franja horaria es GMT +2. Ahora son las 04:22:55. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi