FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error al llenar tabla desde archivo txt
Saludos
En un anterior hilo pregunte si era posible llenar una tabla (socios) con datos de un archivo txt y Neftali me respondio: Cita:
Resumiendo me salió el siguiente código El problema es que en tiempo de ejecución me sale el siguiente error "Project miproyecto.exe raised exception class EDBEngineError whyt message Invalid use of keyword" o sea me da error al encontrar un espacio en blanco dentro del texto. ¿Que me falta? ¿que me sobra? ¿Que hice mal? Alguien me puede aconsejar Les agradezco de antemano su ayuda Última edición por dec fecha: 10-11-2006 a las 03:20:24. |
#2
|
||||
|
||||
Yo simplificaría todo, no tengo tiempo para leer el código, pero si un registro es una línea de tu fichero de texto y los campos, tienen un separador o son de longitud fíja.
Leería mediante un bucle las líneas, por cada línea leida, utilizado la función Copy si los campos son de longitud fija iría rellenando los campos de la BD y me ahorraría el paso intermedio de cargarlo en un memo. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
||||
|
||||
Cita:
Cita:
Cita:
Otra cosa que estaría bien es saber cómo son las líneas del fichero de texto. ¿Puedes poner dos o tres? Para ver la estructura que tienes, los separadores,... La idea del código es la correcta, recorrer las líneas e ir insertando en la tabla: * Debes tener en cuenta, que los "cortes" de la línea en trozos sean correctos. * Recuerda también que al realizar un Insert, los campos de tipo texto van entre comillas (Revisa la función QuetedStr); * Ten en cuenta que algun campo al realizar los "cortes" puede ser vacío, al insertar ese campo debes cambiarlo por un NULL, sino en la sentencia aparecerán dos comas ( , ) seguidas y te dará error. * Para buscar el sepoarador entre campos y "cortar" usa las funciones Pos Y Copy.
__________________
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. |
#4
|
|||
|
|||
Y si lo haces así...
Supongamos estas variables ft : textfile; lin : string; y un fichero donde está la información, un código de 5 letras y una descripción, separados por una coma (o lo que sea) Código:
assignfile(ft,DirectoryEdit1.text+'\Anotacion.txt'); {$I-} Reset(Ft); {$I+} if IOResult <> 0 then begin Showmessage('No se encuentra el fichero de anotaciones.'); Exit; end; while not eof(ft) do begin Readln(ft,lin); Table1.Append; Table1.Fieldbyname('Codigo').asstring:=copy(lin,1,5); Table1.Fieldbyname('Fecha').asdatetime:=now; Table1.Fieldbyname('Descripcion').asstring:=copy(lin,7,80); Table1.Post; end; Closefile(ft); |
#5
|
|||
|
|||
Detallando un poco mas
Gracias a todos por sus sugerencias, y sobre todo por su paciencia .
Les detallo un poco mas el problema. - Los campos son de longitud variable (es decir.. los datos no tienen el mismo largo) por eso voy leyendo el fichero caracter por caracter. - La linea donde aparece el error es : Código Delphi [-]Query2.ExecSql; datos.txt- Una muestra de los datos Gracias de nuevo por su ayuda.. y por seguir ayudandome |
#6
|
||||
|
||||
Hola,
personalmente en un proyecto utilicé un odbc para acceder a ficheros de texto con formatos tipo registros. Una vez creado el odbc, al que sólo hay que indicar el directorio, cada fichero de texto se trata como una tabla/query. Es una pasada la facilidad con la que se puede manejar este tipo de información, y creo que te puede venir de maravilla. Una vez el usuario te haya seleccionado el fichero, modificas los datos del dataset y los tratas como si leyeras una tabla normal. Echale un vistazo porque creo que merece la pena. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#7
|
|||
|
|||
No le veo problema a la estructura de tu fichero txt.
Código:
var l1,l2,l3,l4 : string; procedure extrae(cad:string;var t1,t2,t3,t4:string); var q : integer; begin t1:='';t2:='';t3:='';t4:=''; q:=1; while copy(cad,q,1)<>'|' do begin t1:=t1+copy(cad,q,1); inc(q); end; inc(q); while copy(cad,q,1)<>'|' do begin t2:=t2+copy(cad,q,1); inc(q); end; while copy(cad,q,1)<>'|' do begin t3:=t3+copy(cad,q,1); inc(q); end; inc(q); t4:=copy(cad,q,3); // el resto end; assignfile(ft,DirectoryEdit1.text+'\Anotacion.txt'); {$I-} Reset(Ft); {$I+} if IOResult <> 0 then begin Showmessage('No se encuentra el fichero de anotaciones.'); Exit; end; while not eof(ft) do begin Readln(ft,lin); extrae(lin,l1,l2,l3,l4); Table1.Append; Table1.Fieldbyname('Codigo').asinteger:=strtoint(l1); Table1.Fieldbyname('Numero').asstring:=l2; Table1.Fieldbyname('Nombre').asstring:=l3; Table1.Fieldbyname('Tipo').asstring:=l4; Table1.Post; end; Closefile(ft); |
#8
|
||||
|
||||
Insisto, mira un poco lo que te digo en el mensaje anterior.
En el formulario que te adjunto, las tablas que ves en él son realmente ficheros de texto. Incluso se puede hacer maestro-detalle. Si quieres no visualizas los registros y los utilizas a tu antojo Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#9
|
|||
|
|||
Prueba a cambiar la línea del SQL por esta:
frmNumeroUno.Query2.SQL.Add('insert into socios (ci,Ncta,Nombres,Calf) values('+QuotedStr(ci)+','+QuotedStr(num)+','+QuotedStr(nom)+','+QuotedStr(cat)+')'); Teniendo en cuenta que todos los campos son string. Si hubiera algún numérico no le pongas el QuotedStr() |
#10
|
|||
|
|||
Gracias a todos
Al fin lo solucioné..... mejor dicho.. lo solucionaron ustedes
Use la sugerencia: Cita:
Cita:
A todos los que dieron sugerencias muchas gracias, les aseguro que las estoy revisando para aprender un poco mas y utilizarlas en futuros programas(muy pronto por cierto).. asi que seguro que pronto sabran de mi de nuevo... De nuevo gracias a todos A los moderadores: no se si esto es spam... si es asi mil disculpas |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Llenar menú desde Tabla... | vladimirbp | Varios | 2 | 10-11-2006 18:26:53 |
Error de Sintaxis al Insertar datos a una tabla desde otra | alastor | SQL | 9 | 28-09-2006 18:27:09 |
llenar una tabla dbf con un query de mysql | coletaun | Varios | 4 | 03-01-2006 22:04:14 |
Llenar una tabla con datos de otras dos tablas | jovehe | Tablas planas | 2 | 23-08-2004 17:21:55 |
Necesito llenar un DBGrid desde una consulta con dbexpresss | vivim82 | Varios | 5 | 05-05-2004 18:31:02 |
|