![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Bueno, yo he leido los dos post y pienso que entiendes como si yo no hiciera eso. Claro que lo hago, pero llega un momento que lo que yo he aprendido me pone una barrera que no me deja acceder a otras cosas. Yo solo puedo hacer cosas limitadas. Eso sí, nos dejaron indagar en libros, internet, foros, para aprender cosas nuevas e implantarlas en el proyecto final. Por eso estoy aquí, preguntando cosas de las que NUNCA he odio hablar.
Con respecto a la estetica... fue un programa que hice en 10 o 15 minutos rapidamente para que veas como lo tengo organizado en el aula de informatica... pero allí uso 3 formularios, imagenes, paneles.... En mi casa lo que hago es pensar en un codigo para luego, ponerlo allí, pues solo tengo 1 hora de informatica y alli no puedo pensarlo. En mi casa lo pienso y lo pruebo y me lo apunto en mi libreta de delphi. Yo pienso que hago todo lo posible por aprender, no he llegado al extremo de imaginarme esas cosas que me dijiste el final, pero si a dibujarlo e intentar solucionar las cosas "dificiles" con procedimientos faciles... Lo de "t" a la <rejilla> y lo de l al <listbox> tienen ese nombre porque así me enseño mi profesor. Nos dijo que para ser mas rapidos, usaramos variables cortas y facil de recordar... en ningun momento lo eleji yo. Hoy estuve en informatica, ya me queda muy poco por acabar. Os cuento de lo que hace mi proyecto ^^ - Añade a personas (al listbox) - Las modifica (aunque al modificar una, se borra todas del .txt). - Puedes bucar a personas por DNI, apellidos, telefono (gracias Delphius). - Puedes ver el estado del hotel (% de habitaciones ocupado, gente dentro...) - Mi super boton close; (para salir :P) ¿Qué me queda? - Arreglar lo de modificar a las personas y que se guarde. - Poder buscar y ver en el StrinGrid1 (lo dije bien ehh) todas las personas que sus apellidos sean MARTINEZ LOPEZ y no solo, la primera. Eso es todo. Espero que no pienses que soy un vago que lo quiere todo hecho. Me he leido la caraocultadedelphi, el libro que me compre en la feria del libro por 1€ (si ese), he consultado en personas que saben (sin encontrar ayuda por parte de ellas), he venido al foro y entré, desde el primer miomento que di programacion. Yo tengo aun la idea en mi mente de poder ser informatico, alomejor programando no valgo (cosa que no me preocupa, intentare conseguir la meta) pero dentro de la informatica hay muchisimos campos. Gracias. PD: Lo de apellidos compuesto ya se porque me tiro error, por el error de "dedo". Gracias Última edición por kbaby fecha: 30-05-2008 a las 17:48:49. |
|
#2
|
||||
|
||||
|
Pues aquí, desde el último post, estaba indagando un codigo para borrar del LISTBOX a una persona que tengo volcada en un StringGrid. Pues el código que se me ocurrio fue este:
Pero el problema es el siguiente si mi listbox es: 0-dni 1-nombre 2-apellidos 3-telefono 4-(y asi, sucesivamente). Lo que hara es borrar el dni y entonces "nombre" pasara a la posicion "0" y así todos bajan una. Por lo siguiente, al repetir el FOR, borrará a+1 "posicion 2" ... el telefono de la persona... Bueno voy a seguir intentando sacar codigo (te estoy haciendo caso, con papel y lapiz). --------------------Minutos despues.......--------------------------- Aquí estoy, se me iluminó la bombilla y... tachán! Mirad que código mas sencillo para borrar a una persona (dni,nombre,apellido,ciudad) sin borrar las otras.
Última edición por kbaby fecha: 30-05-2008 a las 17:59:03. |
|
#3
|
||||||
|
||||||
|
Cita:
Con respecto a lo que te había comentado antes, si te lo digo es porque al intentar explicarte el uso de inc() tu mismo dijiste que no puedes poner nada que no haya sido visto. Y si no puedo estar seguro de que has visto o no haz visto... ¿de que modo te puedo ser de ayuda? Ahora, si estás aqui con la finalidad de ver cosas nuevas y mejorar el código. Entonces, aquel comentario que mi hiciste sobre de que no puedes poner nada visto está de más y tus preguntas debieron hacerse de otro modo para que nosotros si te pudieramos ofrecer alternativas. Por el modo en que redactabas tus dudas se vee reflejado el deseo de "apagar un incendio" y no de ver buscar alternativas. Si para el trabajo final puedes poner otras cosas y sustituir algunos códigos te sugeriría que te evitaras ese código para abrir y guardar en el archivo. Es mucho más cómodo el método LoadFromFile y SaveToFile del cual disponen tanto el TStringGrid como como el TListBox y te aseguras de que lo está "escrito" en pantalla se guardará. También podría ser útil el uso de funciones y procedimientos. Mucho código del cual empleas puede concentrarse en unas pocas funciones y/o procedimientos y con ello evitar repitir código. En ocasiones tener un:
Es mucho más conveniente que estar implementando en varios controles el mismo o similar código. En este ejemplo, BuscarPaciente es una función que recibe en el primer parámetro el texto a buscar, el segundo parámetro es una constante definida y sirve para establecer el criterio de búsqueda. Si Se diseña un algoritmo que busque por cualquier criterio, puede usarse en distintas partes y sin ningún cambio, sólo basta con suministrar el criterio adecuado. El algoritmo que te yo te di como ejemplo puede fácilmente ser adaptado a esta necesidad con unos pocos cambios. [quote=kbaby;290150] Con respecto a la estetica... fue un programa que hice en 10 o 15 minutos rapidamente para que veas como lo tengo organizado en el aula de informatica... pero allí uso 3 formularios, imagenes, paneles.... En mi casa lo que hago es pensar en un codigo para luego, ponerlo allí, pues solo tengo 1 hora de informatica y alli no puedo pensarlo. En mi casa lo pienso y lo pruebo y me lo apunto en mi libreta de delphi. [/delphi] El comentario que te hice sobre estética no fue con la intención de atacar. Sino un comentario que debe ser tomado con ligereza. Si lees bien, he dicho: "pero ese no es el problema". Y no lo es porque yo pongo atención a la lógica y no a la pantalla... Yo dejo la interfaz para el último, y si tengo que ir haciendola, la hago burdamente. Sólo lo hice para recordarte de que al final debes mejorarla. El problema de la gran mayoría de los sistemas es de lógica y no de interfaz. Por eso a mi poco me importa como se vea... fue un simple recordatorio para cuando termines. Cita:
Yo no me creo genio, ni un experto. Esta profesión, como cualquier otra requiere de constancia. Y las cosas no salen de un día a otro. De hecho, hay un algoritmo que yo todavía lo tengo trabado (pero gracias a Dios, no es vital) y el compañero Seoane me lo dió vueltas en una patada. Hay cosas que nos salen, otras que no. Y con el tiempo comprenderás que lo que cuesta ahora en un futuro lo verás como (perdón por la palabra) una estupidez. Yo te he recalcado algo: analizalo en frio. Y es así porque he notado que en el momento en que posteabas te quedabas esperando a que posteara. Y ni bien yo posteaba no pasaban muchos minutos y ya había un post tuyo diciendo que tenías problemas para entender mis propuestas. Algunas veces las soluciones no se hallan en minutos ni en días. Aprenderás esta lección cuando estés estudiando en la universidad y/o salgas a la calle. No desesperes, porque es lo último que debes perder. Cita:
kbaby, los extremos son peligrosos: Muchas son muchas, pocas son pocas. ¿Te gusta leer esto?:
¿Y esto otro?:
En el primero tenemos un caso en que hay demasiado información. En el segundo en el que hay poca. Mientras que el primer caso se sobre entiende que se trata de un Combo, en el segundo, No sabemos que es a, y el porqué existe lo que pareciera ser una Propiedad llamada Expr que vaya a saber que hace. Lamento decirlo pero tu profesor tiene razón parcialmente. Cita:
Creo que te he dado buenas pistas. ¿Las repasamos desde tu punto de vista como la entiendes? Yo entiendo el problema... hace falta que aquí comprendamos tu visión de la propuesta. Te propongo que redactes lo que entiendes de mi propuesta. Para el caso de la búsqueda de todos los pacientes con determinado apellido, el algoritmo que tienes en volcar te debe ser de orientación. De hecho haste esta pregunta ¿Que diferencia existe entre volcar toda la información de un TListBox de volcar sólo la que coincide con cierto criterio? Una pista más: Por "cada item" hacer: 1. ¿Es igual a criterio?. 1.1. SI: entonces agreamos sus datos a la rejilla 1.2. NO: entonces no hacemos nada. Lo de guardar los datos es la inversa de volcar. Pasar lo que haya en el TStringGrid hacia el TListBox. He aquí que para hacerlo debemos contemplar una situación que ya he explicado y me gustaría "oir" que es lo que entiendes y no entiendes de mi propuesta. ¿Cómo te lo estabas imaginando? Cita:
Es bueno que leas libros, son de ayuda. Pero en los libros es posible que no encuentres la receta para preparar el algoritmo para buscar más de un paciente. Esto, lamentablemente, se aprende por ensayo y error. Yo me vivo dando golpes con código kbaby... por algo he dicho y sigo sosteniendo: es una actividad mental, muy humana. Y al ser humanos, nos vemos movidos por miles de cosas. Me alegro que sientas la convicción y ganas de estudiar sobre informática. No digo que seas mal programador. Nunca he dicho eso... Sólo te digo estas cosas para que te prepares, mentalmente, para cuando tengas dificultades. No es agradable darse golpes... hay que aprender a vivir con ellos. Y no sólo en la vida profesional, sino en lo personal, en lo anímico, en lo sentimental, en lo existencial. Muy cierto que la informática es amplia, y como te había comentado por MP: debes informarte y asesorarte bien sobre que del amplio abanico de posibilidades deseas enfocarte. Yo no prefiero darte código kbaby... y me parece que es la decisión adecuada. Porque es necesario que logres ver donde está el problema... el porque te cuesta hallar el paso inverso (StringGrid a TListBox). Creeme que es lo mejor para ti, porque no sólo te sentirás mejor por encontrar tu mismo hecho el algoritmo sino porque comprenderás al problema y lograrás formular una solución. Y creeme que te digo que la solución está en tus narices. Cuando la encuentres dirás, posiblemente algo como esto: "Pero que g... que soy. Si había sido una tontera". ¿Que diferencia a un TListBox de un TStringGrid? Pues yo veo a un TStringGrid como una varios TListBox horizontales, uno debajo del otro. ListBox1: [0][1][2][3][4] ListBox2: [0][1][2][3][4] .... ListBoxN: [0][1][2][3][4] Puede que eso te sirva de ayuda. Cita:
Puede que esa metida de dedo sea por impaciencia... Hazme caso... redacta la comprensión que tienes de mis propuestas y vemos ¿Si? No te sientas atacado. Si asi te has sentido, lo lamento, disculpa. Lo que quiero es hacerte ver que esto es mucho más mental que lo que algunos piensan. Y si deseas irte por las ingenierías, con más razón. Yo diría que repases por las dudas un poco de matemática, física y química. ¿Porqué crees que en los primeros años de la carrera verás más números que a la PC? ¿Sólo para hacer a las carreras más duras? ¿Porque son relleno? Cada materia tiene su propósito, no sólo forma parte de la cultura general. kbaby, te deseo que tengas triunfos en la carrera. No cometas el mismo error que yo: no desesperes por unas cuantas LDC (lineas de código). Saludos, Última edición por Delphius fecha: 30-05-2008 a las 19:38:27. Razón: modificar etiqueta quote mal colocada |
|
#4
|
||||
|
||||
|
Antetodo... vaya pedazo de texto... tienes que escribir muy rápido jaja. Bueno vamos al grano.
Lo de que me ves impaciente es por el tiempo que tengo. Estamos en exámenes finales en España porque es final de curso. El proyecto queda una semana y me siento agobiado por el tiempo y por todo lo que me gustaría ponerle y nose. Con respecto a que no puedo usar nada de lo que no me hayan enseñado... es hasta un punto cierto. Yo puedo llevar un algoritmo "un cacho codigo, como yo lo llamo" a clase y exponerlo pero el profesor me preguntará... y bien... ¿por qué pusiste lo de inc(indice)? Al no saber la respuesta, el profesor puede que piense este chico no ha hecho el proyecto, se lo han hecho. Y no quiero que piense eso, para nada. Yo pido ayuda, pido información y comprension. Para poderle decir que:
es lo mismo que
pero de una manera mas "correcta" creo yo. Una cosa que me gustaría preguntar del código que tengo para buscar es que significa la línea:
Exactamente, ¿qué es eso de <> - 1? Sí tiene que comprobar que coincida... ese número qué hace ahí?. Con respecto a lo de usar variables largas o cortas, seguiré tu consejo para mi proyecto. Lo intentaré cambiar, jaja. Referente a lo de volcar al StrinGrid y volcar del StrinGrid al Listbox, sé cuales la diferencia, pero no se cómo. Yo me imaginaba un código que sea algo así:
Yo me acuerdo de haber utilizado el comando eof(f) pero para el botón de "recuperar" de mi listbox. Con respecto a lo de utilizar otras formas de cargar/guardar cosas en el listbox estoy con mis orejas abiertas (más bien ojos) para escuchar lo que me expliques, mientras pueda explicarlo yo, puedo usarlo. Cita:
Espero que esto te sirva de ayuda para ayudarme o intentar que yo piense ![]() Saludos,gracias. |
|
#5
|
|||||||
|
|||||||
|
Cita:
El truco está en usar la mayor candidad de dedos posibles, aunque,yo utilizo solamente entre 4 y 6 de los dedos cuanto mucho.Cita:
Cita:
Inc() es una función. Y lo que hace es sumar a la variable que pases como parámetro cierta cantidad. Pero inc() tiene una particularidad, el segundo parámetro que recibe (la cantidad) puede ser omitido. ¿Que significa omitido? Que si no se pasa algún valor asume uno por defecto. Este valor por defecto es 1. Inc entonces se resume a esto:
De modo que si pones Obtienes lo mismo que hacer
O igual a:
Si pones 2, en vez de sumarle 1, suma 2. ¿Se entiende? Si te fijas. En una ocasión no paso el segundo parámetro, pero en los otros si. Si deseo que el incremento sea distinto a 5, entonces debo suministrar el segundo parámetro. Cita:
Los métodos de busqueda, por lo general devuelven un índice o una referencia sobre la posición que tienen en la lista. Y la mayoría de estas listas comienzan a contar desde cero. Si lees la ayuda sobre IndexOf() y/o otros métodos de busqueda notarás que se devuelve el valor -1 en caso de no encontrarse el elemento. Por ello una vez buscado, se hace dicha comprobación para tomar las acciones necesarias en caso haberse encontrado y/o no encontrado. Cita:
Cita:
Este caso de búsqueda es un tanto peculiar. Puesto los métodos de búsqueda devuelven la primera coincidencia. Necesitamos que se recorra la lista. Eso lo sabemos... ¿Cómo? Tu comprendes que el orden de los datos en la lista tiende a "repetirse" cada 4 lugares. Independientemente de cual seal el campo buscado (DNI, Nombre, Apellido, Ciudad), debemos hacer "saltos" de 4 en 4. para ir hacia la información correspondiente de una persona a otra. Si nos basamos en ello podemos hacer un algoritmo que haga lo siguiente: Supongamos que buscamos por apellido. El primer apellido a localizar está en la posición 2. Si icrementamos 2 en 4, nos ponemos en el apellido de la segunda persona ¿No es cierto? ¿Me sigues? Entonces, por cada salto, comparamos si en dicha posición el contenido del listBox es igual al buscado. Si es igual entonces sabemos que dos posiciones antes (si buscamos por apellido) encontraremos el DNI. Una posición antes, el nombre, la que le sigue corresponde a ciudad. Por tanto, esos datos son agregados. ¿Cuando termina el algoritmo? Cuando la variable que usamos para ir saltanto por los indices es mayor a la cantidad de elementos del ListBox. Dentro de ese texto que te he redactado. Esta el algoritmo. Ve si tu lo descubres. Sino volvemos. Ahora, ¿cual es el probema cuando volcamos estos datos? Que cuando lo hacemos no sabemos si al final nos referimos a los datos de la primera persona (cuyos datos ocupan los 4 primeros lugares en el TListBox), de la segunda (cuyos datos ocupan los siguientes 4), o de la vigesima... ¿Porqué? Porque en ningún momento de la búsqueda guardamos en algún lugar que esta persona es la primera, es la segunda, la que sea... ¿Cómo lo planteo yo? Fácil: Cuando encontramos una coincidencia en el algoritmo anteriormente descripto, lo primero que guardo (en la primera columna del StringGrid) es dicha posición o índice. Por ejemplo, si encontré una condicencia en la posición 6. Guardo en la primera columna ese 6. Los demás datos van en las siguientes columnas. Bueno... ese el volcado. Ahora, el paso inverso. Lo primero que hago, es leer la primera columna. Encuentro el 6. Entonces, si el criterio de búsqueda fue por apellido, se que los demás datos de esta fila corresponden a los datos que se ubican en las posiciones 4, 5, 6 y 7. ¿De donde obtuve esos números? Fácil: Si el 6 el dato correspondiente al apellido, entonces se que el DNI está dos lugares antes ( 6 - 2). El nombre está un lugar antes: ( 6 - 1), El apellido entonces está en 6. Y la ciudad en la siguiente posición ( 6 + 1). Solo me queda hacer: ListBox1.Items[4] := StringGrid1.Cells[2,1]. ... ListBox1.Items[7] := StringGrid1.Cells[5,1]. ¿Porqué desde 2? Recuerda que en la primera, estabamos guardando indice del apellido asociado a dicha persona. ¿Que hago ahora? Me desplazo a la segunda fila y repito el proceso: Leo lo que que hay en la primera columna, y veo.... digamos que es 14. Si hacemos cuenta... se que esta es la tercera persona de la lista. Cuyo datos abarcan la posiciones 12, 13, 14 y 15. Por tanto... me queda que: ListBox1.Items[12] := StringGrid1.Cells[2,2]; ... ListBox1.Items[15] := StringGrid1.Cells[5,2]; Nota la diferencia... si bien en el StringGrid, estamos en la segunda fila... sabemos que en el ListBox esta es la tercera persona. ¿Cuando finaliza el algoritmo? Cuando se ha lkegado al final del StringGrid. Entonces, de esta manera, consigues sólo traspasar los datos de aquellas personas que estén en el StringGrid hacia el ListBox. En realidad no interesa si sólo modificó una vocal, todos los campos... si antes decia Pepe, y no se modificó se sobrescribe con Pepe. Y si ahora dice Ana, va a decir Ana. ¿Cúal es el requisito fundalmental de todo esto? Que no se llame al método Clear del TListBox. Porque eso borra todo, y por tanto se pierden referencia a los datos. Allí tienes una falla. Tu algoritmo de guardar debe recorrer los elementos del ListBox e ir guardandolos. Creo que eso no te resultará un problema. No lo llames a menos que se trate de abrir otros datos. Y si lo haces debes asegurarte de "limpiar" lo que tengas en el STringGrid porque se tratan de datos nuevos. Cita:
Eso es todo por el momento. Saludos, |
|
#6
|
||||
|
||||
|
Vale Delphius aquí estuve pensando pero creo que con tus palabras ya me das todo "machacado" aunque yo sea duro y no me entere. He hecho un nuevo código para que busque el DNI de la persona y lo pase a la tabla. Sólo busca a una persona, a la primera, pero no importa, lo que quiero hacer es que funcione el código hecho por mi. Aquí te lo pongo y me dices si tienes erratas, porque se me ejecuta el programa, pincho en el boton y ... "no hace nada
".---> CORRECCIÓN: Ya si me funciona y me busca a la persona !!! Bien !!! el fallo estaba en el signo > del while que antes puse < jaja.
Ya tengo un boton de BUSCAR creado por mi jojojo gracias tio.Última edición por kbaby fecha: 30-05-2008 a las 22:44:26. |
|
#7
|
||||
|
||||
|
Kbaby, vas entiendo.... el error está en que salto debe recibir inialmente el valor igual a la posición - 1 del campo a buscar. Es decir que:
Si estamos buscando Apellido, Salto debe valer incialmente 2. Si estamos buscando Nombre, Salto debe valor inicialmente 1. Si estamos buscando DNI, Salto debe valer inicialmente 0. Si estamos buscando Ciudad, Salto debe valor inicialmente 3. Recuerda que StrinGrid comienza en cero por ello: [0] -> DNI [1] -> Nombre ... [3] -> Ciudad el inc(salto,4) debe hacerse fuera del IF. Ten presente que por más que encuentre, o no... debe seguir recorriendo la lista. Otro problema, estás sobreescribiendo la primera fila. Necesitas de otra variable, que se incremente en 1 sólo cuando haya una coincidencia, de modo que con Cells[salto +- ?,otra_variable] se consiga ir iterando fila a fila en cada condidencia. Creo que con esto ya lo tienes. Ya te lo di bastante regalado. EDITO: Otra cosa que veo, es que como dije antes, además de esos campos necesigas guardar el valor de salto para tener referencia e implementar el algoritmo de volcado inverso (desde el STringGrid hacia el TListBox). Saludos, Última edición por Delphius fecha: 30-05-2008 a las 22:48:11. |
|
#8
|
||||
|
||||
|
Fin del problema (no del hilo).
Aquí tengo el codigo made in kbaby para buscar a todos los que tienen el mismo DNI (o lo que sea).
Funciona de maravilla jajaja. He añadido al código un contador el de t.rowcount porque conforme encuentre a una persona la mesa en la tabla y aumente una fila. Ahora lo siguiente que voy a hacer, es una vez volcado en la tabla (una persona o dos o las que sean) si la modifico, guardarla y que no se borren las otras. YeahhH!!!! Última edición por kbaby fecha: 30-05-2008 a las 23:14:28. Razón: El código fallaba porque el inc estaba en lugar equivocado, gracias Delphius. |
![]() |
| 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 |
|