• Viernes 8 de Noviembre de 2024, 16:01

Autor Tema:  Inserciones Con Adoquery  (Leído 2475 veces)

Marjinhos

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Inserciones Con Adoquery
« en: Miércoles 23 de Agosto de 2006, 15:49 »
0
La duda:

Utilizo un componente ADOQuery para realizar una inserción de un registro en una tabla (Microsoft Access) a través de sentencia SQL.
Antes de realizar esa inserción realizo a través de un ADODataSet (con una select del sql) la comprobación de que no exista ya un registro en la base de datos que pueda dar duplicados.
El problema está en el tiempo que le lleva realizar la inserción en la BD. Si acabo de realizar una inserción e intento realizar la misma inmediatamente, la comprobación no salta y me da error de duplicados.

¿Cómo podría solventar el problema?

Muchas gracias de antemano

juanlaplata

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Inserciones Con Adoquery
« Respuesta #1 en: Jueves 24 de Agosto de 2006, 15:20 »
0
Para verificacion de un Campo
if not(Tabla.Locate('Campo1',Edit1.text,[loCaseInsensitive, loPartialKey]))then
      begin
      Tabla.Append;
      TablaCampo1.AsString:= Edit1.Text;

  // Agrega Info en todos los campos que sean requeridos

      Tabla.Post;
      ......

Para verificacion de varios Campos al mismo Tiempo    
if not(Tabla.Locate('Campo1;Campo2;Campo3',VarArrayOf([Edit1.text,Edit2.text,Edit3.text]),[loCaseInsensitive, loPartialKey]))then
      begin
      Tabla.Append;
      TablaCampo1.AsString:= Edit1.Text;
      TablaCampo2.AsString:= Edit2.Text;
      TablaCampo3.AsString:= Edit3.Text;

  // Agrega Info en todos los campos que sean requeridos

      Tabla.Post;
      ......

despues del Post Tienes que cerrar y abrir el dataset consultado para reflejar los cambios.
Para Usar esta Instruccion "Locate" debes tener en la parte Uses DB
Espero te sirva, es como yo lo hago.Saludos y suerte.

Marjinhos

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Inserciones Con Adoquery
« Respuesta #2 en: Viernes 25 de Agosto de 2006, 08:43 »
0
Muchas gracias Juanlaplata.

Me ha funcionado perfectamente tu solución.

No llevo mucho tiempo programando en Delphi, pero ante cualquier duda, si puedo ayudarte, no tendré problema en aconsejarte.

Marjinhos

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Inserciones Con Adoquery
« Respuesta #3 en: Viernes 25 de Agosto de 2006, 09:01 »
0
Hola de nuevo juanlaplata.

Perdona que te moleste de nuevo. Quería aprovechar para plantearte una nueva duda.

En el momento de crear el paquete de insatalación de mi aplicación (con mi base de datos Access), ¿que debería hacer con el fichero 'mdb'?.

Ahora mismo la conexión la realizo por código a través de un archivo de enlace 'udl', donde se define donde se encuentra el fichero 'mdb'. Tengo que incluir el mdb en el instalador y copiarlo en alguna carpeta del usuario cliente (junto con el udl)?, existe otra forma?.

Y por último, en el caso de que se copie el fichero mdb, como se bloquea para que no se modifique directamente.

Tal vez estoy abusando demasiado de tu generosidad. Si tienes alguna respuesta perfecto, y sino tambien perfecto.

Gracias

juanlaplata

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Inserciones Con Adoquery
« Respuesta #4 en: Viernes 25 de Agosto de 2006, 15:21 »
0
Sin duda que el .mdb tiene que ir en el paquete. Por que en la maq. destino puede o no tener access (como para crear una base nueva), pero aun asi no tendra la estructura predefinida por nosotros.
En cuanto a la coneccion, no esta mal lo que haces, ya que es muy amplio en el sentido de que si el usuario cambia de lugar la base se la puede informar al "udl" de este cambio y no deja de func. la  aplicacion, ya que pudiendo hacer la connecion directamente en tiempo de diseño puede traer esa complicacion que describo mas arriba. Pero se le puede buscar la vuelta, de conectar en tiempo de diseño y codificar el cambio de destino de la base, (siempre que puedas editar el "'udl" que es quien sabe donde esta la base).
En cuanto al bloqueo lo que podrias hacer es desde access ponerle al "mdb" contraseña, y se la indicas al momento de "Database.Open" en el comienzo de la Aplicacion. o tal ves menos efectiva le pones como propiedad oculta antes de incluirla en el paquete y que la copie asi en la maq. destino.
No he echo mucho de esto, de impedir el ingreso , asi que si encuentras alguna otra solucion me la cometas Si?
Saludos y suerte.