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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-02-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 05-02-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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.
Responder Con Cita
  #3  
Antiguo 05-02-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
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);
Responder Con Cita
  #4  
Antiguo 05-02-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por richy08 Ver Mensaje
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?
Responder Con Cita
  #5  
Antiguo 05-02-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
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 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

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

Última edición por richy08 fecha: 05-02-2013 a las 20:55:44.
Responder Con Cita
  #6  
Antiguo 06-02-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por richy08 Ver Mensaje
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 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

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 ??
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Conexión a BD Sqlite a través de DbExpress jocaro Conexión con bases de datos 1 16-11-2011 17:52:17
Como insertar y Guardar registro en MySql con Delphi of PHP kurono Varios 2 23-10-2010 01:18:47
Como insertar y Guardar registro en MySql con Delphi of PHP kurono Varios 0 21-08-2010 04:49:12
Insertar DBExpress en un EXE Jordy Conexión con bases de datos 2 04-09-2004 18:32:19
Error al insertar con dbexpress mosorio Conexión con bases de datos 5 15-09-2003 15:18:22


La franja horaria es GMT +2. Ahora son las 19:57:13.


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