![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
La PRIMERA DUDA la he resuelto solo!!! Siii!!! En la linea
La modifique haciendo esto:
Con este cambio, en la variable indice, metera el item que yo pongo en el edit pero bajandolo dos casillas (por el -2). Siguiente duda: ¿Y si ahora hay dos personas con los mismo apellidos... hermanos? Solo me sale la primera... ¿alguna manera? ![]() ![]() |
|
#2
|
||||
|
||||
|
Cita:
Cita:
El problema kbaby es que tu estás empleando un método para guardar y leer archivos un tanto incompatible con los controles que estás usando. Habiendo la posibilidad de emplear SaveToFile y LoadFromFile tanto para ListBox como para StringGrid el trabajo se hace más fácil. Pero si es como dices, que no puedes emplear nada fuera de lo que viste ¿De que sirve que te indiquemos de que manera lo hacemos, si es mucho más probable de que sea algo complejo y/o algo que no has visto ni tienes en tus apuntes? A lo que voy, es que si te estás basando en tus apuntes, poco puedo imaginarme el modo de hacerte más fácil los ejemplos. No se que tienes en tus apuntes, y eso me condiciona mucho. Y es posible que también lo sea para otros foristas. Cita:
![]() ¿A que te refieres? ¿A que si buscas en el ListBox, a los Martinez (un ejemplo) te liste a todos los martinez? Hay manera de hacerlo... y puede que se me ocurra una, y vuelvo al tema que comenté antes... existe la posibilidad de que lo haga de un modo al que para ti resulte chinesco. Si pudiera conocer hasta que punto es compatible las opciones que te ofrecemos con los contenidos que tu estás estudiando sería más fácil. El mayor problema, es el TListBox. y la manera en que estás guardando los datos. Una opción sería guardar los datos separados y delimitados por comas o algún otro caracter... y emplear las propiedades CommaText, DelimiterChar, DelimiterText, pertenecientes a Items. Pero es posible que esto sea el chinesco que a ti no te agradaría. kbaby, lamentablemente para ayudarte del mejor modo es conociendo lo que sabes, y haz estado estudiando. Lamento decirtelo, pero no se me ocurre, por el momento, un modo de demostrarte una solución de más bajo nivel como para el que tu comprendieras. El método (algoritmo) más sencillo que se me está ocurriendo es algo similar a este: 1. Iniciar una variable i al valor 2. La usaremos para ir recorriendo lal ListBox. 2. Mientras i sea menor a la cantidad de elementos hacer: 2.1. Si el item i-ésimo es igual al valor buscado 2.1.1. incrementamos una variable j. Sera usada para ir agregando las filas a la "tabla". Inicialmente debe valer cero. 2.1.2. agregamos a la fila j-ésima: 2.2.2.1. en la primera columna el DNI. Cuya posición es igual a i - 2. 2.2.2.2. en la segunda columna el Nombre. Cuya posición es igual a i - 1. 2.2.2.3. en la tercera columna el Apellido. Cuya posición es igual a i. 2.2.2.4. en la cuarta columna la ciudad. Cuya posición es igual a i + 1. 2.2. incrementar a la variable i en 4. ¿Porqué lo redacté así? Para que descubras que lo que necesitas es dominar el arte de lógica, en vez de buscarle un sentido en el uso de propiedades y métodos. Además lo hago con la finalidad de que lo pienses tu, y le encuentres solución. El algoritmo que te pasé lo que hace es ir dando saltos de 4 en 4 sobre los items del TListBox. Si en dicha posición el contenido del ListBox es igual al buscado suceden las siguientes cosas: 1. incrementa una variable j. Es decir j = j + 1. 2. agrega en la posición [1,j] lo almacenado en el listbox, posición i - 2. 3. agrega en la posición [2,j] lo almacenado en el listbox, posicion i - 1. etc... Es decir que en cada ocurrencia, agrega los items que corresponde a dichos datos. Recuerda que SIEMPRE que se mantenga el orden: DNI NOMBRE APELLIDO CIUDAD el algoritmo podrá encontrar la información. Ten presente que el StringGrid guarda sus datos del siguiente modo: Código:
[1,1][2,1][3,1][4,1][5,1] [1,2][2,2]... ... [1,N][2,N] Disculpa que he haya extendido, pero no veo otro modo de demostrarte lo limitado que estamos para ayudarte si te proponemos alternativas que posiblemente tu no comprendas y que no estén en tus apuntes. Saludos, Última edición por Delphius fecha: 28-05-2008 a las 20:24:26. |
|
#3
|
||||
|
||||
|
Bueno yo voy a intentar darte mas información de lo que hago. Para guardar utilizo este código:
Y cuando abro el programa, para "cargar" el listbox utilizo esto:
1). En la tabla NO vuelco todo el contenido, solo la persona que se apellida Martinez Perez. Pero el caso es si hay dos personas con Martinez Perez. Como poner a los dos?. 2) Y la otra duda es, una vez volcada a Pepe Martinez Perez, si le tengo que cambiar algun dato, por ejemplo su nombre (cosa que hago desde la tabla, una vez volcado cuando lo busque...) pues le doy y borro su nombre y escribo ahora Jose. Le doy a guardar y se borra TODOS LOS ITEMS del listbox, menos la "persona" con sus 4 datos (DNI,NOMBRE,APELLIDOS,CIUDAD). El código que utilizo para borrar lo que hay en la tabla y que se guarde es este: l.items.clear; edit1.text:=t.cells[1,1]; edit2.text:=t.cells[2,1]; edit4.text:=t.cells[3,1]; edit5.text:=t.cells[4,1]; button1.click; ¿Que pasa? Pues que borra toda la lista y añade a esa persona con sus cuatro datos, pero las otras las pierdo. ¿Alguna otra forma? gracias. Última edición por kbaby fecha: 28-05-2008 a las 20:57:48. Razón: informacion |
|
#4
|
||||
|
||||
|
Bueno, con respecto a buscar los martinez y mostrarlos te he propuesto una solución. ¿Porqué no la traduces a código? Sería un buen ejercicio para ti.
Con respecto al tema de porque borra el contenido del TListBox es simplemente porque al principio de todo invocas al método Clear. No debes llamar al método Clear. Sino que debes realizar el paso inverso al algoritmo que te he pasado: Analizemos la situación: Antes ibamos saltando por los items de 4 en 4 y volcando la información. De este modo de cumplía lo siguiente. Si buscamos por el apellido, El DNI siempre está en la posición i - 2. El Nombre siempre está en la posición i - 1 El Apellido siempre está en la posición i La Ciudad siempre está en la posición i + 1 Por tanto, lo que hacíamos era agregar estos datos en el StringGrid del siguiente modo: Celda[1,j] = La info de i - 2 Celda[2,j] = la info de i - 1 Celda[3,j] = la info de i Celda[4,j] = la info de i + 1 A la inversa tenemos: La info de i - 2 = Celda[1,y] La info de i - 1 = Celda[2,y] La info de i = Celda[3,y] La info de i + 1 = Celda[4,y] ¿Se entiende? No debes hacer Clear, sino sustituir un dado de una celda por el de la posición en un índice:
¿Porque y? y no i? El problema es que cuando agregamos desde el ListBox hacia el StringGrid perdemos referencia a la posición i-esima del campo Apellido de dicha persona. Lo más fácil es, que al agregar la información al StringGrid guardemos dicha posición para asi poder hacer el paso inverso. Tal vez, algo como esto: Indice - DNI - Nombre - Apellido - Ciudad De modo que en [1,j] tenemos la posición i-ésima del campo Apellido de los datos de la persona j-esima en el StringGrid. En [2,j] su DNI. En [3,j] su Nombre. Y así sucesivamente. ¿Que significa ese j? Pues la fila. De modo que si j es 1, nos referimos la persona que ocupa la fila 1 en el StringGrid. Ojo: no confundir a ese j con la posición i en el ListBox. Cuando j vale 2, nos estamos refiriendo a la persona que ocupa la fila 2. Por ejemplo, si en [1,1] tenemos el valor 6 quiere decir que en el ListBox, la información del apellido para dicha perona está en 6. Hacemos que i sea 6. Por tanto: 1. El DNI está en i - 2. Es decir, 6 - 2 = 4. Item[4] = Celda[2,1]. 2. El Nombre está en i - 1. Es decir, 6 - 1 = 5. Item[5] = Celda[3,1] 3. El Apellido está en i. Es decir, 6. Item[6] = Celda[4,1] 4. La Ciudad está en i + 1. Es decir, 6 + 1 = 7. Item[7] = Celda[5,1] Cuando en [1,2] tenemos el valor 14, entonces: DNI: 14 - 2 = 12. Item[12] = Celda[2,2] Nombre: 14 - 1 = 13. Item[13] = Celda[3,2] Apellido: 14. Item[14] = Celda[4,2] Ciudad: 14 + 1 = 15. Item[15] = Celda[5,2] ¿Se entiende? Tendrás que modificar un poco tus códigos pero se consigue tener referencia a que persona estramos cambiando la información. kbaby, te he dicho que esto se trata de lógica. No pienses en código... deja que el código salga del análisis de la situación y de un planteo del problema. Saludos, |
|
#5
|
||||
|
||||
|
Una cosa que he notado es que el boton que tengo de "buscar" cuando en el edit pones una palabra con espacio en mi ejemplo: apellido1_apellido2 salta error. ¿por que?
|
|
#6
|
||||
|
||||
|
Cita:
Lo siento, pero si no aprendes a aportar verdaderamente la información que nos ayude a ayudarte no podemos seguir. La paciencia tiene cierto límite. Yo he estado siendo paciente... pero ha sido dificil sacarte la información para que te pueda asesorar. Cuando uno dice me sale error, ¿que puede ser?... Menos ganas de ayudar me dan. Tu ya conoces como funciona esto... el que aporta detalles recibe soluciones y alternativas, el que no tiene dos opciones: 1. lamentarse 2. Ceder parte de su tiempo en explicar acabadamente su situación Me parece fabuloso que estés dandole a esto de programación. Es admirable porque muchos cuando lo intentan y ven que las cosas no les va se tiran abajo... Tu no te tiras abajo, nos tiras abajo. Posteo y inmediatamente posteas. Analiza primero en frio lo que te he dicho y luego adaptalo a tus necesidades. Por hoy, lo dejamos. Vuelve en frio, y yo tambien. Saludos, |
|
#7
|
||||
|
||||
|
Lo siento por no saber expresarme, pero aquí esta todo. He montado el programa en un pispas puesto que no lo tengo en mi casa sino en el instituto. Así que aqui tienes mas o menos "mi proyecto" que en el instituto esta mucho mejor hecho.
http://rapidshare.com/files/11838241...ATICA.rar.html Bajalo de ahí, y veras el problema al buscar algun item que contenga espacio y el problema al modificar una persona que esta en la tabla. Gracias, más no se que poder ofrecerte. Llevo toda la tarde, toda, toda pero no piyo nada ni lo saco por logica. Eso del I,J no lo comprendi bien, o eso creo. Voy a volver a leerlo. Última edición por kbaby fecha: 28-05-2008 a las 21:58:41. |
|
#8
|
||||
|
||||
Voy a comentarte. Segun ese codigo quiere decir que en el Item de posicion I (no se sabe, es una variable) se va a cambiar por la cadena que hay en la celda [x,y]. Pero ahora viene mi cuestion... siento ser tan pesado pero tengo muy poco tiempo y experiencia y por eso acudo aqui, a pedir ayuda y porque veo que es un sitio util ¿Cómo sabe el programa que vale I? Cuando yo pulse el button que le asigne el codigo, el no sabe que ITEM es... ni que CELDA he modificado. ... Eso es mi problema. Gracias. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Ayuda con código. | wofox | Varios | 6 | 11-12-2007 01:16:21 |
| Ayuda con un codigo | JoNieve | C++ Builder | 0 | 21-04-2007 13:27:33 |
| Ayuda con error en codigo :-( | jorgegetafe | Varios | 6 | 07-02-2007 20:29:04 |
| Codigo de Barras.... Ayuda!!!!! | adolfoz | Varios | 14 | 15-11-2006 18:13:55 |
| Ayuda con código de barras | ramiretor | Varios | 0 | 28-06-2003 01:42:58 |
|