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 30-05-2003
Irina Irina is offline
Miembro
 
Registrado: may 2003
Posts: 39
Poder: 0
Irina Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 30-05-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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
FROM TRABAJADORES T, PROVINCIAS P
WHERE T.ID_PROVINCIA = P.ID
Definiremos en el TUpdateSQL asociado a este query, SQL´s similares a estos:

InsertSql
Código:
INSERT INTO TRABAJADORES
(ID, NOMBRE, DOMICILIO, ID_PROVINCIA, FECHA_ALTA, FECHA_MODIF)
VALUES
(:ID, :NOMBRE, :DOMICILIO, :ID_PROVINCIA, SYSDATE, NULL)
UpdateSql
Código:
UPDATE TRABAJADORES
SET NOMBRE = :NOMBRE,
DOMICILIO = :DOMICILIO, 
ID_PROVINCIA = :ID_PROVINCIA,
FECHA_MODIF = SYSDATE
WHERE ID = :ID
DeleteSql
Código:
DELETE FROM TRABAJADORES
WHERE ID = :ID
Utilizamos : + Nombre de campo, para referirnos al valor que se ha ingresado a este campo, también se puede notar el uso de otros campos no definidos en el Query al cual se le asigna una variable del motor.


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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 30-05-2003
Irina Irina is offline
Miembro
 
Registrado: may 2003
Posts: 39
Poder: 0
Irina Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 30-05-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por Irina
te lo has currado mogollon
Disculpa mi ignorancia, pero.... ¿Qué significa esta expresión?

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 30-05-2003
Irina Irina is offline
Miembro
 
Registrado: may 2003
Posts: 39
Poder: 0
Irina Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 16-03-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
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
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #7  
Antiguo 16-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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:
Empezado por Delphi 4 Help
Use a TUpdateSQL object to provide SQL statements used to update read-only datasets represented by TQuery components when cached updates are enabled. A dataset is read-only either by design or circumstance. If a dataset is read-only by design, the application itself does not provide a user interface for updating data, but may institute a programmatic scheme behind the scenes. If a dataset is read-only by circumstance, it indicates that the Borland Database Engine (BDE) returned a read-only result set. This usually happens for queries made against multiple tables. Such queries are, by SQL-92 definitions, read-only.

TUpdateSQL provides a mechanism for circumventing what some developers consider an SQL-92 limitation. It enables a developer to provide INSERT, UPDATE, and DELETE statements for performing separate update queries on otherwise read-only result sets in such a manner that the separate update queries are transparent to the end user.

In practical application, a TUpdateSQL object is placed on a data module or form, and linked to a TQuery component through that component’s UpdateObject property. If the UpdateObject property points to a valid TUpdateSQL object, the SQL statements belonging to the update object are automatically applied when cached updates are applied.
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 16-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Solo añadir que las sentencias SQL que te ha generado Delphi están en perfecto estado..
Responder Con Cita
  #9  
Antiguo 17-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por jachguate
...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"...
Curiosamente Oracle ha implementado vistas modificables mediante triggers (a no ser que se trate de consultas simples), y esta técnica es MUY SIMILAR a la implementada en Delphi anteriormente.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #10  
Antiguo 17-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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
  Instead of insert on NombreVista, bla, bla, bla
Esta característica, si no estoy mal, está disponible a partir de la versión 9i (y si lo estoy, que alguien me corrija... por favor).

Hasta luego
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 17-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por jachguate
Esta característica, si no estoy mal, está disponible a partir de la versión 9i (y si lo estoy, que alguien me corrija... por favor).
No tengo doc para buscar, pero de memoria digo que si...

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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 01:49: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