Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Modificacion de una BD Access con un TQuery

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Modificacion de una BD Access con un TQuery Responder citando

Hola foro:

Tengo una BD Access sobre la que realizo una consulta con un TQuery, en el recupero de una tabla ARTICULOS los campos de ID_ARTICULO, ARTICULO y AUTOR y los muestro en un DBGRID.

Hasta aquí bien, pero ahora introduzco un TUpdateSQL con las siguientes instrucciones SQL:
a) Borrado
DELETE FROM Articulo
WHERE Articulo.ID_Articulo = :OLD_ID_Articulo

b) Inserción
INSERT INTO Articulo (ID_Articulo, Articulo, Autor)
VALUES (:ID_Articulo, :Articulo, :Autor)

c) Modificación
UPDATE Articulo
SET Articulo.Articulo = :Articulo, Autor = :Autor
WHERE Articulo.ID_Articulo = :OLD_ID_Articulo

Luego ajusto las propiedades del TQuery CachedUpdate y UpdateObject para que se puedan ejecutar las modificaciones en local y enlazar con el objeto UpdateSQL.

Inserto un botón de Actualizar Datos que contiene el siguiente código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
try {
Query1->ApplyUpdates(); //Aplicamos los cambios
Query1->Refresh(); // actualizamos la vista

} catch (...) {
ShowMessage("No es posible actualizar");
}
Query1->CommitUpdates (); //Limpiamos los cambios locales
}

Lo ejecuto y funciona, me deja modificar en local los datos que hagan falta sin ningún problema y cuando actualizo me salta el siguiente error al ejecutar el Refresh(): EDBEngineError with message 'Table does not support this operation because it is not uniquely indexed'. Process stopped ...

Sin embargo si comento la línea del refresh me lo hace bien, me lo actualiza en la BD. ¿para que sirve el refresh()? ¿Se puede uitlizar con bases de datos SQL y en particular con las de Access? Lo he copiado de un libro y no tengo claro que es lo que hace, pero lo he probado y cuando NO comento la línea del Refresh () me salta el error anterior.

NOTA: Para terminar una pequeña cuestión que me ronda en la cabeza desde que empecé. ¿Es mejor utilizar ADO o BDE? Yo tengo la BD en Access y por lo poco que he tratado con el BDE creo que no lo soporta muy bien, creo que está mas orientado a dbase y paradox.

Gracias, aunque sólo sea por aguantar hasta esta línea.
Volver arriba
Mensaje    Asunto: Responder citando

En cuanto a tu segunda pregunta te digo que ADO fue desarrollado por Microsofot y sus herramientas son las más adecuadas para tratar bases de datos Access y Microsoft SQLServer, aunque también permite tratar con otros SGBD.

En cuanto a tu problema, no he revisado el código, pero espero que no estés modificando los índices de las tablas ya que eso puede ser lo que te provoque el problema.
_________________
Iré a cualquier sitio siempre y cuando sea hacia delante.
Livingstone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En cuanto a tu segunda pregunta te digo que ADO fue desarrollado por Microsofot y sus herramientas son las más adecuadas para tratar bases de datos Access y Microsoft SQLServer, aunque también permite tratar con otros SGBD.

En cuanto a tu problema, no he revisado el código, pero espero que no estés modificando los índices de las tablas ya que eso puede ser lo que te provoque el problema.
_________________
Iré a cualquier sitio siempre y cuando sea hacia delante.
Livingstone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.