Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-12-2009
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
Extraño comportamiento de ADO

Hola Amigos, estoy desarrollando una aplicación en delphi que se conecta con una bd de access via ADO y estoy notando un comportamiento bastante extraño, previamente les mostraré el código que estoy utilizando y luego les describo lo que estoy observando:
Código Delphi [-]
          for I := 0 to Length(Colab)-1 do
          begin
            with cmdActDatos do
            begin
              cadSQL:='INSERT INTO tb_maeColabor (nroId, codCarpe, codAbog) VALUES (' + IntToStr(GenerarID(13)) + ',' + IntToStr(PnroRs) + ', ' + IntToStr(Colab[i]) + ')';
              CommandText:=cadSQL;
              Execute;
//              Sleep(300);
            end;
          end;

el código de arriba lo que hace es enviar un insert a la bd, tengo un procedimiento GenerarID que lo que hace es generar números de id secuenciales, utilizo este procedimiento y no los campos autonuméricos de access porque así esta implementado el sistema y debo continuar con esta estrategia de desarrollo, el tema es que, si envio mas de un insert, el procedimiento generarid, a veces, me devuelve el mismo número, como si en el ciclo anterior del for no hubiese grabado el id. Para comprobar esto, puse un sleep(300) y ahí si funciona, la pregunta sería, ¿existe alguna forma de asegurarse que Access grabe efectivamente el registro, esto dentro de procedimiento GenerarID, para asegurarse que no devuelva un id duplicado?
Si no existe alguna instrucción tipo flush (la ví en algún otro lenguaje), que baje a disco lo que esté en buffer, tendré que dejar el sleep(300) para que funcione.

Gracias por la atención y saludos.
Responder Con Cita
  #2  
Antiguo 12-12-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
no existe flush, pero si refresh o update, que hace exactamente eso. De todas maneras, ten en cuenta que si GeneraId no relee de la base de datos para encontrar el numero, tendra en buffer los registros anteriores, sin el nuevo insertado. Saludos.
Responder Con Cita
  #3  
Antiguo 12-12-2009
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
Gracias por la respuesta, estas ordenes que me comentas, ¿donde están?, ¿son parte de ado? como verás, en el código que pasé de ejemplo, estoy usando un objeto command y no encuentro aqui las ordenes sugeridas.

Te pido disculpas por la insistencia y nuevamente te agradezco tu atención.
Responder Con Cita
  #4  
Antiguo 12-12-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
no lo recuerdo bien, pero creo que todos los descendientes de TCustomDataset tienen el metodo Refresh y Update (TADOQuery, TADOTable, etc...). No conozco el objeto command que comentas, tendras que mirar si desciende de TCommandDataSet, que probablemente lo sea pues parece un query. Si no es asi, no sabria decirte prueba de mirar los metodos propios de la clase. Un saludo.

PD: en el caso que descienda de TCustomDataSet pero tenga el update o el refresh protegido, puedes usar el truco de 'hackear' la clase

Código Delphi [-]

type THKCustomDataSet = class(TCustomDataSet)
...
  THKCustomDataSet(cmdActDatos).Refresh;

espero que te sirva de ayuda. Un saludo.
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
Comportamiento extraño del TPageControl Chris OOP 4 02-04-2009 21:16:09
Comportamiento extraño en StringList MaMu Varios 7 19-06-2007 19:07:07
Un comportamiento extraño en delphi... uper Varios 1 07-08-2004 00:44:14
Comportamiento extraño de Delphi walrus Varios 3 05-08-2004 10:04:32
Comportamiento extraño dataModule brandolin OOP 9 08-07-2004 14:25:47


La franja horaria es GMT +2. Ahora son las 23:11:09.


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