FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Uso del SQLUpdate
Estoy usando por primera vez un componente tUpdateSQL pero cuando trato de hacer cualquier actualización sobre la consulta me genera una excepción: "Table is Read Only".
Como hago para que las acciones de incluir, modificar y borrar se ejecuten? Estas son las sentencias SQL en FormCreate: a = tQuery y uSql = TUpdateSQL Y para su funcionamiento defino en a.onUpdateRecord: y para Incluir Modificar o Borrar Uso algo así: Al llegar a la línea a.delete se gerena el error
__________________
Sitrico |
#2
|
||||
|
||||
Ya resolví la primera parte del problema:
Hay que establecer la propiedad del TQuery
y llamar al método
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 |
#3
|
||||
|
||||
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:
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 |
#4
|
||||
|
||||
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 |
#5
|
|||
|
|||
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.? |
|
|
|