![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Aquí estoy de nuevo. El lunes, último día para entregar mi proyecto. Está fenomenal gracias!. Bueno bueno lo unico que me queda es hacer eso de que cuando vuelco a una persona al StringGrid y la modifico desde allí, guardarla en el listbox.
Como me dijiste delphius "piensa en frio" pues eso hice. Se me ocurrió hacer esto: 1. Busco a la persona por su DNI "así me aseguro que sólamente salga 1 persona". 2. Una vez tengo a la persona (con sus datos) en la rejilla, modifico los datos. 3. Hago un button que lo que haga es borrar a esa persona1 de la lista y con los nuevos datos que hay de esa persona1 en la rejilla los vuelco a edits que luego se guardarán en el listbox. Yo creo que se puede hacer, y sería facil ya que dispongo de conocimientos para hacerlo. Sólo quiero una opinion: ¿está bien pensado?. Bueno! Luego mas tarde me pondre a ponerlo en práctica y ya cuando lo termine, me lo traeré para que lo veais que está muy chuuuloooo!!!. Saludos |
|
#2
|
||||
|
||||
|
Cita:
¿Si se puede modificar tranquilamente sin estar borrando e insertando para que hacer esos pasos? Sobre todo lo desaconsejo si utilizas Add en vez de Insert. Puesto que Add agrega al final, e Insert en la posición indicada en su parámetro y corriendo los demás elementos. Si puedes localizar el indice al que hace mención los datos de dicha persona, tranquilamente puedes modificar los datos de dicho indice en el TListBox.
Esa línea contra estas dos:
No tengo Delphi a mano, pero creo que se entiende la idea. Al volcar los datos desde el TStringGrid hacia el TListBox se sobreescriben todos los datos asociados a dicha persona. El guardado físico (en el archivo txt) no le interesa si se modificaron 1, 3, 40 datos... guardará en el orden que se encuentren en el TListBox. Si borras y agregas estarás corriendo los datos y si bien al final en el txt se guardarán como estan representados el efecto es distinto... Los datos inicialmente estaban en cierto orden, y al final... pueden que ya no conserven dicha posición. Puede ser "molesto" el correr los datos de lugar. Lo mejor sería sobreescribirlos. ¿Porqué quieres borrarlos? ¿No terminaste de comprender mi idea verdad? Saludos, |
|
#3
|
||||
|
||||
|
Cita:
nombre1 provincia1 telefono1 nombre2 provincia2 telefono2 Si yo busco a una persona (a la persona 1) y la vuelco en un stringgrid. Una vez alli, modifico su nombre1 (y pongo pepe). Luego borro nombre1, provincia1, telefono1. Y añado: pepe, provincia1, telefono1. Quedando: nombre2 provincia2 telefono2 pepe provincia1 telefono1 El orden de las personas no altera nada, siempre que los items tengan una posicion correcta por ejemplo, todos los telefonos tendran estas posiciones: 3-6-9-12... Mientras esos órdenes no se alteren... puedo hacerlo ¿o no? Grax |
|
#4
|
||||
|
||||
|
Efectivamente kbaby, los datos siguen el orden.
Pero si te fijas ahora la persona que estaba primero, queda despues de una modificación en último lugar. Y eso, puede ser molesto. Como es de práctica lo que estás haciendo no importa mucho. Pero en situaciones reales puede marear un poco. Lo que tu buscas se consigue en dos pasos, lo que yo digo se consigue en uno. Si se puede sustituir en un solo paso ¿para que hacer más de la cuenta? Te estoy preparando una demo para que veas de lo que hablo. Dame unos minutos más y te la tengo lista. Saludos, |
|
#5
|
||||
|
||||
|
Pues gracias. Al menos se que puedo preparar un codigo, por feo que sea, pero "pienso en frio" con papel :P
Jajaja. Gracias tio. |
|
#6
|
||||
|
||||
|
Bueno kbaby, he terminado el ejemplo. Espero que con el ejemplo se entienda.
El ejemplo consiste en un código que guarda y abre un archivo de texto. Puedes comprobar que funciona para uno o más datos... no importa cuandos cambios sean. Notarás que que se hacen en directo: en su posición natural. Nada de estar eliminando y agregando. Separé el código en funciones y procedimientos a propósito para tu notaras como es que se reutiliza código y además para no darte todo regalado. Estudia el código no pierdas esfuerzo en comprender que es un procedimiento y que es una función. Lo descubrirás a medida de veas código. Te explico porqué funciona. Básicamente tenemos una estructura de esta forma en el archivo: 0 - DNI 1 - NOMBRE 2 - APELLIDO 3 - CIUDAD y se va repitiendo. Bueo imagina ahora que la primera persona tiene un valor indice 0. La segunda un indice 1, y asi sucesivamente. Entonces podemos afirmar esto: Código:
Posicion en archivo | Indice o posición de la persona ----------------------------------------------------------------- 0 - DNI1 | 0 - Persona1 1 - Nombre1 | 2 - Apellido1 | 3 - Ciudad1 | ................................................................. 4 - DNI2 | 1 - Persona2 5 - Nombre2 | 6 - Apellido2 | 7 - Ciudad2 | ................................................................. ¿Que tiene en común el indice con la posición de los datos? Fácil: su división entera con 4. Hagamos cálculos: 0 div 4 = 0 ... 3 div 4 = 0 4 div 4 = 1 ... 7 div 4 = 1 8 div 4 = 2 Veamos... en posición 8, quien comienza... exacto! Una nueva persona. ¿Que hago yo? Me valgo de ese indice para tener referencia a la persona. Ese indice lo tengo que guardar en algún lado para poder recuperar los datos desde la rejilla hacia el LisBox. Yo preferí guardar ese dato, en la columna 0 de la rejilla de modo que se impida modificarlo. En las demás celdas de dicha fila se guardan sus datos. ¿Cómo se hace entonces? 1. Leer de la fila i-ésima del StringGrid la columna 0. Guardar dicho dato en una variable. Yo la llamé indice.
2. Teniendo ese índice puedo hacer el paso inverso: 2.1. Como en la columna 1 (j = 1) tenemos el DNI, entonces el DNI para dicha persona en el ListBox ocupa la posición k = (Indice x 4) Entonces hacemos:
2.2. Como en la columna 2 (j = 2) tenemos el Nombre, entonces el Nombre para dicha persona en el ListNox ocupa la posición k = (Indice x 4) + 1:
2.3. Como en la columna 3 (j = 3) tenemos el Apellido, entonces el Apellido para dicha persona en el ListBox ocupa la posición k = (Indice x 4) + 2:
En forma general se tiene que cualquier dato ocupa una posición k-ésima en el listBox en base a esta fórmula: k := (Indice x 4) + (j - 1) Siendo j la columna del dato que leemos. De forma inversa, podemos afirmar que: STringGrid1.Cells[PosDato,i] := ListBox1.Items[(Indice x 4) + (PosDato - 1)] Siendo PosDato la posición en que vienen: 1 -> DNI 2 -> Nombre 3 -> Apellido 4 -> Ciudad Nuevamente, aconsejo revisar el código que te paso. Haz lo siguiente, seleccona algún botón, por ejemplo el Botón "Buscar Todos". Haz doble click y verás esto:
¿Que es ese LimpiarRejilla? Para saber lo que hace, debes presionar Crtl y dar click en dicha línea. Notarás que mientras tengas presionada la tecla Crtl, el cursos cambiará a la forma de mano y que el código parece ser un link. Pues eso es: te "linkea" hacia el código. En este ejemplo al código de LimpiarRejilla. De igual manera puedes hacer con BuscarYVolcar, y cualquier código que veas. Y nuevamente, analiza en frio y notarás como funciona el código. Te aconsejo que primero lo compiles y pruebes el ejecutable, sin mirar código... después analiza el código. Está correctamente escrito con comentarios para que se entienda. Espero tus novedades. Saludos, |
|
#7
|
||||
|
||||
|
Bueno como aquí tenemos mucho que hablar, voy a ir botton por botton para ir diciendo que tal me parece y darte gracias.
Button abrir: ¡Que bien queda! No me imaginaba que se podía hacer eso. A mi me enseñaron el otro procedimiento para abrir un archivo y claro, utilizaré ese para mi proyecto final. Pero para mis futuros programas, el que vi que utilizaste me parece muy bueno. Es que queda profesional jajaja. Gracias. Button Guardar: ¿Yo puedo sustituir mi código entero por el que ví en tu button?
Ese código, es muy pequeño para el que tengo que poner yo para guardar. ¿En qué se diferencia cada uno? Del que uso yo, al que usas tu. Gracias. Button Volcar al TSringGrid:
¿Y ese código tan pequeño? Yo uso, como puedes ver en mi anterior subida para que veais mi proyecto... un código muy largo y que hace, exactamente lo mismo. ¿Ese código lo puedo utilizar yo o necesito tocar antes algunas opciones de algun elemento?. Me llamó la atencion lo de "LimpiarRejilla" "VolcarARejilla". ¿Delphi entiende las palabras en español?. Gracias. Button Buscar: Me parece genial el código. Pero... como... yo estuve casi una tarde pensando en otro código (powered Delphius) pues... usaré el que estuve pensando. Jajajaja. Pero gracias.Lo de los criterios de búsqueda creo que me va mal o no se usarlo. Si yo pincho en el criterio DNI y pongo Guadalupe en la búsqueda. Me sale el usuario Guadalupe y en realidad tendría que salir que no hay paciente con ese DNI. Pienso :P Y cuando pincho en Buscar Todos me salta error. Gracias. Button Volcar al TListbox: ¿Es necesario que en la columna 0 salgan los número del indice de la persona? El código lo estoy aún pensando porque "GuardarCambios" ese comando... ¿delphi lo entiende? Es un comando en español y suponía que delphi entendía solo ingles. Gracias. Delphius, tengo que ir a clase que empiezan a las 12.00 (españa). Luego me detendre para ver el Ejemplo y apuntarme codigos en mi libreta. Luego te cuento mas cossas que tengo en la punta de la lengua. Muchas Gracias -----edito--------- No me había leído lo de Pulsar CTRL para ver loq ue hace lo de LimpiarRejilla, Guardar. No respondas a esas preguntas, estoy como tu dices: "analizando el código en frio". Última edición por kbaby fecha: 07-06-2008 a las 10:35:50. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Ayuda con código. | wofox | Varios | 6 | 11-12-2007 00:16:21 |
| Ayuda con un codigo | JoNieve | C++ Builder | 0 | 21-04-2007 12:27:33 |
| Ayuda con error en codigo :-( | jorgegetafe | Varios | 6 | 07-02-2007 19:29:04 |
| Codigo de Barras.... Ayuda!!!!! | adolfoz | Varios | 14 | 15-11-2006 17:13:55 |
| Ayuda con código de barras | ramiretor | Varios | 0 | 28-06-2003 00:42:58 |
|