Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-06-2005
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 24
sitrico Va por buen camino
Ya resolví la primera parte del problema:

Hay que establecer la propiedad del TQuery

Código Delphi [-]
q.CachedUpdates := True;

y llamar al método

Código Delphi [-]
q.ApplyUpdates;

Para que se guarden los cambios.

Ahora la pregunta es:

¿ como puedo asignar los parametros del UpdateSQL ?

ya que al intentar aplicarlos al query me produce el error de parametro no encontrado y no encuentro ninguna otra forma de accesar a los parámetros
__________________
Sitrico
Responder Con Cita
  #2  
Antiguo 29-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Primero que nada yo (punto de vista personal) evito usar hasta donde me es posible la componente UpdateSQL. Es para mí una de las cosas mas oscuras de la VCL.

A juzgar por la consulta SELECT que pones, no necesitas esta componente; basta que pongas la propiedad RequestLive del Query en true.

Ahora bien, los parámetros en las sentencias INSERT, UPDATE y DELETE de un UpdateSQL se llenan en automático, para lo cual es necesario que correspondan a nombres de columnas seleccionadas. Como en tu consulta SELECT usas alias (por una razón que no entiendo) entonces las sentencias del UpdateSQL imagino que deberían usar estos alias.

Por otro lado, en las sentencias UPDATE y DELETE, las cláusulas WHERE deberían usar los parámetros especiales OLD, por ejemplo:

Código SQL [-]
where
  IdComp = :OLD_IdComp and IdAsiento = :OLD_IdAsiento

Cuando se ejecuta el ApplyUpdates, estos parámetros especiales se sustituyen por los valores originales que había en el Query. Esto es lo que permite al UpdateSQL identificar al registro que debe actualizarse o borrarse.

Si realmente requieres el uso de esta componente te recomiendo que leas la ayuda de Delphi donde viene explicado. No digo bien explicado porque como dije, a mi juicio es de lo que peor explicado está en la ayuda. Aún así te servirá para tener una mejor idea de cómo usar la componente.

La ayuda menciona también que la componente tiene una propiedad Query, disponible sólamente por código, con la cual puedes sustituir manualmente los parámetros. Jamás la he usado y espero no tener nunca que hacerlo pero aparentemente sirve para esos casos en los que los nombres de los parámetros no coinciden con los nombres originales de los campos.

// Saludos
Responder Con Cita
  #3  
Antiguo 30-06-2005
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 24
sitrico Va por buen camino
Bueno Roman, primero gracias, lo que estaba buscando era justo la propiedad Query del UpdateSQL para poder asignar MIS parametros a mano.

Pero tienes razón, el UpdateSQL es un objeto bastante "oscuro" y el funcionamiento no es muy predecible cuando la consulta difiere de

Select * from tabla

En fin. Cree un Query (QAct) normalito y 3 TStringList (Cada uno con las instrucciones para el Insert, Modify y Delete).

En el evento onUpdateRecord del Query de consulta (QAsi), asigno el TStringList correspondiente al UpdateKind pongo los parametros, lanzo ExecSQL y LISTO

Pues no, las actualizaciones se quedan en cache y al refrescar la Tabla regresa al estado original.

Si ejecuto un ApplyUpdates me genera la excepción 'Table is Read Only' aunque si guarda los cambios.

Tendrás alguna idea de lo que está pasando.
__________________
Sitrico
Responder Con Cita
  #4  
Antiguo 13-01-2007
gama_blind gama_blind is offline
Registrado
 
Registrado: ene 2007
Posts: 8
Poder: 0
gama_blind Va por buen camino
disculpa en que evento invoco
updateSQL1.Apply(ukModify);

QUERY.ApplyUpdates;

suponiendo que inserte datos en un DBGrid y quiero que se apliquen los cambios en
la base de datos.?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 18:50:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi