XML a DBF, pero conservando formato de campos [VB 2008+SQL ServerCE y VFP]

836 views
Skip to first unread message

Ing.Daniel Bojorge

unread,
Jul 13, 2012, 7:35:36 PM7/13/12
to publice...@googlegroups.com
Hola buenas, feliz viernes a tod@s.

De antemano, quiero agradecer a todos los que se tomen el tiempo en leer esta consulta y a todos los que respondan.

Procedo a plantearles el problema:

Estoy desarrollando una aplicación para PDA (Windows CE y Windows Mobile), con Visual Basic 2008 y SQL Server CE.  La aplicación recoge todo muy bien, alimento la base de datos desde un xml que genero desde VFP.

Bueno, aclaro también, el sistema en producción está hecho con VFP, pero los Hand Held (PDA), para no complicarme tanto, hice la aplicación en VB 2008, ya vi como instalar el  .net FrameWork Compact Edition y también cómo instalar el SQL Server CE (para eso, me comprometí a elaborar un tutorial), ok, hasta ahí todo bien, desde VFP genero el XML que contiene el maestro que se carga en el PDA, todo bien.

Ahora, cuando ya debo procesar la información leída, desde el PDA, genero el XML y desde VFP, con el XMLToCursor lo paso a DBF y ahí estamos bien, pero los problemas suceden con los datos que se exportan.

La estructura de la tabla que exporto (XML) lleva, código (texto de 8 dígitos), descripción (Texto 20 dígitos) y Código de Barra (principalmente), pero el código y el código de barra, son números, pero con formato de texto y contienen valores tales como:  03010001 (código) y 0701270094040 (código de barra), pero al pasarlo a DBF, éstos campos, los pone de tipo numérico y obviamente en ese tipo, los ceros a la izquierda no existen.

Ésto me causa problemas porque luego de exportar, debo revisar esos ceros, con los códigos no tengo problema porque sé que si falta un dígito, le agrego el CERO a la izquierda, pero en los códigos de barra, se llega a tener hasta dos ceros al inicio.

Ahora viene la pregunta, ¿Cómo puedo hacer para que al convertir de XML a DBF mantenga el tipo de dato?

Podría alguien ayuarme?


El formato del XML es el siguiente (para generarlo, simplemente convierto el DataSet a xml con el método (en VB) WriteXML)

Imágenes integradas 1


Alguien ¿podría ayudarme? Ya finalizando esto, creo que puedo buscar el tiempo para preparar un tuto de cómo desarrollar una app para dispositivos móvios con Windows CE o Mobile, porque ya hasta copio al y desde el PDA (esto con VB), para que el usuario no está copiando y pegando archivos.


Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)

XML.png

Alejandro P

unread,
Jul 13, 2012, 7:38:41 PM7/13/12
to publice...@googlegroups.com
Yo creo que la unica forma de respetarlo es en tu aplicativo PDA guardarlo con " " ese problema me pasa a mi con uno de inventario mis codigos tienen muchos ceros al inicio y al exportarlos tenia ese problema....

Saludos!
XML.png

Ing.Daniel Bojorge

unread,
Jul 13, 2012, 7:44:25 PM7/13/12
to publice...@googlegroups.com
Vaya, aunque en el xml, van los CEROS en su lugar?
Imágenes integradas 1

¿Será que se pueda hacer algo desde vfp?


Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



XML.png
XML.png

Alejandro P

unread,
Jul 13, 2012, 7:46:27 PM7/13/12
to publice...@googlegroups.com
El campo codigo tiene un ancho fijo? si es asi podrias ir incrustando 0 de acuerdo a la longitud de tu campo de entrada...
XML.png
XML.png

Ing.Daniel Bojorge

unread,
Jul 13, 2012, 7:48:33 PM7/13/12
to publice...@googlegroups.com
Si, claro es ancho fijo y por ahí estoy resolviendo, el problema es con el código de barra, que no es ancho fijo, pueden ser EAN 13 (13 dígitos), EAN 8 (8 dígitos) u otro formato, que varía el tamaño del campo y ahí el problema.

Lo resuelvo de manera poco convencional, pero quería ver si desde vfp, se podría resolver!!!






Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



XML.png
XML.png

Guillermo MDQ

unread,
Jul 13, 2012, 7:58:03 PM7/13/12
to publice...@googlegroups.com
Utilizas XMLTOCURSOR para importarlo desde VFP ?
Si es asi fijate el parametro Flags con valor 1024 si te puede ser de ayuda.

Saludos
Guillermo

Alejandro P

unread,
Jul 13, 2012, 8:01:03 PM7/13/12
to publice...@googlegroups.com
y si intentas hacer un archivo de esquema donde pongas los valores de cada nodo del XML y cuando hagas la conversion en la funcion ahi pongas ese archivo?



El 13 de julio de 2012 18:35, Ing.Daniel Bojorge <debs....@gmail.com> escribió:
XML.png

Alejandro P

unread,
Jul 13, 2012, 8:02:04 PM7/13/12
to publice...@googlegroups.com
tendrias que usar la funcion asi..


CursorToXML("midato", "miXML.xml", 1, 512, 0,  "miesquema.xsd")
XML.png
XML.png

Ing.Daniel Bojorge

unread,
Jul 13, 2012, 9:42:58 PM7/13/12
to publice...@googlegroups.com
si, estoy usando el Xmltocursor y veré esto que me dices, de momento estoy fuera de la oficina, nuevamente fuera por problemas e a (casi ni he podido trabajar).


El viernes, 13 de julio de 2012, Guillermo MDQ <gol...@gmail.com> escribió:
> Utilizas XMLTOCURSOR para importarlo desde VFP ?
> Si es asi fijate el parametro Flags con valor 1024 si te puede ser de ayuda.
>
> Saludos
> Guillermo
>
>
> El viernes, 13 de julio de 2012 20:48:33 UTC-3, Daniel Bojorge (Foros) escribió:
>
> Si, claro es ancho fijo y por ahí estoy resolviendo, el problema es con el código de barra, que no es ancho fijo, pueden ser EAN 13 (13 dígitos), EAN 8 (8 dígitos) u otro formato, que varía el tamaño del campo y ahí el problema.
> Lo resuelvo de manera poco convencional, pero quería ver si desde vfp, se podría resolver!!!
>
>
>
>
>
> Dios L@s Bendiga
>
> Saludos,
>
> Daniel (Con 1 Estrella DCE de Microsoft)
> www.debsconsultores.com
> Nicaragua
>
> "Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
> (Juan 15:7 DHH)
> Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
> (Jeremías 17:7 RV2000)
>
>
>
> El 13 de julio de 2012 17:46, Alejandro P <aphfc...@gmail.com> escribió:
>
> El campo codigo tiene un ancho fijo? si es asi podrias ir incrustando 0 de acuerdo a la longitud de tu campo de entrada...
>
> El 13 de julio de 2012 18:44, Ing.Daniel Bojorge <debs....@gmail.com> escribió:
>
> Vaya, aunque en el xml, van los CEROS en su lugar?
>
> ¿Será que se pueda hacer algo desde vfp?
>
> Dios L@s Bendiga
>
> Saludos,
>
> Daniel (Con 1 Estrella DCE de Microsoft)
> www.debsconsultores.com
> Nicaragua
>
> "Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
> (Juan 15:7 DHH)
> Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
> (Jeremías 17:7 RV2000)
>
>
>
> El 13 de julio de 2012 17:38, Alejandro P <aphfc...@gmail.com> escribió:
>
> Yo creo que la unica forma de respetarlo es en tu aplicativo PDA guardarlo con " " ese problema me pasa a mi con uno de inventario mis codigos tienen muchos ceros al inicio y al exportarlos tenia ese problema....
> Saludos!
>
> El 13 de julio de 2012 18:35, Ing.Daniel Bojorge <debs....@gmail.com> escribió:
>
> Hola buenas, feliz viernes a tod@s.
> De antemano, quiero agradecer a todos los que se tomen el tiempo en leer esta consulta y a todos los que respondan.
> Procedo a plantearles el problema:
> Estoy desarrollando una aplicación para PDA (Windows CE y Windows Mobile), con Visual Basic 2008 y SQL Server CE.  La aplicación recoge todo muy bien, alimento la base de datos desde un xml que genero desde VFP.
> Bueno, aclaro también, el sistema en producción está hecho con VFP, pero los Hand Held (PDA), para no complicarme tanto, hice la aplicación en VB 2008, ya vi como instalar el  .net FrameWork Compact Edition y también cómo instalar el SQL Server CE (para eso, me comprometí a elaborar un tutorial), ok, hasta ahí todo bien, desde VFP genero el XML que contiene el maestro que se carga en el PDA, todo bien.
> Ahora, cuando ya debo procesar la información leída, desde el PDA, genero el XML y desde VFP, con el XMLToCursor lo paso a DBF y ahí estamos bien, pero los problemas suceden con los datos que se exportan.
> La estructura de la tabla que exporto (XML) lleva, código (texto de 8 dígitos), descripción (Texto 20 dígitos) y Código de Barra (principalmente), pero el código y el código de barra, son números, pero con formato de texto y contienen valores tales como:  03010001 (código) y 0701270094040 (código de barra), pero al pasarlo a DBF, éstos campos, los pone de tipo numérico y obviamente en ese tipo, los ceros a la i

--

Ing.Daniel Bojorge

unread,
Jul 13, 2012, 9:49:11 PM7/13/12
to publice...@googlegroups.com
Esto del squemaa es lo que he leído y me gustaría implementar. ¿Cómo podría ser la estructura del archivo xsd?

Ya quiero estar en la oficina, pero estoy retirado hasta el lunes (si puedo mantenerme bien en todo el día).

Eso de esquema no lo manejo, ¿Qué formato tendría el archi xsd? Suponiendo que la tabla tiene dos campos, codigo c(8) y descrip c(20).

Por su ayda estaré muy agradecido.


El viernes, 13 de julio de 2012, Alejandro P <aphfc...@gmail.com> escribió:
> tendrias que usar la funcion asi..
>
> CursorToXML("midato", "miXML.xml", 1, 512, 0,  "miesquema.xsd")
>
> El 13 de julio de 2012 18:48, Ing.Daniel Bojorge <debs....@gmail.com> escribió:
>
> Si, claro es ancho fijo y por ahí estoy resolviendo, el problema es con el código de barra, que no es ancho fijo, pueden ser EAN 13 (13 dígitos), EAN 8 (8 dígitos) u otro formato, que varía el tamaño del campo y ahí el problema.
> Lo resuelvo de manera poco convencional, pero quería ver si desde vfp, se podría resolver!!!
>
>
>
>
>
> Dios L@s Bendiga
>
> Saludos,
>
> Daniel (Con 1 Estrella DCE de Microsoft)
> www.debsconsultores.com
> Nicaragua
>
> "Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
> (Juan 15:7 DHH)
> Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
> (Jeremías 17:7 RV2000)
>
>
>
> El 13 de julio de 2012 17:46, Alejandro P <aphfc...@gmail.com> escribió:
>
> El campo codigo tiene un ancho fijo? si es asi podrias ir incrustando 0 de acuerdo a la longitud de tu campo de entrada...
>
> El 13 de julio de 2012 18:44, Ing.Daniel Bojorge <debs....@gmail.com> escribió:
>
> Vaya, aunque en el xml, van los CEROS en su lugar?
> <thismessage:/mail/u/0/s/?view=att&th=13882cad35afeb4e&attid=0.2&disp=emb&realattid=ii_13882ba5399f5969&zw&atsh=1>

>
> ¿Será que se pueda hacer algo desde vfp?
>
> Dios L@s Bendiga
>
> Saludos,
>
> Daniel (Con 1 Estrella DCE de Microsoft)
> www.debsconsultores.com
> Nicaragua
>
> "Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
> (Juan 15:7 DHH)
> Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
> (Jeremías 17:7 RV2000)
>
>
>
> El 13 de julio de 2012 17:38, Alejandro P <aphfc...@gmail.com> escribió:
>
> Yo creo que la unica forma de respetarlo es en tu aplicativo PDA guardarlo con " " ese problema me pasa a mi con uno de inventario mis codigos tienen muchos ceros al inicio y al exportarlos tenia ese problema....
> Saludos!
>
> El 13 de julio de 2012 18:35, Ing.Daniel Bojorge <debs....@gmail.com> escribió:
>
> Hola buenas, feliz viernes a tod@s.
> De antemano, quiero agradecer a todos los que se tomen el tiempo en leer esta consulta y a todos los que respondan.
> Procedo a plantearles el problema:
> Estoy desarrollando una aplicación para PDA (Windows CE y Windows Mobile), con Visual Basic 2008 y SQL Server CE.  La aplicación recoge todo muy bien, alimento la base de datos desde un xml que genero desde VFP.
> Bueno, aclaro también, el sistema en producción está hecho con VFP, pero los Hand Held (PDA), para no complicarme tanto, hice la aplicación en VB 2008, ya vi como instalar el  .net FrameWork Compact Edition y también cómo instalar el SQL Server CE (para eso, me comprometí a elaborar un tutorial), ok, hasta ahí todo bien, desde VFP genero el XML que contiene el maestro que se carga en el PDA, todo bien.
> Ahora, cuando ya debo procesar la información leída, desde el PDA, genero el XML y desde VFP, con el XMLToCursor lo paso a DBF y ahí estamos bien, pero los problemas suceden con los datos que se exportan.
> La estructura de la tabla que exporto (XML) lleva, código (texto de 8 dígitos), descripción (Texto 20 dígitos) y Código de Barra (principalmente), pero el código y el código de barra, son números, pero con formato de texto y contienen valores tales como
>

--

Marco Plaza

unread,
Jul 14, 2012, 1:27:47 AM7/14/12
to publice...@googlegroups.com


Hola.. puedes cargar el xml a un xml adapter y antes de crear el cursor modificas el o los campos como desees.

por ejemplo para cambiar el primer campo de la tabla a caracter de 20:

archivoXml = "tuarchivoXml.xml"

o = CREATEOBJECT("XMLAdapter")

with o

.LoadXML(archivoXml,.T.)

.Tables(1).Fields(1).DataType = "C"
.Tables(1).Fields(1).MaxLength = 20
.Tables(1).ToCursor()

endwith

*-------------------------------------------------------

Saludos

Marco

Ing.Daniel Bojorge

unread,
Jul 14, 2012, 2:22:59 AM7/14/12
to publice...@googlegroups.com
Imposible, a como lo haga me dice error de índice
Probé así:

xml = GETFILE("xml")
o = CREATEOBJECT("XMLAdapter")
o.LoadXML(Xml,.T.)
o.Tables(1).Fields(1).DataType = "C"
o.Tables(0).Fields(1).DataType = "C"
o.Tables(1).Fields(1).DataType = "C"
o.Tables(1).toCursor()


y así

o = NEWOBJECT("XMLAdapter")
?o.LoadXML(Xml,.T.)
o.tables(1).name
o.tables(1).Fields(1).DataType = "C"
?o.tables(1).Fields(1).DataType = "C"
?o.tables.Item(1).Fields(1).DataType = "C"
?o.tables.Item(1).name
o.TABLES.ITEM(1).FIELDS.ITEM(1).DATATYPE
?o.TABLES.ITEM(1).FIELDS.ITEM(1).DATATYPE
o.RespectNesting = .T.
?o.TABLES.ITEM(1).FIELDS.ITEM(1).DATATYPE



Y en todas las pruebas

Imágenes integradas 1


Seguiré intentando.



Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



XML.png

Marco Plaza

unread,
Jul 14, 2012, 1:48:28 PM7/14/12
to publice...@googlegroups.com
debe ser un problema en el formato del archivo xml. Si lo subes lo podemos ver.

Saludos



El viernes, 13 de julio de 2012 19:05:36 UTC-4:30, Daniel Bojorge (Foros) escribió:

Hugo C.

unread,
Jul 14, 2012, 5:22:13 PM7/14/12
to publice...@googlegroups.com
Checa esta linea de código ("o.Tables(0)").

o.Tables(0).Fields(1).DataType = "C" 


Saludos,
El sábado, 14 de julio de 2012 00:22:59 UTC-6, Daniel Bojorge (Foros) escribió:
Imposible, a como lo haga me dice error de índicea Probé así:

Ing.Daniel Bojorge

unread,
Jul 15, 2012, 11:07:16 PM7/15/12
to publice...@googlegroups.com
Disculpen la demora, nuevamente de reposo, espero poder llegar mañana a trabajar.

Ok, lo que yo hago es esto:

xml = GETFILE("xml")
?o.LoadXML(xml,.t.)
o.tables(1).fields(3).datatype="C"


ya probé con
xml = GETFILE("xml")
?o.LoadXML(xml,.t.)
o.tables(0).fields(3).datatype="C"

y el resultado siempre es el mismo

Adjunto un pequeño xml con algunos registros (el que genera es más grande, pero igual es el mismo problema)


Puse el campo 3 porque es el del código, también puede ser el campo 11 (donde está el código de barra). Pero el resultado es siempre el mismo.




Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



PDA1_.xml

Ing.Daniel Bojorge

unread,
Jul 15, 2012, 11:33:12 PM7/15/12
to publice...@googlegroups.com
Olvidé mencionar que este xml fue creado desde vb 2008, convirtiendo un dataset a xml

ds.writexml() (con ese método)





Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



Ing.Daniel Bojorge

unread,
Jul 16, 2012, 10:44:52 AM7/16/12
to publice...@googlegroups.com
Ok, ya resolví, desde VB2008 (donde genero el XML), le agregué el SCHEMA, de la siguiente forma:

ds.WriteXml(archivo, XmlWriteMode.WriteSchema)


Lo que está en negrita es lo que agregué al código que ya tenía.

Ahora, desde VFP, utilizo el XMLAdapter y corrigo los campos, por si quedan con datos muy grandes, el xml genera campos con string y vfp los entiende como MEMO, así que cambio de M a C, ya con el XMLAdapter.

Muchas gracias porque aunque hubiese resuelto lo del schema, con vfp, no hubiese pensado en usar el XMLAdapter, sino el xmltocursor.





Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



Ing.Daniel Bojorge

unread,
Jul 16, 2012, 10:46:22 AM7/16/12
to publice...@googlegroups.com
Ok, ya resolví, desde VB2008 (donde genero el XML), le agregué el SCHEMA, de la siguiente forma:

ds.WriteXml(archivo, XmlWriteMode.WriteSchema)


Lo que está en negrita es lo que agregué al código que ya tenía.

Ahora, desde VFP, utilizo el XMLAdapter y corrijo los campos, por si quedan con datos muy grandes, el xml genera campos con string y vfp los entiende como MEMO, así que cambio de M a C, ya con el XMLAdapter.

Muchas gracias porque aunque hubiese resuelto lo del schema, con vfp, no hubiese pensado en usar el XMLAdapter, sino el xmltocursor.



jajaja lo vuelvo a poner para corregir el error ortográfico (puse corrigo).





Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



Marco Plaza

unread,
Jul 16, 2012, 11:58:53 AM7/16/12
to publice...@googlegroups.com

Hola Daniel, puedes hacer una trampita:

axml=getfile()
x= filetostr(axml)
x=strtran(x,'<codigo>','<codigo>_')
x=strtran(x,'<codbar>','<codbar>_')
strtofile(x,'xml.tmp')
xmltocursor('xml.tmp','temp',512)

replace codigo with strtran(codigo,'_',''), codbar with strtran(codbar,'_','') all in temp
browse

*------------------------------------
el cursoradapter requiere un esquema para poder importar la tabla.
se puede crear el dataset y modificarlo pero es algo mas largo.

Saludos

Ing.Daniel Bojorge

unread,
Jul 16, 2012, 12:32:52 PM7/16/12
to publice...@googlegroups.com
Marco, saldría bien eso que decís, así los debe tomar (si o si) como string y no numérico, pero si mirás ya logré hacerlo, desde vb 2008 al generar el xml, le agregué el esquema al xml y ya con esto desde vfp ya funciona bien.


Gracias, muchas gracias por este aporte.



Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



Mario Oviedo

unread,
Aug 11, 2012, 9:58:32 PM8/11/12
to publice...@googlegroups.com
ya haras el manual para este tipo de hardware

bueno por favor y cuando tengas tiempo
Reply all
Reply to author
Forward
0 new messages