Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   insertar registro en Delphi xe3 dbexpress y sqlite (https://www.clubdelphi.com/foros/showthread.php?t=82178)

richy08 05-02-2013 16:58:19

insertar registro en Delphi xe3 dbexpress y sqlite
 
Buenos dias compañeros tengo una duda que no logro resolver, resulta que estoy tratando de hacer una aplicacion con sqlite, tengo la siguiente configuracion en los componentes:

Tsqlconnection->Tsqldataset->tdatasetprovider->Tclientdataset->tdatasource

tengo conectado varios tdbedit y un tdbgrid al tdatasource, lo cual si muestra los datos, pongo en modo de inserccion de esta manera

Código Delphi [-]
      ClientDataSet1.Close;
      ClientDataSet1.Open;
      ClientDataSet1.Insert;
      ClientDataSet1.active:= true;
      Controles(2);
      Botones(2);
      Btb_Nuevo.Enabled:=false;
      SelectNext(ActiveControl,true,true);

y en el grid aparece el registro como agregado, pero creo que a la hora de grabar en la bd me hace falta alguna sentencia ya que el cambio no se refelja en la bd con el post

Código Delphi [-]
      ClientDataSet1.Post;

alguna idea de lo que pudiera estar pasando, gracias de antemano

Al González 05-02-2013 17:43:57

Recuerda que los ClientDataSets mantienen los registros en memoria y para enviar todos los cambios (altas, bajas, modificaciones) a la base de datos hace falta llamar a su método ApplyUpdates:
Código Delphi [-]
ClientDataSet1.ApplyUpdates (0);

Por cierto, "Active := True" es lo mismo que "Open" (con la llamada a Open basta para abrirlo).

Saludos. :)

richy08 05-02-2013 19:15:55

Cita:

Empezado por Al González (Mensaje 454556)
Recuerda que los ClientDataSets mantienen los registros en memoria y para enviar todos los cambios (altas, bajas, modificaciones) a la base de datos hace falta llamar a su método ApplyUpdates: Código Delphi [-]ClientDataSet1.ApplyUpdates (0);


Por cierto, "Active := True" es lo mismo que "Open" (con la llamada a Open basta para abrirlo).

Saludos. :)


gracias por la respuesta, pero sigue sin grabar, segun la ayuda hace falta llamar otro metodo del datasetprovider, pero al usar este codigo sigo obteniendo que no inserta

Código Delphi [-]

 error:=0;

     Clientdataset1.ApplyUpdates(error);

     DataSetProvider1.ApplyUpdates(ClientDataSet1.Delta,-1,error);

Al González 05-02-2013 19:30:49

Cita:

Empezado por richy08 (Mensaje 454559)
gracias por la respuesta, pero sigue sin grabar, segun la ayuda hace falta llamar otro metodo del datasetprovider [...]

Eso no es verdad, seguramente interpretaste mal algo de la ayuda de Delphi. ¿Podrías citar lo que leíste ahí? :)

También toma en cuenta que el conjunto de datos cliente no enviará al proveedor registros que realmente no signifiquen un cambio (nuevos vacíos, o sin modificaciones).

Para salir de dudas, puedes verificar el valor de la propiedad ChangeCount justo antes de hacer el ApplyUpdates. Si ChangeCount es 0, significa que no hubo nada que se haya capturado y por tanto no enviará nada a la base de datos.

También es recomendable que el proveedor lo tengas con su propiedad ResolveToDataSet en False.

Y, una pregunta más, ¿qué consulta SQL tienes en el TSQLDataSet?

richy08 05-02-2013 19:36:58

Cita:

Empezado por Al González (Mensaje 454562)
Eso no es verdad, seguramente interpretaste mal algo de la ayuda de Delphi. ¿Podrías citar lo que leíste ahí? :)

También toma en cuenta que el conjunto de datos cliente no enviará al proveedor registros que realmente no signifiquen un cambio (nuevos vacíos, o sin modificaciones).

Para salir de dudas, puedes verificar el valor de la propiedad ChangeCount justo antes de hacer el ApplyUpdates. Si ChangeCount es 0, significa que no hubo nada que se haya capturado y por tanto no enviará nada a la base de datos.

También es recomendable que el proveedor lo tengas con su propiedad ResolveToDataSet en False.

Y, una pregunta más, ¿qué consulta SQL tienes en el TSQLDataSet?


hola al gionzalez, tienes tu boca llena de razon, lo que me hacia falta era poner esta propiedad a false, ResolveToDataSet en False . ahora ya graba :D pero me surge unda duda tengo un campo auntoincremental, pero creo que el sqlite lo inserta hasta que se guarda el registro es eso correcto??

mil gracias por tu ayuda :D

por cierto por el momento no ejecuto ningun comando sql, lo tengo ligado a una tabla, pero me supongi que el sql que deberia llevar es como en las versiones de delphi 7 , la famosa consulta vacia

select * from tablas where 1=0

saludos

richy08 05-02-2013 23:37:54

Cita:

Empezado por richy08 (Mensaje 454563)
hola al gionzalez, tienes tu boca llena de razon, lo que me hacia falta era poner esta propiedad a false, ResolveToDataSet en False . ahora ya graba :D pero me surge unda duda tengo un campo auntoincremental, pero creo que el sqlite lo inserta hasta que se guarda el registro es eso correcto??

mil gracias por tu ayuda :D

por cierto por el momento no ejecuto ningun comando sql, lo tengo ligado a una tabla, pero me supongi que el sql que deberia llevar es como en las versiones de delphi 7 , la famosa consulta vacia

select * from tablas where 1=0

saludos


uffs creo que no funciona, marca error en los tipos de datos, alguna idea ?? :(


La franja horaria es GMT +2. Ahora son las 19:38: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