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 un ClientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=55324)

ElDioni 14-04-2008 10:42:35

Insertar registro en un ClientDataSet
 
He Buscado información pero aún no he podido resolver mi problema, no se si será una tontería pero me llave de cabeza, espero me puedan ayudar. Gracias por adelantado.
Uso delphi 2005 con bbdd access.
Tengo una tabla de direcciones a la cual accedo con adoquery al que le conecto un datasetprovider y a éste un clientdataset que tiene enganchado un datasource que esta ligado a un dbgrid, bien, cuando modifico e inserto un registro lo hago en un formulario aparte y luego vuelvo al del dbgrid, el caso es que borro un registro y funciona, modifico un registro y funciona, pero cuando inserto una direccion nueva me muestra esa direccion y la de todos los clientes restantes, quiero decir, toda la información de la tabla direcciones en lugar del único registro que acabo de introducir.
Si alguien me puede explicar un poco como se insertan registros en un clientdataset se lo agradecería. Estoy algo atascado. Gracias.

kuan-yiu 14-04-2008 11:33:07

Pero también te muestra la nueva, ¿no? Si es así no parece un problema de inserción, sino de refresco.

ElDioni 14-04-2008 12:04:20

Gracias por tu rapidez en contestar.
La nueva efectivamente me la muestra más todos los registros o si he visto antes otro cliente, me muestra la nueva direccion que he metido y la del último cliente que he visto, o sea me muestra la nueva dirección más lo que contenía la última consulta del adoquery.
He intentado, antes de introducir la fecha, hacer una consulta en el query del que cuelga el clientdataset para filtrar solo el código de cliente que se está dando de alta en ese momento. pero al insertarlo en el clientdataset entonces no aparece ninguno.
Seguiré probando a ver si al final se comporta como quiero. Si mientras tanto alguien me puede echar una mano.

ElDioni 14-04-2008 12:18:57

Vale, he conseguido poder dar de alta una dirección y que solo se me muestre ésta haciendo un filtro por el código de cliente, pero claro, tengo que tener de antemano este código, pero cuando el código lo genero al darle al botón de guardar despues de introducir todos los datos, que debería hacer para que solo me saliese la dirección para ese cliente nuevo que aún no tiene código. y si consigo introducir las direcciones como se haría más tarde al applyupdate del clientdataset.
De nuevo gracias por su tiempo

kuan-yiu 14-04-2008 13:24:35

Creo que no te estoy entendiento.
¿Que muestras normalmente? ¿Todos los clientes? ¿El último? ¿Cambias lo que muestra según en el grid según el modo de trabajo (búsqueda, borrado, inserción)?...

ElDioni 15-04-2008 13:52:38

Hola Kuan, normalmente se muestra un listado de todos los clientes y desde ese listado puedes dar de alta, modificar, ver, etc..., cuando modifico o veo la información de un cliente, con el query, hago un filtro de este cliente en la tabla de direcciones por lo que si despues doy de alta un cliente nuevo, al añadir una direccion, me muestra la dirección nueva y la del cliente que había filtrado anteriormente, y si doy de alta un nuevo cliente nada más abrir el programa, como no tenía ningún filtro hecho en la tabla de direcciones, me saca la que doy de alta nueva y todas las direcciones que hay ya introducidas.

kuan-yiu 15-04-2008 16:30:11

Vale, creo que ya sé lo que pasa, y me parece que todo el problema está en la forma de presentar los datos, no en los procesos de alta/baja.

Tu filtro va por el identificador de la tabla de clientes y todo el problema está ahí: que no puedes mostrar el cliente hasta después de finalizar completamente la inserción, o simplemente que es un dato que no tienes en el formulario.
Asegúrate que refrescas el grid despues de finalizar la inserción y posiciónate en la última tupla (siempre puedes buscar el identificador más alto en caso de que uses un campo incremental).
Si es un dato que se genera en la inserción propiamente dicha y no se tiene en el formulario debes aplicar el método que uses para las búsquedas justo a continuación de la inserción.

ElDioni 22-04-2008 17:54:21

Muchas gracias kuan-yiu por tu tiempo, siento haber tardado tanto en contestar, pero es que he estado probando el código, al final lo estaba haciendo mal porque mantenía el ultimo filtro que había hecho y al dar de alta un cliente nuevo me sumaba todos los registros del ultimo filtro hecho más los que habia añadido. Lo he podido resolver, de todas formas muchas gracias.

kuan-yiu 22-04-2008 18:21:10

Me alegro de que lo hayas solucionado :)
Poca cosa he hecho, de todos modos de nada.


La franja horaria es GMT +2. Ahora son las 13:43:18.

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