Cita:
Empezado por kbaby
Aqui volviii  Con dudas  bueno en realidad son solo dos dudas.
1º Duda: Como acordamos, el codigo que funciona para buscar a los usuarios por DNI es el siguiente:
Código Delphi [-]
var indice: integer;
i: integer;
begin indice := l.Items.IndexOf(Edit3.Text); if indice <> -1
then begin for i := 1 to 4 do begin;
t.Cells[i,1] := l.Items[indice];
inc(indice);
end;
end else ShowMessage('Este DNI no pertenece a ningún usuario');
Exit;
end;
Pero funciona eso porque los datos son:
0-DNI
1-NOMBRE
2-APELLIDOS
3-CIUDAD
4-DNI
5-NOMBRE
6-APELLIDOS
7-CIUDAD
Entonces, como dijiste, entre el 0 y el 3 existe una relacion. Pero y si yo lo que quiero ahora es ampliar el programa ¿y si busco por los APELLIDOS me salga en la tabla la persona con esos apellidos? Creo, que lo que hay que tocar es:
[DELHPI]
t.Cells[i,1] := l.Items[indice];
[/delphi]
Pero como ya te dije, eso de INC no lo entendi bien. Por lo visto, va aumentando de 1 en 1 ¿no? Por eso sale el item 0, luego 1, 2,3...
Entonces si yo pongo en el EDIT de la busqueda los APELLIDOS... en la tabla me salen los items 3,4,5,6.
¿Como arreglo eso?  Ya estoy indagando xD pero nada.
|
Creo que eso ya te lo había dicho. El algoritmo es simple, y he recalcado que si buscabas cualquier otro dato obtendrías otros resultados.
Cita:
Empezado por kbaby
Otra cosa es la siguiente. Yo se volcar el contenido de mi LISTBOX en una TABLA (STRINGRID). AQUI TENEIS UN EJEMPLO:
MI TABLA
----------------------------------
|dni1 |nombre1 |apellido1 |
----------------------------------
----------------------------------
|dni2 |nombre2 |apellido2 |
----------------------------------
----------------------------------
|dni3 |nombre3 |apellido3 |
----------------------------------
----------------------------------
|dni4 |nombre4 |apellido4 |
----------------------------------
Y así, con todas las personas de mi listbox. Entonces si al nombre3 (un ejemplo) le cambio el nombre y se llama pepito en vez de juan... y le doy a GUARDAR... (guardar para que se guarden los cambios)... pierdo todas las otras personas y solo se me queda la persona "3" con sus cambios. ¿Por qué? ¿Qué manera usais vosotros para hacer lo que yo intento? Lo siento por ser tan... malo... pesimo.... en mis detalles.
gracias.
|
Primeramente sería oportuno que nos indicaras de que modo estás volcando la información desde el TListBox hacia el StringGrid. Y si me explicaras mejor lo que estás buscando hacer...
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:
Empezado por kbaby
La PRIMERA DUDA la he resuelto solo!!! Siii!!! En la linea
Código Delphi [-]
indice := l.Items.IndexOf(Edit3.Text);
La modifique haciendo esto:
Código Delphi [-]
indice := (l.Items.IndexOf(Edit3.Text))-2;
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?  
|
Me alegro que vayas comprendiendo y logrando las cosas por ti mismo. ¿No es gratificante?
¿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]
Espero haberte dado una idea.
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,