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)
-   -   Ultima Linea del DbGrid (https://www.clubdelphi.com/foros/showthread.php?t=69902)

Er0s 16-09-2010 20:17:34

Ultima Linea del DbGrid
 
Hola a todos de nuevo!!



Esto es lo que me ocurre cuando intento meter un cliente nuevo. El codigo que utilizo es el siguiente:

En el botón Nuevo:

Código Delphi [-]
datamodule1.clientes.last;
datamodule1.clientes.insert;

Y en este momento me pongo a rellenar DBedits. Utilizo el .INSERT antes de rellenar dbedits porque me los deja limpios. Si utilizo el .INSERT después de rellenar dbedits (en el botón aceptar) la funcion .Clear de los DBedits me los limpia pero en cuanto pico encima de cualquier dbedit, con el ratón, estos se llenan con los datos del ultimo cliente.

Lo que quiero es que cuando yo le de al botón "nuevo", la linea que en la foto se pone entre el último y el penúltimo registro, sea posterior al ultimo registro.

No se si me he explicado.

Gracias

Caral 16-09-2010 20:20:30

Hola
Tal vez:
Código Delphi [-]
datamodule1.clientes.append;
Saludos

Er0s 16-09-2010 20:26:54

Con que simplicidad y precisión explicáis las cosas........ que envidia.

Ahora el problema es que cuando me pongo a rellenar DBedits reaparecen los datos del ultimo cliente

Caral 16-09-2010 20:39:52

Hola
No se como llamas a la tabla.
Que usas: Table o query??
Esta ligado el DBGrid con los DBEdit??
Al Insertar haces un refresh??
Saludos

Casimiro Notevi 16-09-2010 20:47:32

Cita:

Empezado por Er0s (Mensaje 376658)
[..] Ahora el problema es que cuando me pongo a rellenar DBedits reaparecen los datos del ultimo cliente

¿Cómo es eso? :confused:

Por cierto, el datamodule1.clientes.last; sobra, no sirve para nada.

Er0s 16-09-2010 20:49:25

Utilizo una TADOTable y un datasource. El DataSource, a su vez,esta ligado a la DBGrid y a los DBedits.

Con el .append para realizar una insercción debo hacer lo siguiente.

- Nuevo cliente. Los DBedits aparecen todos limpios.
- Pico con el raton para empezar a rellenar datos y me aparecen los datos del ultimo cliente insertado.
- Cancelo
- Nuevo cliente de nuevo y ahora si funciona.

Es decir que para insertar un cliente, ahora mismo, debo presionar tres botones NUEVO CLIENTE,CANCELAR y NUEVO CLIENTE otra vez

Eso si el problema de la linea blanca entre dos registros se ha solucionado.

Er0s 16-09-2010 20:53:12

Cita:

Empezado por Casimiro Notevi (Mensaje 376660)
¿Cómo es eso? :confused:

Por cierto, el datamodule1.clientes.last; sobra, no sirve para nada.


si no ponia el .Last la linea blanca aparecia entre el cliente que en ese momento estubiese señalado y el anterior y por eso pense en la funcion LAST a ver si me solucionaba el problema

Caral 16-09-2010 20:55:17

Hola
Bien:
BD access?
Saludos

Er0s 16-09-2010 20:56:31

Cita:

Empezado por Caral (Mensaje 376664)
Hola
Bien:
BD access?
Saludos

Si BD de access

Caral 16-09-2010 20:59:51

Hola
Bien:
El programa y la bd son grandes?.
Si no son muy grandes quilate el EXE, pon el codigo y la BD en un ZIP y colocalo aqui, lo reviso con gusto, me sera mas facil dar con el asunto.
Saludos
PD: Lo unico que no me gusta es que usas componentes de tercero para los botones.

Er0s 16-09-2010 21:05:34

Todo comprimido no llegará a los 3 megas.

Advierto que el programa no esta optimizado y repito muchas instrucciones en lugar de hacer un procedimiento para no repetir tanto. (Lo dejo para cuando termine con los clientes y tenga todo claro)

Bueno cuando llegue a casa lo cuelgo y a ver que me decís.

Caral 16-09-2010 21:07:55

Hola
Bien; Cuando tengas tiempo lo pones.
Me extraña que sea tan grande, debes haber trabajado mucho.
Saludos

Caral 16-09-2010 22:18:17

Hola
Como tengo algo de tiempo me hice un ejemplo usando AdoTable y AdoQuery en master detail, para mi es la mejor manera de hacerlo ya que es SQL.
El ejemplo hace lo que se requiere:
Modifica, Elimina, Agrega, Guarda.
Como veo que en tu caso el cliente tiene un codigo me imagino que este deberá de ser unico, por eso el programita cuando agrega un nuevo cliente de una vez le da el numero que le corresponde asi se evitan duplicados.
Ademas se conecta por un ini, no se si el tuyo lo hara pero es mejor.
Espero te sirva de algo el ejemplo.
Saludos

Er0s 17-09-2010 00:18:29

Na... las imágenes es lo que mas pesa.

Ahi te dejo el programa.... no me metas mucha caña :P

http://www.megaupload.com/?d=OPREQMXN

Er0s 17-09-2010 01:14:43

Acabo de echar un cigarro en la terraza, pensando en el dichoso problemita.

Tenia que pulsar como he dicho antes el botón nuevo , cancelar y nuevo otra vez. Pues acabo de solucionar el problema

Código Delphi [-]
datamodule1.clientes.append;
datamodule1.clientes.append;

Es absurdo, raro, sin logica...... pero funciona. Ahora ya puedo insertar un cliente al final del DBGrid y sin que los DBEdits se llenen con los datos del ultimo cliente insertado.


Caral no te quemes la cabeza...seguro que en las próximas tablas todo rula sin estos absurdos.


Gracias

Casimiro Notevi 17-09-2010 01:33:20

Cita:

Empezado por Er0s (Mensaje 376684)
[..] Tenia que pulsar como he dicho antes el botón nuevo , cancelar y nuevo otra vez. Pues acabo de solucionar el problema
Código Delphi [-]
datamodule1.clientes.append;
datamodule1.clientes.append;
Es absurdo, raro, sin logica...... pero funciona. Ahora ya puedo insertar un cliente al final del DBGrid y sin que los DBEdits se llenen con los datos del ultimo cliente insertado.
Caral no te quemes la cabeza...seguro que en las próximas tablas todo rula sin estos absurdos.
Gracias

Amigo Er0s, aunque parezca absurdo y raro... seguro que sí tiene lógica si se encuentra el problema, ten en cuenta que estos errores son los que después en cualquier momento te vuelven loco porque el programa deja de funcionar y no sabes el motivo. Hay que encontrar el problema... sí ó sí, además que seguro que es algo simple, ya verás.
Es como si le dices a tu mecánico: "déjalo, no te quemes las pestañas, si frena a la segunda, pues le doy dos veces y se acabó. El problema es que hay un problema... y en cualquier momento dejará de frenar a la segunda y no frenará ;)

Er0s 17-09-2010 02:11:11

Por supuesto..que el problema hay que solucionarlo, pero para enseñar mañana el programita a mi colega, me vale de momento.

Gracias por vuestra ayuda y seguimos buscando el problema.

Caral 17-09-2010 04:42:05

Hola
Correcciones que hice:
1- Se creo un archivo INI para hacer la conexion (si tienes dudas, pregunta).
2- Se elimino la necesidad de las imagenes (se usaron los botones).
3- Se eliminaron los codigos innecesarios (muchos).
4- Se modifico los nombres de los campos( es importante).
5- El Campo ClienteID hay que cambiarlo de autoincremetal a numerico (no esta hecho todavía)
Por lo demas es un programa en proceso asi que es poco lo que se puede hacer.
Todo quedo funcionando igual que estaba, solo que ahora se entiende mejor.
Espero te sirva para mejorar tu codigo que para ser de un Aprendiz esta muy bien.
Saludos
PD: Mira la diferencia en el peso del programa, con todo e imagenes.;)

Casimiro Notevi 17-09-2010 10:09:01

Cita:

Empezado por Caral (Mensaje 376690)
[..] PD: Mira la diferencia en el peso del programa, con todo e imagenes.;)

Eso me hace falta a mí, ponerme a dieta, que me sobran un montón de kilos :)

Er0s 17-09-2010 11:45:26

Cita:

Empezado por Caral (Mensaje 376690)
Hola
Correcciones que hice:
1- Se creo un archivo INI para hacer la conexion (si tienes dudas, pregunta).
2- Se elimino la necesidad de las imagenes (se usaron los botones).
3- Se eliminaron los codigos innecesarios (muchos).
4- Se modifico los nombres de los campos( es importante).
5- El Campo ClienteID hay que cambiarlo de autoincremetal a numerico (no esta hecho todavía)

1- Ya habia visto eso lo del archivo ini por en el foro y todavía no lo habia aplicado, ya preguntare cuando me ponga a ello.
2- Las imagenes son necesarias, puesto que la posibilidad de meterlas en speedbuttons hace que tenga que transformar PNG o JPG a BMP y pierdo las transparencias .... por lo cual es mucho mas vistoso, a mi modo de ver.
3- Soy un desastre... pero al final lo coloco todo :D
4- Porque el cambio de nombres? cual es tu razón.
5- El campo ClienteId lo dejo Autoincremental puesto que dejare que el programa autoasigne la ID al cliente.... La única duda que me cabe aquí es la siguiente:
- Digamos que tenemos 10 Clientes. Si elimino el cliente 5 y el 7 me quedaran 8 clientes pero las IDS ya no serán seguidas. Eso se soluciona compactando la base de datos, lo que no se es como hacerlo desde el programa. Ya planteare la duda en otro hilo y lo discutimos.

Por lo demás he probado lo que has mandado y al compilar me da un montón de errores que he solucionado, casi todos en las llamadas a las imágenes y lo del INI no rula, ya miraremos porque. Introducir Clientes tampoco :S, debe ser de delphi 2006 a 2010, cualquier pijada, porque no pongo en duda tu sabiduria en el tema.

Gracias por haberte tomado la molestia de corregir mis errores


La franja horaria es GMT +2. Ahora son las 10:35:46.

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