FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Base TXT de Datos
¿Cómo encarar la siguiente mínima Base de Datos de Alumnos, datos recuperados de un archivo TXT?
Quiero evitarme dependencias de Base de Datos, SQL, etc, ya que el objetivo es recuperar y mostrar solamente Datos y notas de Alumnos desde un archivo TXT, pues los mismos no rebasan de una cantidad de 100 elementos, y estos Datos no serán modificados, ni renombrados, ni agregados, ni nada por el estilo, SON FIJOS de una Gestión pasada. La idea es la siguiente: ID...Apellido.....Nombre....Curso....Nota1.....Nota2....Nota3 01....Álvarez........David........1ro........43...........55........90 02....Oropeza.......Jorge........4to........67...........36........80 03....Camacho......Pedro........2do.......33...........75........20 04....Álvarez........Andrés.......1ro.......58...........65........40 05....Miranda........María........3ro........80...........22........30 06....Pérez...........Henry........4to.......77...........59........90 07....Campero......Joanna.......2do.......34...........96........50 08....Ruiz.............Lucy.........1ro........43...........60........70 ........ 100.....etc., etc. Pensaba, recuperarlo en Delphi con: No sé si estoy encarando bien esta parte o existe otro mejor camino, pues para 100 datos no vale la pena como dije depender de una Base de Datos. ¿Que opinan al respecto? Mis preguntas: 1- ¿Cómo mostrar en un TListBox un FILTRO de "Curso", donde solo me muestren los "ID"?, es decir por ejemplo para mostrar los ID de "1ro", el resultado en el TLIstBox debería ser: 01 04 08 2- Que si selecciono por ejemplo en el TListBox "01" en 3 TEdits que tengo en el Form me muestre de "01" sus valores= Nota1 (TEdit1), Nota2 (TEdit2), Nota3 (TEdit3) 3- Y lo más complicado (me parece) mostrar los "ID" en el TListBox con el FILTRO de "Curso" pero que obedezcan a una ORDENACIÓN de "Nombre". El resultado debería ser: 04 01 08 Disculpen si es demasiado sencillo la pregunta, o tal vez me digan mejor si es con SQL (no me concozco bien) pero me estoy haciendo un bollo con los algoritmos y funciones. Agradeceré vuestra ayuda. Un Saludo Última edición por Deiv fecha: 12-01-2007 a las 16:20:16. |
#2
|
||||
|
||||
Te recomiendo que utilices ADO para acceder al fichero de texto; Utilizandolo puedes trabajar con ficheros de texto con Columnas de ancho fijo y columnas delimitadas.
Para mí la ventaja de hacerlo así es que accederás al fichero como si fuera una Base de Datos; Eso te facilitará algunas operaciones e incluso podrás utilizar componentes de B.D. Para Columnas de Ancho fijo puedes utilizar esta ConectionString: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;Extended Properties="text;HDR=Yes;FMT=Fixed"; Para las delimitadas esta: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;Extended Properties="text;HDR=Yes;FMT=Delimited";
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
He intentado con la sugerencia del ADO, y no puedo recuperar mi Tabla TXT, no estoy bueno con componentes de Base de Datos espero comprendan; he colocado 2 componentes en mi formulario TADOConnection y TADOTable; en la propiedad ConnectionString del TADOConnection he puesto como se dijo (cambiando obviamente: c:\txtFilesFolder\) y en TADOTable en la propiedad Connection selecciono ADOConnection1, en la propiedad TableName me aparecen varios archivos de la elijo MiTabla#TXT (eso de # no sé si está bien), le doy doble click a TADOTable y la tabla está vacía. He tomado como ejemplo el siguiente TXT:
Producto,Cantidad,Precio Sierra eléctrica,1,250 Machete,5,2.70 Detergente,1,10 Delantal,2,7.25 Afilador,3,5 ¿Que estoy haciendo mal para recuperar la tabla? ¿Que me falta? Cita:
Última edición por Deiv fecha: 14-01-2007 a las 18:24:59. |
#4
|
||||
|
||||
Acabo de hacer la prueba con el ejemplo que pones, usando la segunda cadena de conexión que puso Neftali, y me ha funcionado bien. ¿Has activado la tabla luego de escoger el txt?
// Saludos |
#5
|
||||
|
||||
Pues yo, una vez de utilizar componentes de base de datos, los datos los metería en una tabla, así estarían mas protegidos y cualquier acción de filtro, ordenado etc. sería mucho más fácil.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#6
|
||||
|
||||
Un ejemplo de cómo configurarlo.
Puedes abrir el fichero, e incluso ordenar. NOTA: He cambiado las "comas" por "puntos y comas"
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
||||
|
||||
Cita:
Me basé en la premisa de hacerlo sobre un TXT, pero si hay posibilidad, yo pasaría los datos a una tabla de DBase (por ejemplo) que se puede acceder igualmente utilizando ADO sin necesidad de BDE, simplemente cambiando la conexión. En ese caso la dependencia es mínima (sólo las MDAC), pero eso pasa también con el TXT.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#8
|
|||
|
|||
Hola,
Acabo de leer los post, y espero no esté demás aclararles que no tengo conexión a Internet en Casa, por lo que me valgo de un CyberCafe-Internet, y mas tarde probaré el ADO y TXT.zip de Neftali. Seguí trabajando en el asunto, y ahora he colocado ADOConnection, ADOTable, DataSource1, DBGrid en mi tabla, si bien recupera el archivo TXT, este no me muestra en Columnas, sino que cada fila se parece IGUAL a lo que está en el texto, por ejemplo la primera fila de Tabla me muestra: Producto,Cantidad,Precio (una sola columna con ese texto) ¿Que parte habré hecho mal? Como no tengo Delphi a mano, mas tarde revisaré el ADO y TXT.zip Luego buscando en el Foro encontré sugerencias de trabajar con TStringList ¿Que sugerencia me dan para utilizar este componente? Pues como en un principio hablé, no editaré la Base de Datos, ni renombraré, ni borraré, ni adicionaré, nada. El único objetivo es Manejar esa Base de Datos (realizar filtros, ordenaciones) luego mostrarlos en un TMemo, TListBox, etc o las notas en TEdits, y preferí un archivo TXT para encriptarlo y esté segura mi Base de Datos. Última edición por Deiv fecha: 15-01-2007 a las 16:06:42. |
#9
|
||||
|
||||
Cita:
Como ya he dicho más arriba, si sustituyes las , por ; ==> Arreglado
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#10
|
||||
|
||||
Cita:
Según entiendo, debería poder especificarse el separador poniendo: Extended Properties="text;HDR=Yes;FMT=Delimited(x)" donde x es el separador a usar. Pero hasta ahora no he tenido éxito. // Saludos |
#11
|
|||
|
|||
Gracias Neftali,
He probado el ejemplo y está muy bueno, auque esto de ADO y Base de Datos no me las conozco muy bien, me voy a ir interiorizando al respecto buscando información. ¿Por qué elegiste el delimitador (;() y no (,)? ¿Que no acepta comas? ¿Se puede usar otros delimitadores, por ejemplo guiones? ¿como?. A diferencia de Román como a mi en un principio NO me aceptaba las comas. Ordena bien el DBGrid en tu ejemplo, ¿Puede también FILTRAR? Como dije en mi último post, lo único que deseo es administrar esa base de datos ya que no cambiaré ni aumentaré nada. Para mi ejemplo me gustaría saber cómo filtrar por "Apellidos" ya sea en el mismo DBGrid (aunque sería mejor MOSTRARLO en otro componente que Yo desease, por ejemplo en un TListBox o en un TMemo o en TEdits u otros) para que no se vean tan planos como lo muestra el TDBGrid. En conclusión quiero enfocar esta situación de que filtre o saque promedios de notas, todo internamente, y con un botón mostrar en otros objetos como dije para que no se vean tan planos. Seguiré atento a nuevas sugerencias. Última edición por Deiv fecha: 15-01-2007 a las 23:48:28. |
#12
|
||||
|
||||
Yo sigo sin entender por qué en unos casos acepta las comas y en otros no. El ejemplo de Neftali me funciona si cambio por comas pero no si dejo los ;.
Según he seguido leyendo, hay dos maneras de especificar el formato:
En el primer caso, los parámetros se especifican en la entrada HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text Ahí, entre otras cosas, puede verse el campo Format con su valor por defecto: CSVDelimited, que es el que usa comas. Otros valores posibles para el campo Format son:
Y, en efecto, si pongo como valor de Format a Delimited(, me funciona el ejemplo de Neftali. Se puede usar cualquier otro separador, excepto las comillas dobles. Si no se quiere alterar el registro, se pueden usar un archivo schema.ini que se localice en la misma carpeta que el archivo con los datos. schema.ini, será un archivo INI con una sección por cada archivo de texto que deseemos usar. Así, por ejemplo, si el archivo es datos.txt, entonces schema.ini deberá tener la sección Código:
[datos.txt] Format=Delimited(*) Según entiendo también, este archivo schema.ini es el que debemos usar para especificar las longitudes de los campos en el caso de que usemos columnas de ancho fijo (primera cadena que puso Neftali) en lugar de con separadores. El formato del archivo schema.ini para estos casos, así como el resto de lo que escribí, se puede ver en http://msdn.microsoft.com/library/de...ng03092004.asp // Saludos |
#13
|
||||
|
||||
Pues lo has explicado "de perlas" Roman.
Un ejempillo, que muestra el separador actual del registro.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#14
|
||||
|
||||
Pero aún no entiendo porqué a ti te funciona con ;. ¿Tienes CSVDelimited en el registro?
// Saludos |
#15
|
||||
|
||||
Cita:
Format = Delimited( ; )
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#16
|
||||
|
||||
¿Y ese era el valor por defecto o tú se lo cambiaste en algún momento?
// Saludos |
#17
|
||||
|
||||
Cita:
Cita:
Manualmente no lo he cambiado; Si se ha cambiado en algun momento durante "los ultimos 3 años de vida de mi Windows" (es el tiempo que hace que no reinstalo) lo desconozco.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#18
|
|||
|
|||
Al igual que Roman, Yo también no comprendo esa parte, pero lo que más me llamó la atención sobre los delimitadores es lo siguiente, ¿Mi Base de Datos TXT estará sujeta también a la dependencia de los Delimitadores que tenga una máquina?, es decir si tienen en otro Equipo en su Registro el Delimitador "coma" o suponiendo "comillas" por ejemplo, ¿entonces mi TXT (mi BD) no servirá, no se abrirá?? y mi aplicación no trabajará?
¿O habría alguna forma de FORZAR mediante código a que lea únicamente "punto y coma" como viene en el TXT? (ejemplo de Neftali) Bueno por el otro lado aun me quedé con aquella duda si se puede filtrar la Base de Datos, digamos todos aquellos que coincidan en CANTIDAD = 1 del ejemplo. ¿Es la propiedad FILTER que debo utilizar? Alguien mas puede ayudarme por favor Última edición por Deiv fecha: 17-01-2007 a las 16:03:30. |
#19
|
||||
|
||||
Cita:
Entiendo que la variable del registro es como si fuera el valor por defecto; El que tiene prioridad es el que se define en ese fichero. Subo el ejemplo con un fichero de esquema. En mi registro está el ; En el fichero de Datos.txt he usado el - Especificando en el fichero Schema.ini el - funciona perfectamente. Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#20
|
|||
|
|||
Vaya!
Hasta que al fin utilizaré mi primer INI desde que programo. Gracias Neftali. ¿Los INIs no son vulnerables y propensos a ser cambiados, editados o alterados? Esto podría ocasionar que la Aplicación funcione mal verdad? ¿Se puede encriptar o no tendría sentido de INI? ¿Cómo protegerlo? |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Actualizar datos de una base de datos en un reporte | Marymania | Impresión | 4 | 27-11-2006 19:47:32 |
Añadir datos desde una base de datos a un TListBox | proyecto | Conexión con bases de datos | 1 | 21-11-2006 07:01:19 |
Guardar en 1 base de datos SQL, datos procedentes de 2 tablas distintas | adaypr | C++ Builder | 1 | 05-09-2006 11:56:33 |
ubicar archivo, con datos sacados de base de datos | Giniromero | Varios | 19 | 20-10-2005 16:23:02 |
Reto Para Expertos En Base De Datos Y Tipos De Datos.... (blob) | frankmch | Conexión con bases de datos | 2 | 08-09-2003 19:44:52 |
|