Oracle - importar ficheros texto desde un form

 
Vista:

importar ficheros texto desde un form

Publicado por ELIA (43 intervenciones) el 26/06/2003 14:48:23
Hola a todos, estoy pasando a OracleForms, una aplicación q tengo en Access, y aunq estoy un poco verde ya voy poco a poco.Ahora se me plantea el siguiente problema. En uno de los formularios importaba ficheros .txt a la B.D. concretamente a una tabla existente.Se hace de forma sencilla ya q es el usuario el q tiene q hacerlo. Adjunto parte de la documentación q preparé para ver si me podeis entender:

Se trata de un Formulario a través del cual importamos los ficheros texto de Pedido de Delineante de OficinaTécnica, por Buque y Bloque.

En dos cuadros texto el usuario rellena Buque y Bloque, y al pulsar un boton (importar) importa un Fichero texto con los datos referentes al Pedido de Delineante, ubicado en una ruta dada “C:\ Pedido “ , y con el siguiente formato ya predefindo de fichero “C:\Pedido\B327101.txt”, donde 327 es el Buque y 101 es el bloque, que el usuario ha introducido en los cuadros de texto.
La información queda insertada,almacenada en una tabla única que recoge los datos de todos los Buques/Bloques=> TABLA BLOQUES., al pulsar un botón IMPORTAR.
Sería posible hacer algo parecido, y q sea sencillo para el usuario?????????Ya he visto, los mensajes sobre importación q habeís publicado, pero no sé si me sirven, no lo veo muy claro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:importar ficheros texto desde un form

Publicado por Byron (300 intervenciones) el 26/06/2003 19:14:59
Puedes hacer uso de un paquete implementado en Forms que se llama TEXT_IO.

Este paquete te permite abrir un archivo y leerlo linea a linea, con cada linea usarias funciones para particionar los campos usando INSTR, SUBSTR, para ubicar los campos en los items del form.

Declare
archivo Text_IO.File_Type; /* Declaras tu variable de tipo file */
linea varchar2(2000);
Begin
archivo := Text_IO.Fopen('c:\carpeta\archivo.txt', 'r'); /* La ruta puede ser un item en la forma con un boton que obtenga la ruta completa usando la funcion get_file_name, el segundo parametro 'r' 'read' 'w' 'write' */
Text_IO.Get_Line(archivo,linea);
/*Aqui viene el proceso de partir cada linea leida del archivo para ubicarla en cada item de la forma*/
Text_IO.Fclose(archivo);
end;

Espero te sirva, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por ELIA (43 intervenciones) el 27/06/2003 10:49:59
Hola Byron, veo lo q me estás explicando y es muy interesante, con esto visualizaría en un Form el contenido de un fichero texto. Pero lo q me ocurre es lo siguiente:
1º El nombre del fichero a importar es variable,es decir, el usuario decide q fichero quiere importar en cada momento, tecleando en dos items el buque y el bloque coreespondientes para formar el nombre del fichero, esto podría hacerlo? Y como? (se q estoy abusando de vuestros conocimientos)
2º Por otro lado podrías ponerme un ejemplo de cómo pasar un campo del registro del fichero a un item de la forma, suponiendo q el campo q quiero visualizar está por ejemplo en la posición 7 y con longitud 5 en el reg., además deberíamos distinguir entre varchar y number?. Como debería crear esos items , porq apareceria los registros de uno en uno , sería interesante q apareciesen varios registros visualizados y una barra de desplazamiento.
3º Por último, no sé si con esto, podría además insertar los datos en la BD. Como lo haría.

Se q son muchas cosas las q te pido. Gracias de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por Byron (300 intervenciones) el 27/06/2003 16:23:33
1° Si me dices que dos campos conforman el nombre del fichero, asumo que deberias tener una ruta default en tu disco duro donde almacenas todos los archivos, ej: c:\archivos_buque, entonces lo que tendrias que hacer es unicamente concatenar: ruta_completa := 'c:\archivos_buque\'||:bl_trans.buque||:bl_trans.bloque||'.txt' con esto la ruta queda asi 'c:\archivos_buque\aer1254.txt'
2° Ejemplo de SUBSTR: :bl_trans.medida := substr(linea,7,5) asumiendo que linea es la variable varchar obtenida del Text_io.get_line, los datos son todos tomado en char, pero si lo asignas a un campo NUMBER, Forms hace la conversion, en eso no hay problema siempre y cuando los datos obtenidos de la cadena sean números. Para cargar todos los registros en un bloque de detalle (tabular) simplemente haces loop del archivo que estas leyendo linea a linea y por cada linea que hagas asignas a la forma, y para avanzar al siguiente registro pones next_record; o create_record; con esto forms se mueve al siguiente registro y continuas con el loop.
3° Si los campos los vas a mostrar en la forma no deberian ser automaticamente ingresados a la BD, sino cuando el usuario de clic en grabar, pero si lo deseas hacer automatico podrias poner un commit al final del proceso, o bien en el mismo loop del archivo armas la sentencia insert con los campos extraidos del archivo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por ELIA (43 intervenciones) el 30/06/2003 13:34:31
Hola a todos, estoy siguiendo las indicacciones de Byron al pie de la letra, pero estoy bastante torpe, y tengo algunos problemillas. Siguiendo las indicaciones, he codificado lo siguiente en un boton, en su disparador de When_Button_Pressed. De momento, solo me he limitado a visualizar el fichero.
1 Declare
2 archivo Text_IO.File_Type; /* Declaras tu variable de tipo file */
3 linea varchar2(2000);
4 Begin
5 archivo := Text_IO.Fopen('c:\pedido\Bln7111.txt','r');
6 Text_IO.Get_Line(archivo,linea);
7 Loop
8 :Datos.Articulo:= Substr(Linea,13,10);
9 :Datos.Largo:= Substr(Linea,24,6);
10 Next_record;
11 Text_IO.Get_Line(archivo,linea);
12 End Loop;
13 Text_IO.Fclose(archivo);
14 End;
Entonces, me ocurre lo siguiente, al pulsar el botón, visualizo los dos items, articulo y largo, pero a pesar de formar parte de un bloque tabular q visualiza 5 reg. solo visualiza los datos del primer reg, y seguido sale el siguiente error=>” FRM-40102:Antes hay q introducir o borrar el registro”. Al aceptar este error, visualiza el siguiente registro, pero otra vez en el primer reg del bloque y posteriormente el error, y así sucesivamente hasta terminar el fichero texto, y en este momento aparece el siguiente error:
“El disparador WHEN_BUTTON_PRESSED ha provocado la excepción ORA-01403 no tratada”.Me Imagino q este error estará provocado, por leer, despues de haber leido el último registro, pero no sé como evitarlo.Muchas gracias por atenderme,especialmente a Byron.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por Byron (300 intervenciones) el 30/06/2003 16:31:27
El error FRM-40102, puede darse por varios casos, por ejemplo: puede ser que el bloque activo no sea el bloque donde estes haciendo el next_record; antes del loop del archivo cerciorate que sea el cursor este ubicado en el bloque correcto go_block('bl_detalle'); otro caso pudiera ser que el bloque tenga campos que sean requeridos, y que por lo tanto deben ser llenados, antes de pasar al siguiente registro con next_record;.

La excepcion ORA-01403 es "No data found" sucede cuando estas haciendo un select que no te extrajo registros, puede que algun otro trigger ejecute un select que no encontro registro, puede que tengas que incluir ese select dentro de un bloque begin-end con una sección exception para capturarla.

Saludos DTB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por ELIA (43 intervenciones) el 01/07/2003 09:47:16
Muchas gracias Byron, eres un fenomeno. He solucionado el primer error, efectivamente el cursor no estaba posicionado en el bloque adecuado, ahora ya aparecen todos los registros del fichero en el bloque.La excepción ORA-01403, se produce yo creo, despues de leer el último registro del fichero, mediante 'Text_IO.Get_Line(archivo,linea)', ya q el loop no está condicionado hasta encontrar un fin , y despues de leer el último vuelve a leer y es entonces cd se produce el error, creo q debe de ser eso, porq yo no hago ninguna select en todo el formulario. El problema es q no sé como evitarlo. Saludos, Helia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por Byron (300 intervenciones) el 01/07/2003 16:12:52
Se me olvidaba, el paquete Text_io devuelve la excepcion ora-01403 No data found cuando llega a fin de archivo, aqui esta una muestra de como manejarlo:

DECLARE
archivo Text_IO.File_Type;
linea VARCHAR2(1800);
ruta_archivo VARCHAR2(30);
BEGIN
ruta_archivo:=GET_FILE_NAME('c:\', File_Filter=>'Text Files (*.txt)|*.txt|');
archivo := Text_IO.Fopen(ruta_archivo, 'r');
LOOP
Text_IO.Get_Line(archivo, linea);
:text_item5:=:text_item5||linea||chr(10);
next_record;
END LOOP;
EXCEPTION
WHEN no_data_found THEN
Text_IO.Put_Line('Cerrando el archivo...');
Text_IO.Fclose(archivo);
END;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por ELIA (43 intervenciones) el 02/07/2003 12:17:49
Muchas gracias, Byron, eres un cielo. Me voy a aprovechar de tu generosidad, ya he evitado el error, pero no me aparece el mensaje
'cerrando el archivo' , no tiene ninguna importacia pero, era por curiosidad, es posible q sea tan rapido q no se vea? aparece en la linea de mensajes? Te voy a explicar como hago la inserción de los datos del fichero, a la BD, para q me des tu opiníón de si es una forma correcta o no de hacerlo. El bloque de datos donde recojo los datos del fichero lo he creado con el asistente haciendo referencia a la tabla de la bd donde quiero insertar los datos.Al rellenar el bloque con los datos en el loop, en la exception de fin fichero ,data_no found, incluyo el mensaje
message('Si quiere insertar los datos en la BD pulse Guardar, si no salga sin Guardar.... ');
Creo q sería mejor, en vez de sacar un mensaje, visualizar una Alerta, con un botón para guardar y otro para descartar, pero no sé como codificarlos. De todas aunque no lo guarde al salir tambien me pregunta si quiero guardar loscambios.Pero esto no me valdría si quisiera importar varios ficheros en la misma sesion. No obstante, tengo otra pega, si quiero en una misma sesión importar varios ficheros, al visualizar el 1º despues de grabarlo o descartarlo , cuando vamos a visualizar el 2ºdeja los datos en el bloque pero siguen estando tambien los de la primera importación, y ya no se puede grabar, porq nos insertaría informacion ya insertada o descartada. No sé como se puede limpiar el bloque de datos previo a importar .Muchas gracias, Elia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por elia (43 intervenciones) el 02/07/2003 12:46:47
Disculpar, pero ya he visto como limpiar el bloque, mediante la built-in CLEAR_BLOCK
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por ELIA (43 intervenciones) el 02/07/2003 14:49:43
Acabo de probar la insercion de los datos, tal y como he explicado en el mensaje anterior y aunque juraría q anteriormenete me ha funcionado bien ahora, si el fichero q recogemos en el bloque de datos tiene 5 registros al guardar los datos me inserta 5 registros pero siempre el mismo, el primero q aparece en e lbloque, que haré mal??? GRACIAS, Y SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por Byron (300 intervenciones) el 02/07/2003 16:30:02
Revisando un poco el funcionamiento de la forma antes de guardar, el usuario querra revisar los registros entonces no seria conveniente que inmediatamente se muestren le haga la pregunta de si desea guardar, preferible solo un mensaje, te muestro el esquema de como debes mostrar el alert.
Primero agregas el alert en el form, modificas sus propiedades, como por ejemplo pones el nombre de tu sistema en la propiedad Title, el contenido "'Si quiere insertar los datos en la BD pulse Guardar, si no salga sin Guardar...." la pones en Message, modificas los label de los botones que quieras programar, Button 1 Label = Aceptar y Button 2 Label =Null (lo borras porque no queremos mas botones solo Aceptar); luego al final del proceso de carga ubicas lo siguiente:
declare
boton_presionado NUMBER;
begin
...
boton_presionado :=show_alert('al_preg_guardar');

Con esto ya despliegas el alert, y almacenas que boton presionó en la variable por ahora no nos interesa porque solo contiene un botón. Pero si deseas programar varios botones debes poner lo siguiente despues de hacer el show_alert:
IF boton_presionado = ALERT_BUTTON1 THEN
Proc_grabar_registros; -- Presiono Aceptar Grabación
ELSIF boton_presionado = ALERT_BUTTON2 THEN
Null; -- Presiono Cancelar Grabacion
END IF;

Respecto de los errores de grabacion, me surge la pregunta como grabas los registros con inserts en codigo y solo das commit luego de cargar los datos en la forma. Debe haber un error de grabacion, form no deberia tener problemas de grabar registros.
Para no alargar mas las preguntas, porque mejor no me añades a tu Messenger y resolvemos los problemas.

Saldos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:importar ficheros texto desde un form

Publicado por ELIA (43 intervenciones) el 03/07/2003 13:37:47
Muchas gracias Byron, la verdad es q me lo hace bien finalmente, ya puedes disculpar, no entiendo q me pasaba porq yo las inserciones las estaba comprobando en access vinculando las tablas desde oracle y la verdad es q no sé porq aqui veo mal la informacio, sin embargo si lo cmpruebo en SQL PLUS pues aparecen los registros q realmente tienen q aparecer, osea q hace bien la insercion, voy a olvidarme del tema de access y ya puedes disculpar por a verte hecho perder el tiempo. Las alertas las he puesto bien, como me has dicho. Cd me comentabas de q te incluya en en mi MESSENGER, no sé si te referías a q te escriba directamente a tu dirección de correo, la verdad es q no quiero molestarte tanto , me da mucho apuro, muchas gracias de todas formas. de todas formas seguiremos en contacto porq sigo con mis DUDAS CONSTANTES. HASTA PRONTO, ELIA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar