Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2008
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Smile Actualizar AdoQuery

Hola amigos....
todo el tiempo que tengo programando con delphi, pues jamas e usado ADO porque siempre use o BDE (muy poco) o componentes de Terceros (corelab)..
bien tengo una aplicacion que usa corelab en la que hay consultas que acceden a datos de dos o mas tablas por la via de Join Etc....
Dicha consulta la muestro en un form y edito en tiempo de ejecucion una columna en particular las otras son de solo lectura, pues bien esa columna en cuestion en realidad pertenece a una sola tabla de las 3 o mas enlazadas y con Los componentes corelab se usa un componente aparte (UpdateSql) que permite definir las reglas de actualizacion de la tabla en base a la consulta y campos clave, a tal fin usa un codigo como este

Código Delphi [-]
UPDATE Semestre
SET
  campo = :campo
WHERE
    Campo2 = :Old_campo2 AND
    Campo3 = :Old_Campo3 AND
    Campo4 = :Old_Campo4 AND

asi pues es de lo mas facil ya que incluso te proporciona un asistente si no quieres teclear la anterior declaracion....

Pues bien en ADO no funciona asi la cosa no existe este componente (creo que es el ado command) y mucho menos se en que punto colocar la instruccion anterior para que me actualize la columna de la tabla correspondiente de una consulta que enlaza varias tablas ......

espero haberme explicado y si tienen otra propuesta de como hacer esto pues en eso estoy porque preguntando se aprende mas rapido ......

Gracias por adelantado ....
Responder Con Cita
  #2  
Antiguo 07-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Pues me parece que es igual en ado.
Usando un adoquery:
Código Delphi [-]
Adoquery1.sql.text:= 'UPDATE Semestre SET campo = :campo'+
                     'WHERE  Campo2 = :Old_campo2 AND'+
                     'Campo3 = :Old_Campo3 AND'+
                     'Campo4 = :Old_Campo4 ';
Adoquery1.ExecSQL;
No se, digo yo.
Saludos
Responder Con Cita
  #3  
Antiguo 07-01-2008
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
No me explique bien ....

Claro Caral, la instruccion Sql es asi de simple...
el problema es donde la coloco... vuelvo con el ejemplo anterior..

con Bde colocas un componente Query que contiene la instruccion sql que te devuelve el conjunto de datos en cuestion ...este conjunto lo muestras en un grid.... y
accedes a una de sus columnas para modificarla, asi como asi te desplazas a la fila siguiente y el componente guarda lo anteriormente modificado ...

ahora bien yo no hice edit ... post ....no

solo coloque el anterior query, un componente UpdateSql que contiene la instruccion de Actualizacion anteriormente descrita por mi y por Caral con la salvedad que el QUERY contiene una propiedad que permite enlazar aL Objeto que hara el Update ... no se si se entiende por eso coloco el codigo ....


Código Delphi [-]
query1.sql.text:=('SELECT  campo1,campo2 from tabla1 INNER JOIN tabla2 On 
tabla1.id=tabla2.id INNER JOIN Tabla3 on Tabla1.id=tabla3.id');

UpdateSql1.sql.text:=('UPDATE Semestre SET campo = :campo'+
                     'WHERE  Campo2 = :Old_campo2 AND'+
                     'Campo3 = :Old_Campo3 AND'+
                     'Campo4 = :Old_Campo4 ');

// aca enlazo los componentes ....

Query1.UpdateObject:=UpdateSql1;
ahora bien que me permite esto pues no tener que estar tecleando el ExecSql ya que los objetos estan configurados ya para entender que al modificar la columna ejecuta la instruccion de Actualizacion y no tengo yo que hacer nada de codigo en ningun evento OnAfterPost ni nada por el estilo ....

pues asi se hace con Corelab y con BDE ahora bien como se hace esto con Ado ... esa es mi pregunta .....

P.D.... Tengo la impresion que la respuesta esta justo frente a mi nariz pero en mi inmenza torpeza no doy con ella

...Gracias ......
Responder Con Cita
  #4  
Antiguo 07-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ado no tinen un Updatesql, ese componente no lo trae, no se por que?.
Bueno, uso ADO y nunca he necesitado del componente updatesql, suena practico incluso IB lo trae, pero ado no.
Entiendo la sentencia sql, lo que no se es si sera mas practico o no, por lo menos a mi nunca me ha hecho falta.
Saludos
Responder Con Cita
  #5  
Antiguo 08-01-2008
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Hola Caral

Que tal ....

se que eres un usuario entusiasta asi que te propongo algo .... haz una consulta que enlace 3 o mas tablas por medio de joins ...luego coloca ese conjunto de datos resultante en un Grid, y luego intenta modificar un valor cualquiera .... seguro te saldra un error que dice ... "informacion insuficiente para actualizar o insertar registro" (o algo asi palabras mas palabras menos)

Si a ti te funciona y a mi no pues me cortare las venas o ire a meditar al tibet ..

En todo caso creeme que el componente UpdateSql es util y te permite librarte de codigo que al fin y al cabo es lo que buscamos evitar (mas codigo del estrictamente necesario)

en todo caso lo que planteo es como simular este componente (usando codigo claro) y donde poner dicho codigo para que permita la actualizacion "trasparente"

en todo caso un query que va a solo una tabla su actualizacion es directa y sin problemas pero cuando es mas de una tabla pues claro que no sabe ni que tabla ni que columna actualizar, alli entra un codigo que lo haga (un update comun y corriente) en todo caso donde poner ese codigo .....

Gracias Caral por tus Respuestas .....
Responder Con Cita
  #6  
Antiguo 08-01-2008
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
En todo caso

Si dices que nunca lo has utilizado, (el componente UpdateSql) pero que tampoco lo has necesitado entonces como haces un update sobre un query como el anteriormente descrito .....

Gracias .....
Gracias ....
Gracias ...
Gracias ..
Gracias .
Responder Con Cita
  #7  
Antiguo 08-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Kenobi

Cita:
Empezado por Kenobi Ver Mensaje
Que tal ....

se que eres un usuario entusiasta asi que te propongo algo .... haz una consulta que enlace 3 o mas tablas por medio de joins ...luego coloca ese conjunto de datos resultante en un Grid, y luego intenta modificar un valor cualquiera .... seguro te saldra un error que dice ... "informacion insuficiente para actualizar o insertar registro" (o algo asi palabras mas palabras menos)

Si a ti te funciona y a mi no pues me cortare las venas o ire a meditar al tibet ..
Creo que estas un poco equivocado con migo, no soy entusiasta SOY NOVATO, MUY NOVATO.

Muy seguramente me equivoco y me equivoco mucho, eso si, tratando de ayudar.
Lo que si puedo decir, de lo poco que he aprendido es que en delphi se puede hacer casi todo y que hay muchas maneras de matar pulgas.

Hacer una consulta con un inner Join a tres tablas, sin usar las claves principales y todavia querer actualizarla, no es muy inteligente, mas bien diria que es absurdo, recuerda, me puedo equivocar.
Hacer una consulta a diez tablas, con lo que sea y luego hacer una actualizacion de los datos segun sea necesario me parece mas viable ademas de mas claro, insisto, no me hagas caso, seguro me equivoco tambien.
En mi ventiunico programa en la parte de Facturacion, consulto 5 tablas y actualizo todo en un botoncito, como, muy sencillo, no se, seguro me salio de casualidad pero funciona.
Si le tienes tanta mania a ADO por que insistes en usarlo, sigue con BDE, no?
El Tibet en esta fecha esta muy frio, te recomiendo unas vacaciones en Jamaica, te sentaran mejor.
Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
MaxRecord de adoquery Rako Conexión con bases de datos 2 09-07-2007 15:28:24
ADOQuery silviodp Conexión con bases de datos 15 13-12-2006 17:45:34
concatenar en un adoquery crack_neon Conexión con bases de datos 2 04-05-2006 21:57:24
Duda con AdoQuery Telemaco Conexión con bases de datos 1 26-04-2004 11:27:54
AdoQuery davidgaldo Conexión con bases de datos 1 05-02-2004 20:07:29


La franja horaria es GMT +2. Ahora son las 05:37:57.


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