Interfase separdo por -|-

Saludos.
Te cuanto. Tengo un programa que debe hacer interfaz con otro programa, esta interfaz por así decir, genera un archivo que a mi parecer no es my común (CVS, XML, DBF, TXT) que es lo que normalmente se usa. El separador que utiliza es este es -|-.
Lo que hice fue en que declarando un cursor recorrí la base de datos y fui acomodando a mi gusto un MultiLineEdit.
mle_2.TEXT = mle_2.TEXT + "-|-"+ IDAFI +"-|-"+ MILTIN +"-|-"+ IDPATRO +"-|-"+ PATRO ... FETCH T_U INTO :IDAFI,:MILTIN,:IDPATRO,:PATRO...
LOOP
Luego lo guardo con
fileOpen()
FileWrite()
Funciona bien asta cierto punto, luego no guarda nada a mi criterio es porque porque la variable mle_2.TEXT no soporta tantos caracteres. Mi pregunta es de alguna manera puedo almacenar más caracteres o me podrían decir una forma más practica de hacer lo que intento hacer.

1 respuesta

Respuesta
Lo que te debe estar pasando es que el filewrite graba bloques de hasta 32000 (aprox) bytes. Si tienes más que eso tienes que hacer algo como lo que te pongo a continuación.
Igual hay otra forma de hacer lo que quieres. Si no te anda lo que sigue escribime que te comento.
integer li_FileNo, li_Writes, li_Cnt
long ll_BlobLen, ll_CurrentPos
blob lblb_Data
li_FileNo = FileOpen("C:\file1.txt", StreamMode!, &
Write!, LockReadWrite!, Append!)
If li_FileNo 32765 Then
If Mod(ll_BlobLen, 32765) = 0 Then
li_Writes = ll_BlobLen / 32765
Else
li_Writes = (ll_BlobLen / 32765) + 1
End if
Else
li_Writes = 1
End if
ll_CurrentPos = 1
For li_Cnt = 1 To li_Writes
lblb_Data = BlobMid(ablb_Data, ll_CurrentPos, 32765)
ll_CurrentPos += 32765
If FileWrite(li_FileNo, lblb_Data) = -1 Then
Return -1
End if
Next
FileClose(li_FileNo)
Return 1
Si la variable ablb_Data es donde están todo el contenido para exportar, entonces creo que lo implemente bien, sin embargo no he resuelto el problema. Sigue generando archivos vacíos.
Pasame tu codigo...
Es Simplecito
1. Declara el cursor
2. Recorrerlo y guardarlo en mle_2.text
3. GUARDARLO fileOpen, FileWrite, fileClose
Es algo extenso pues porque tome todos los campos. Para que te des cuenta el tamaño del archivo a generar. Tal ves no era necesario pero hora ya esta.
STRING IDAFI,MILTIN,IDPATRO,PATRO,CED,EXP,NOM,APE1,APE2,DIR,BRR,MAIL,TEL,CEL,CUENTA,BANCO,CITY,PAIS,TIPOCUENTA,COMENT,PROFE,MODI,NOMUSU,IDOXI,OXI,DIA,ls_nombrelargo,ls_nombrecorto
INT li_aux,li_archivo,
boolean lb_exist
//// DECLARA EL CURSOR
DECLARE T_U CURSOR FOR
SELECT afiliado.id_afi,
multinivel.nom_multi,
afiliado.id_patro_afi,
afiliado.nom_patro_afi,
ciudadano.ced_ciu,
ciudadano.ced_exp_ciu,
ciudadano.nom_ciu,
ciudadano.ape1_ciu,
ciudadano.ape2_ciu,
ciudadano.dir_ciu,
ciudadano.brr_ciu,
ciudadano.mail_ciu,
ciudadano.tel_ciu,
ciudadano.cel_ciu,
ciudadano.cuenta_ciu,
ciudadano.banco_ciu,
ciudadano.city_ciu,
ciudadano.pais_ciu,
ciudadano.tipo_cuenta_ciu,
ciudadano.coment_ciu,
ciudadano.profe_ciu,
afiliado.modi_afi,
usuario.nom_usu,
afiliado.id_oxi_afi,
afiliado.oxi_afi
FROM afiliado,
ciudadano,
multinivel,
usuario
WHERE ( ciudadano.ced_ciu = afiliado.ced_ciu ) and
( multinivel.id_multi = afiliado.id_multi ) and
( usuario.id_usu = ciudadano.id_usu ) and
( usuario.id_usu = afiliado.id_usu ) and
( afiliado.id_afi between :A1 AND :B2) and
( afiliado.id_multi IN (:C,:P,:G) )
ORDER BY "afiliado"."id_afi" ASC;
/// RECORRERLO Y GUARDARLO EN mle_2.TEXT
OPEN T_U;
FETCH T_U INTO :IDAFI,:MILTIN,:IDPATRO,:PATRO,:CED,:EXP,:NOM,:APE1,:APE2,:DIR,:BRR,:MAIL,:TEL,:CEL,:CUENTA,:BANCO,:CITY,:PAIS,:TIPOCUENTA,:COMENT,:PROFE,:MODI,:NOMUSU,:IDOXI,:OXI;
DO WHILE SQLCA.SQLCODE=0
mle_2.TEXT = mle_2.TEXT + "-|-"+ IDAFI +"-|-"+ MILTIN +"-|-"+ IDPATRO +"-|-"+ PATRO +"-|-"+ CED +"-|-"+ EXP +"-|-"+ NOM +"-|-"+ APE1 +"-|-"+ APE2 +"-|-"+ DIR +"-|-"+ BRR +"-|-"+ MAIL +"-|-"+ TEL +"-|-"+ CEL +"-|-"+ CUENTA +"-|-"+ BANCO +"-|-"+ CITY +"-|-"+ PAIS +"-|-"+ TIPOCUENTA +"-|-"+ COMENT +"-|-"+ PROFE +"-|-"+ MODI +"-|-"+ NOMUSU +"-|-"+ IDOXI +"-|-"+ OXI +"-|-"+"~r~n"
FETCH T_U INTO :IDAFI,:MILTIN,:IDPATRO,:PATRO,:CED,:EXP,:NOM,:APE1,:APE2,:DIR,:BRR,:MAIL,:TEL,:CEL,:CUENTA,:BANCO,:CITY,:PAIS,:TIPOCUENTA,:COMENT,:PROFE,:MODI,:NOMUSU,:IDOXI,:OXI;
LOOP
CLOSE T_U;
//// GUARDARLO
DO
li_aux=GetFileSaveName ("Guardar Interfase",ls_nombrelargo,ls_nombrecorto,"INT","Interfase [*.INT],*.INT")
if li_aux=1 then
lb_exist = FileExists(ls_nombrelargo)
IF lb_exist THEN
li_aux = MessageBox("Guardar Interfase",ls_nombrelargo +" ya existe. ¿Desea reemplazarlo?",Question!, YesNo!)
if li_aux=2 then
ls_nombrelargo = space(0)
end if
end if
if li_aux=1 then
li_archivo =fileOpen(ls_nombrelargo,streamMode!,Write!)
FileWrite(li_archivo,mle_2.text)
fileClose(li_archivo)
end if
end if
LOOP WHILE li_aux = 2
Disculpa la demora. ¿Ya lo resolviste?
En tu código no esta implementado lo que yo te pase.
Aldo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas