Saber si puedo usar SQLLoader con visual basic

Tengo que hacer una salida a un archivo de texto plano, separado por ; desde un sistema de visual basic.
No se como puedo resolver este problema.
Si alguien me pudiera ayudar.

1 respuesta

Respuesta
1
Mi nombre es daniel!
Deseas hacer el archivo plano desde visual basic!
O quieres leer con sqlldr de oracle el archivo plano generado desde visual basic!
Si tienes oracle como base de datos podemos usar el utl_file de la base de datos de oracle!
Si es esto ultimo vuélveme a escribir para indicarte las sintaxis !
Bye!
Hola daniel:
Lo que necesito es generar un archivo de texto plano desde visual basic.
Y no se como generarlo.
Los campos deben estar separados por;
Ese es mi problema
Gracias
Hola Daniel:
Mira recibí tu ayuda; te lo agradezco.
Mi problema es que no estoy trabajando con oracle
No se si el código lo puedo anlazar con el visual basic.
Perdona mi ignorancia, no se oracle
Chao y gracias por tu molestia
Espero tu respuesta
Ricardo
Si estas usando oracle, te voy a mandarte el código básico para generar archivos planos desde la data de oracle usando un packages que oracle trae en sus instalaciones!
-------
LOCK TABLE RH_MOV_NOMINA IN EXCLUSIVE MODE;
LOCK TABLE RH_TMP_NOMINA IN EXCLUSIVE MODE;
LOCK TABLE RH_CONCEPTOS IN EXCLUSIVE MODE;
LOCK TABLE RH_PERSONAS IN EXCLUSIVE MODE;
LOCK TABLE RH_RELACION_CARGOS IN EXCLUSIVE MODE;
LOCK TABLE RH_ADMINISTRATIVOS IN EXCLUSIVE MODE;
LOCK TABLE RH_PERIODOS IN EXCLUSIVE MODE;
LOCK TABLE RH_DESCRIPTIVAS IN EXCLUSIVE MODE;
CURSOR C1 IS
SELECT 'NC' TIPO_REGISTRO
,RVPC.CEDULA
,RVPC.NOMBRE||' '||RVPC.APELLIDO NOMBRE
,LPAD(NVL(LTRIM(RTRIM(RVPC.NO_CUENTA)),'0'),12,'0') NO_CUENTA
,SUM(RTN.MONTO) MONTO
FROM RH_TMP_NOMINA RTN
,RH_V_PERSONAL_CARGO RVPC
WHERE RTN.CODIGO_TIPO_NOMINA = :CONTROL.CODIGO_TIPO_NOMINA
AND RTN.CODIGO_PERIODO = :CONTROL.CODIGO_PERIODO
AND RVPC.CODIGO_PERSONA = RTN.CODIGO_PERSONA
AND RVPC.CODIGO_TIPO_NOMINA = RTN.CODIGO_TIPO_NOMINA
GROUP
BY RTN.CODIGO_PERSONA
,RVPC.CEDULA
,RVPC.NOMBRE||' '||RVPC.APELLIDO
,RVPC.NO_CUENTA
UNION ALL
SELECT 'ND' TIPO_REGISTRO
,0 CEDULA
,TO_CHAR(NULL) NOMBRE
,LPAD('0',12,'0') NO_CUENTA
,SUM(RTN.MONTO) MONTO
FROM RH_TMP_NOMINA RTN
,RH_V_PERSONAL_CARGO RVPC
WHERE RTN.CODIGO_TIPO_NOMINA = :CONTROL.CODIGO_TIPO_NOMINA
AND RTN.CODIGO_PERIODO = :CONTROL.CODIGO_PERIODO
AND RVPC.CODIGO_PERSONA = RTN.CODIGO_PERSONA
AND RVPC.CODIGO_TIPO_NOMINA = RTN.CODIGO_TIPO_NOMINA
ORDER
BY 1 DESC,3;
R1 C1%rowtype;
v_buffer varchar2(100);
v_archivo utl_file.file_type;
v_location_dir varchar2(255);
v_file varchar2(255);
BEGIN
----Esta instrucción lo que hace es mostrar un mensaje en developer para ti seria una instrucción de visual
SET_WINDOW_PROPERTY('PROGRESS_BAR_WINDOW',title,'Generando Diskette...Creando Archivo');
V_CURRENT_RECORD := 0;
V_COUNT_RECORDS := 1;
begin
select extra1--||'rh'
into v_location_dir
from sis_empresas
where codigo_empresa = :global.codigo_empresa;
exception
when no_data_found then
f_alert.ok('No existe variable de utl file dir creada en los parametros de la base dedatos',null,'STOP');
RAISE FORM_TRIGGER_FAILURE;
end;
v_file := translate('DISCO '||:control.tipo_nomina||' '||to_char(sysdate,'DDMMRRRR')||'.txt',' ','-');
v_archivo := utl_file.fopen(v_location_dir,v_file,'w');
SELECT COUNT(*)
INTO V_COUNT_RECORDS
FROM (
SELECT 'NC' TIPO_REGISTRO
,RVPC.CEDULA
,RVPC.NOMBRE||' '||RVPC.APELLIDO NOMBRE
,LPAD(NVL(LTRIM(RTRIM(RVPC.NO_CUENTA)),'0'),12,'0') NO_CUENTA
,SUM(RTN.MONTO) MONTO
FROM RH_TMP_NOMINA RTN
,RH_V_PERSONAL_CARGO RVPC
WHERE RTN.CODIGO_TIPO_NOMINA = :CONTROL.CODIGO_TIPO_NOMINA
AND RTN.CODIGO_PERIODO = :CONTROL.CODIGO_PERIODO
AND RVPC.CODIGO_PERSONA = RTN.CODIGO_PERSONA
AND RVPC.CODIGO_TIPO_NOMINA = RTN.CODIGO_TIPO_NOMINA
GROUP
BY RTN.CODIGO_PERSONA
,RVPC.CEDULA
,RVPC.NOMBRE||' '||RVPC.APELLIDO
,RVPC.NO_CUENTA
UNION ALL
SELECT 'ND' TIPO_REGISTRO
,0 CEDULA
,TO_CHAR(NULL) NOMBRE
,LPAD('0',12,'0') NO_CUENTA
,SUM(RTN.MONTO) MONTO
FROM RH_TMP_NOMINA RTN
,RH_V_PERSONAL_CARGO RVPC
WHERE RTN.CODIGO_TIPO_NOMINA = :CONTROL.CODIGO_TIPO_NOMINA
AND RTN.CODIGO_PERIODO = :CONTROL.CODIGO_PERIODO
AND RVPC.CODIGO_PERSONA = RTN.CODIGO_PERSONA
AND RVPC.CODIGO_TIPO_NOMINA = RTN.CODIGO_TIPO_NOMINA
);
IF V_COUNT_RECORDS = 0 THEN
RETURN;
END IF;
open c1;
loop
fetch c1 into r1;
exit when c1%notfound;
V_CURRENT_RECORD := V_CURRENT_RECORD + 1;
if :control.formato_diskette = 'CARACAS' then
v_buffer :=
r1.tipo_registro||
lpad(substr(r1.no_cuenta,1,11),11,'0')||
lpad(ltrim(to_char(trunc(nvl(r1.monto,0),2)*100)),13,'0');
elsif :control.formato_diskette = 'MERCANTIL' then
if r1.tipo_registro = 'ND' then
v_buffer :=
'640'||
'00'||
lpad(:control.numero_cuenta,10,'0')||
'785'||
lpad('0',8,'0')||
lpad(ltrim(to_char(trunc(nvl(r1.monto,0),2)*100)),13,'0')||
lpad('0',13,'0')||
'001050'||
to_char(:control.fecha_nomina,'RRRRMMDD')||
lpad('0',14,'0');
else
v_buffer :=
'770'||
'00'||
lpad(nvl(ltrim(rtrim(substr(r1.no_cuenta,3,12))),'0'),10,'0')||
'222'||
lpad(to_char(r1.cedula),8,'0')||
lpad(ltrim(to_char(trunc(nvl(r1.monto,0),2)*100)),13,'0')||
lpad('0',13,'0')||
'001050'||
lpad('0',8,'0')||
lpad('0',14,'0');
end if;
elsif :control.formato_diskette = 'BOD' then
if r1.tipo_registro = 'NC' then
v_buffer :=
'0001'||
lpad(nvl(ltrim(rtrim(r1.no_cuenta)),'0'),12,'0')||
lpad(to_char(r1.cedula),15,' ')||
rpad(substr(r1.nombre,1,30),30,' ')||
translate(ltrim(to_char(trunc(nvl(r1.monto,0),2),'0000000000D00')),',','.')||
to_char(:control.fecha_nomina,'RRRRMMDD')||
'C'||
lpad(' ',10,' ');
end if;
end if;
IF v_buffer IS NOT NULL THEN
utl_file.put_line(v_archivo,v_buffer);
END IF;
end loop;
utl_file.fclose(v_archivo);
close c1;
Te explico lo que hace todo lo que te coloque anteriormente
Primero bloqueo las tablas con las que proceso la data para garantizar que sea la ultima data modificada o almacenada!
Luego con un cursor monto toda la data que quiero ir procesando para enviarla a un archivo plano
Posteriormente
SI TE FIJAS YO GENERO LOS CAMPOS PEGADOS UNO AL LADO DEL OTRO, EN TU CASO
SOLOCARIAS ||';'|| EN DONDE YO TENGO EL ||
Bien
Espero entiendas!
Cualquier duda
Escribe!
BYE
OK!
Disculpa el haber asumido que estabas con oracle, ya que la pregunta estaba en el tablón publico de oracle!
Pero mi pregunta ahora es !
Con que base de datos estas trabajando!?
Hola:
Estoy trabajando con access '97
Ok Daniel, espero tu respuesta
Gracias
Please
Coloca la base de datos de access en la siguiente dirección ip, es de un servidor ftp y al tener el formulario ejemplo lo coloco en ese mismo servidor para que lo descargues y compruebes la ayuda
Coloca los archivos en la carpeta visual124, solo descarga en la carpeta indicada!
Please
Confío!
Bye
Disculpa la tardanza en la ayuda pero estoy investigando, ya que se como hacerlo con oracle e informix pero con bases de datos tan simples nunca me había tocado,
Si quieres, esperas un poco, que la solución es encontrable!
Bye!
Suerte!
¿Cuál dirección ftp?
OK
Dejame revisar!
BYE!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas