In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Obtener estructura de tablas en base de datos MDB

Foro de Xailer profesional en español
Responder
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Obtener estructura de tablas en base de datos MDB

Mensaje por jasm »

Necesito obtener un array con la estructura de las tablas contenidas en
una base de datos MDB de Access y utilizo el siguiente algoritmo usando ADO:
nCampos := Len( ::oSQLTable1:FieldNames )
FOR nI := 1 TO nCampos
// Ajustador y numerador para nombres de campo largos y repetidos
cName := Alltrim( ::oSQLTable1:FieldName( nI ) )
IF Len( cName ) >= 8
cName := Substr( cName, 1, 8 )
nJ := 0
WHILE Ascan( aStru, { | a | a[ 1 ] == cName } ) > 0
nJ++
cName := Substr( cName, 1, 8 ) + StrZero( nJ, 2, 0 )
END DO
END IF
//Guardo la estructura en un array
AAdd( aStru, { cName,;
IF( ::oSQLTable1:FieldLen( nI ) > 255, "M",
Alltrim( ::oSQLTable1:FieldType( nI ) ) ),;
::oSQLTable1:FieldLen( nI ),;
::oSQLTable1:FieldDec( nI ) } )
NEXT
Y el resultado que obtengo es el siguiente:
Codi C 16 255
Nom C 50 255
EstocMin N 4 255
EstocMax N 4 255
Magatzem N 4 255
Magatzem01 N 4 255
Magatzem02 N 4 255
Magatzem03 N 4 255
Magatzem04 N 4 255
ControlM L 1 255
PreuMitj N 4 255
PreuUlti N 4 255
PreuMitj01 N 4 255
PreuUlti01 N 4 255
Formula1 C 10 255
Formula2 C 10 255
Formula3 C 10 255
CompteVe C 8 255
CompteCo C 8 255
CompteSo C 8 255
CompteSo01 C 8 255
CompteTa C 8 255
CompteTa01 C 8 255
IVAClien N 4 255
IVAProve N 4 255
TaxaComp N 4 255
TaxaVend N 4 255
EnvasPer N 4 255
QuilosPe N 4 255
QuilosNo N 4 255
Descripc C 30 255
Descripc01 C 30 255
Descripc02 C 30 255
Descripc03 C 30 255
Descripc04 C 30 255
Descripc05 C 30 255
UnitatsT N 4 255
UnitatsT01 N 4 255
UnitatsT02 N 4 255
UnitatsT03 N 4 255
UnitatsT04 N 4 255
UnitatsT05 N 4 255
TaraTipu N 4 255
TaraTipu01 N 4 255
TaraTipu02 N 4 255
TaraTipu03 N 4 255
TaraTipu04 N 4 255
TaraTipu05 N 4 255
Tarifa1 N 4 255
Tarifa2 N 4 255
Tarifa3 N 4 255
Tarifa4 N 4 255
Tarifa5 N 4 255
Tarifa6 N 4 255
Tarifa7 N 4 255
Tarifa8 N 4 255
Tarifa9 N 4 255
Observese que el valor de ::oSQLTable1:FieldDec( nI )es siempre 255, sea
cual sea el tipo de dato.
Observese, también, que para los campos Tarifa1 a Tarifa9 que son
numéricos de 4 enteros y 4 decimales salen el mismo valor 255 para los
decimales.
Por otra parte, ¿existe alguna forma directa para obtener la estructura
de cualquier tabla SQL usando ADO desde Xailer?
Saludos,
Jose Alfonso Suarez Moreno
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Obtener estructura de tablas en base de datos MDB

Mensaje por ignacio »

José Alfosno,
Compruebo que con Access la propiedad ADO oField:NumericScale siempre
devuelve el valor 255 (-1) excepto cuando es un campo numérico y se
especifíca que es de tipo DECIMAL.
He modificado la clase para que en dicho caso retorne un valor cero.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Alfonso Suárez Moreno" <jasm@tpvsoft.com> escribió en el mensaje
news:45a2c294$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Necesito obtener un array con la estructura de las tablas contenidas en
> una base de datos MDB de Access y utilizo el siguiente algoritmo usando
> ADO:
>
> nCampos := Len( ::oSQLTable1:FieldNames )
> FOR nI := 1 TO nCampos
>
> // Ajustador y numerador para nombres de campo largos y repetidos
> cName := Alltrim( ::oSQLTable1:FieldName( nI ) )
> IF Len( cName ) >= 8
> cName := Substr( cName, 1, 8 )
> nJ := 0
> WHILE Ascan( aStru, { | a | a[ 1 ] == cName } ) > 0
> nJ++
> cName := Substr( cName, 1, 8 ) + StrZero( nJ, 2, 0 )
> END DO
> END IF
>
> //Guardo la estructura en un array
> AAdd( aStru, { cName,;
> IF( ::oSQLTable1:FieldLen( nI ) > 255, "M",
> Alltrim( ::oSQLTable1:FieldType( nI ) ) ),;
> ::oSQLTable1:FieldLen( nI ),;
> ::oSQLTable1:FieldDec( nI ) } )
>
> NEXT
>
> Y el resultado que obtengo es el siguiente:
>
> Codi C 16 255
> Nom C 50 255
> EstocMin N 4 255
> EstocMax N 4 255
> Magatzem N 4 255
> Magatzem01 N 4 255
> Magatzem02 N 4 255
> Magatzem03 N 4 255
> Magatzem04 N 4 255
> ControlM L 1 255
> PreuMitj N 4 255
> PreuUlti N 4 255
> PreuMitj01 N 4 255
> PreuUlti01 N 4 255
> Formula1 C 10 255
> Formula2 C 10 255
> Formula3 C 10 255
> CompteVe C 8 255
> CompteCo C 8 255
> CompteSo C 8 255
> CompteSo01 C 8 255
> CompteTa C 8 255
> CompteTa01 C 8 255
> IVAClien N 4 255
> IVAProve N 4 255
> TaxaComp N 4 255
> TaxaVend N 4 255
> EnvasPer N 4 255
> QuilosPe N 4 255
> QuilosNo N 4 255
> Descripc C 30 255
> Descripc01 C 30 255
> Descripc02 C 30 255
> Descripc03 C 30 255
> Descripc04 C 30 255
> Descripc05 C 30 255
> UnitatsT N 4 255
> UnitatsT01 N 4 255
> UnitatsT02 N 4 255
> UnitatsT03 N 4 255
> UnitatsT04 N 4 255
> UnitatsT05 N 4 255
> TaraTipu N 4 255
> TaraTipu01 N 4 255
> TaraTipu02 N 4 255
> TaraTipu03 N 4 255
> TaraTipu04 N 4 255
> TaraTipu05 N 4 255
> Tarifa1 N 4 255
> Tarifa2 N 4 255
> Tarifa3 N 4 255
> Tarifa4 N 4 255
> Tarifa5 N 4 255
> Tarifa6 N 4 255
> Tarifa7 N 4 255
> Tarifa8 N 4 255
> Tarifa9 N 4 255
>
> Observese que el valor de ::oSQLTable1:FieldDec( nI )es siempre 255, sea
> cual sea el tipo de dato.
>
> Observese, también, que para los campos Tarifa1 a Tarifa9 que son
> numéricos de 4 enteros y 4 decimales salen el mismo valor 255 para los
> decimales.
>
> Por otra parte, ¿existe alguna forma directa para obtener la estructura de
> cualquier tabla SQL usando ADO desde Xailer?
>
> Saludos,
>
>
> Jose Alfonso Suarez Moreno
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Obtener estructura de tablas en base de datos MDB

Mensaje por jasm »

Ignacio,
De acuerdo.
Pero está ocurriendo que para los tipos DECIMAL en .mdb el método
FieldSQLType( nField ) devuelve 4 (entero).
Saludos y gracias,
Jose Alfonso Suarez Moreno
Ignacio Ortiz de Zúñiga escribió:
> José Alfosno,
>
> Compruebo que con Access la propiedad ADO oField:NumericScale siempre
> devuelve el valor 255 (-1) excepto cuando es un campo numérico y se
> especifí­ca que es de tipo DECIMAL.
>
> He modificado la clase para que en dicho caso retorne un valor cero.
>
> Un saludo,
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Obtener estructura de tablas en base de datos MDB

Mensaje por ignacio »

José Alfonso,
Pues cambialo a numérico-decimal desde el propio Access y te devolverá 131
(decimal).
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Alfonso Suárez Moreno" <jasm@tpvsoft.com> escribió en el mensaje
news:45a36811$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> De acuerdo.
>
> Pero está ocurriendo que para los tipos DECIMAL en .mdb el método
> FieldSQLType( nField ) devuelve 4 (entero).
>
> Saludos y gracias,
>
> Jose Alfonso Suarez Moreno
>
> Ignacio Ortiz de Zúñiga escribió:
>> José Alfosno,
>>
>> Compruebo que con Access la propiedad ADO oField:NumericScale siempre
>> devuelve el valor 255 (-1) excepto cuando es un campo numérico y se
>> especifíca que es de tipo DECIMAL.
>>
>> He modificado la clase para que en dicho caso retorne un valor cero.
>>
>> Un saludo,
>>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Obtener estructura de tablas en base de datos MDB

Mensaje por ignacio »

This is a multi-part message in MIME format.
------=_NextPart_000_000C_01C733F0.94D1E620
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_000D_01C733F0.94D1E620"
------=_NextPart_001_000D_01C733F0.94D1E620
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Jos=E9 Alfonso,=20
En mi opini=F3n no hay tal problema.=20
ADO SOLO retorna los decimales cuando realmente sabe los que son y esto =
SOLO es posible cuando el campo n=FAmerico es del tipo decimal. Un tipo =
num=E9rico SIMPLE es por definici=F3n un tipo de coma flotante y por lo =
tanto no tiene prefijado ning=FAn n=FAmero de decimales, lo contrario =
ser=EDa desdecir a su propia definici=F3n.=20
Si le pones tipo NUMERICO-DECIMAL como te he indicado veras que =
entonces, y s=F3lo entonces te reporta correctamente el n=FAmero de =
decimales que tiene.=20
Un saludo,
--=20
Ignacio Ortiz de Z=FA=F1iga
http://www.xailer.com
"Jos=E9 Alfonso Su=E1rez Moreno" <jasm@tpvsoft.com> escribi=F3 en el =
mensaje news:[email=45a37d15@news.xailer.com...]45a37d15@news.xailer.com...[/email]
> Ignacio,
>=20
> Aunque en las especificaciones que me dieron por escrito de estas =
tablas=20
> dice que los campos son del tipo DECIMAL de 4 enteros y 4 decimales,=20
> compruebo que en la tabla los tipos de datos son NUMERICO con tama=F1o =
> SIMPLE que seg=FAn Microsoft:
>=20
> "Almacena n=FAmeros entre
> -3,402823E38 y -1,401298E-45 para valores negativos,
> y entre 1,401298E-45 y 3,402823E38 para valores positivos."
>=20
> Por lo que creo que hay un problema de interpretaci=F3n de tipos de =
datos=20
> entre ADO y Xailer ya que nos falsea resultados devolviendo los =
valores=20
> de estos campos como num=E9ricos con dos decimales, a parte, claro =
est=E1,=20
> de que los tipos de datos no son correctamente traducidos.
>=20
> Como se puede observar en las im=E1genes, Xailer retorna los valores=20
> redondeados a dos decimales cuando no deber=EDa ser as=ED.
>=20
> Saludos y gracias,
>=20
> Jose Alfonso Suarez Moreno
>=20
>=20
>
------=_NextPart_001_000D_01C733F0.94D1E620
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.5730.11" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>Jos=E9 Alfonso, </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>En mi opini=F3n noÂhay tal =
problema.=20
</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ADO SOLO retorna los decimales cuando =
realmente=20
sabe los que son y esto SOLO es posible cuando el campo n=FAmerico es =
del tipo=20
decimal. Un tipo num=E9rico SIMPLE es por definici=F3n un tipo de coma =
flotante y=20
por lo tanto no tiene prefijado ning=FAn n=FAmero de decimales, lo =
contrario ser=EDa=20
desdecir a su propia definici=F3n. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Si le pones tipo NUMERICO-DECIMAL como =
te he=20
indicadoÂveras que entonces, y s=F3lo entonces te reporta =
correctamente el=20
n=FAmero de decimales que tiene. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Un saludo,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial =
size=3D2></FONT>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:000701c733e8$330b0d20$0202fea9@ozlan.local"=20
align=3Dbaseline border=3D0></DIV>
<DIV><BR><FONT face=3DArial size=3D2>-- <BR>Ignacio Ortiz de =
Z=FA=F1iga<BR></FONT><A=20
href=3D"http://www.xailer.com"><FONT face=3DArial=20
size=3D2>http://www.xailer.com</FONT></A></DIV>
<DIV><FONT face=3DArial size=3D2>"Jos=E9 Alfonso Su=E1rez Moreno" =
<</FONT><A=20
href=3D"mailto:jasm@tpvsoft.com"><FONT face=3DArial=20
size=3D2>jasm@tpvsoft.com</FONT></A><FONT face=3DArial size=3D2>> =
escribi=F3 en el=20
mensaje </FONT><A href=3D"news:45a37d15@news.xailer.com"><FONT =
face=3DArial=20
size=3D2>news:45a37d15@news.xailer.com</FONT></A><FONT face=3DArial=20
size=3D2>...</FONT></DIV><FONT face=3DArial size=3D2>> =
Ignacio,<BR>> <BR>>=20
Aunque en las especificaciones que me dieron por escrito de estas tablas =
<BR>> dice que los campos son del tipo DECIMAL de 4 enteros y 4 =
decimales,=20
<BR>> compruebo que en la tabla los tipos de datos son NUMERICO con =
tama=F1o=20
<BR>> SIMPLE que seg=FAn Microsoft:<BR>> <BR>> "Almacena =
n=FAmeros=20
entre<BR>> -3,402823E38 y -1,401298E-45 para valores =
negativos,<BR>> y=20
entre 1,401298E-45 y 3,402823E38 para valores positivos."<BR>> =
<BR>> Por=20
lo que creo que hay un problema de interpretaci=F3n de tipos de datos =
<BR>>=20
entre ADO y Xailer ya que nos falsea resultados devolviendo los valores =
<BR>>=20
de estos campos como num=E9ricos con dos decimales, a parte, claro =
est=E1, <BR>>=20
de que los tipos de datos no son correctamente traducidos.<BR>> =
<BR>> Como=20
se puede observar en las im=E1genes, Xailer retorna los valores <BR>> =
redondeados a dos decimales cuando no deber=EDa ser as=ED.<BR>> =
<BR>> Saludos=20
y gracias,<BR>> <BR>> Jose Alfonso Suarez Moreno<BR>> <BR>>=20
<BR>></FONT></BODY></HTML>
------=_NextPart_001_000D_01C733F0.94D1E620--
------=_NextPart_000_000C_01C733F0.94D1E620
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000701c733e8$330b0d20$0202fea9@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAM8AAABrCAIAAABfbkHwAAAABmJLR0QAAAAA AAD5Q7t/AAAACXBI
WXMAAA7EAAAOxAGVKw4bAAALJklEQVR4nO2c244jtxGG+UBBgNw5wL6FH2gf IEgAX/kiCQxfBblO
EGQRIBECI/GNAQcIgpw29u7OzM6M5iBpdJZmN1RToopFsqrZrZaarSr8aJDV xeKhvmmNeu1Rdzf/
FImOI8VGiESHktAmOp6ENtHxJLSJjiehTXQ8ObQNH79785ef9T//4dVPfpCX Lj5/8frPP9XrZzcs
OqEc2jRqD1/8aPHqk49fv8hLqz/+WK9cr5/dsOiEcmh7/eWni99/8vGvL3KU Xrle/69f/emzX/22
zfryN3/4+m/f6MewEVuhLsmh7bOf/2K9/pCv9Povbu4+ttvuh0+/++qbb//x rdCWPW0fMrDndzd9
/QwW2lpHm1KKjbHS639+Xhe2aq1Wq+V0PNIfqUJbGm0KGBtcTUmZ9fqXy0W7 NZ+MR4OHW6EtjbYk
DioraRa9/vl8WlI6MxtTTUTm2WzyNHy4v70S2hJoi0GAHnXBh58fAxMG75aU Xv90Op5On6zgApAf
dg8rIvlkMhoO+v3rt0JbXdoQUuU9RLZ02nRRR1ZF4QPtRkVMNJkMh4Pb/vUb oa0KbfbJAdvQg4bQ
MSjAv0tLr18/PHRFrfRw1PY9pmEMdcsP8UcFY8bjweDx5vb990JbFdpgV3lk QE/5GDqeUEHbpqJW
kADrgXeRhw0o7wnmfHp6fHy4vrkS2lJoY8mo44ndZaXXbypqpYejdtDjO8sM sRaMQWHGMxo9PNy/
v778TmhLo23tfepBj+3CYDbGz6mSadNFfbBSmzI7bd9j27EA2pM00Wh0/3B/ dX35P6Etmba2Sa/f
VNRKlxm1fQ8bcCiP1nB4d393+f7itdDWBdr0R9VweG+lgMWcbADtSRo1GNzd 9S+v3gltHaFt8/w4
lApK+LDyGgz6d/2Lq3f/Fdq6QJup6KGkaWNjkvT4eNO/fXf59j9CWxdoGwxu 26zHh+vb6zcXb/8l
tHWBtn7/Uutuo6sTyizD180GtX9///rvQlsXaBO1WZ2iTdRyRWlbrZ6DWpNa rSlxYz9Qiqxnu6o1
LfIUuE1RIuddrT6QonaEju7lL1/18jeCtnUlkUyQ/1krd/rUaB6LqqL3y42l RZ6k0FZCDG3mVadp
lKdNBwchs34Wmsqi98uNzZI2fapcSEVjaFOucaiVog0yJ7RFFaIN1oKr7N6S gnvp8eWt1LOtHGdG
DG2EhDZHEdr2lWuOieYyV6DN/nj53V1jTwn0KGAWGRSDINvf3eGFuog2kJ/p Bv3Ws3YW30baYNcu
Fd6yHnuFnlhwz5vlgFaFNuS3d/2GHwkhW3ue2KRoopBn9wiM1JVa6vLZXI2w J+3R3pQI2pTLDRvm
N2KRB7cqtClgq1gJI5E1aYtNHaMtFu808qcNGhEGu6hBDD+gJdPmt60HNYKR NWmDAa4nQBvokkvN
nzZc1BTaYHAs4aEsRNtqI7hVeNx+O1zChmnzPGdHm/Lo6UVwQU7UYIcf0JJp M11rq1gJI5GItjWI
8Y8YDV95wWAU/uhM/STdhwHs7MCTi34D4juhR7kMBRt+fBMWp225Dmq5WpFa E6JHxmbcirZaY1dq
A1lkVfRQfSBxMasiT2Pp6phvd5szoW0ztdB2HBPamP0wQ49IWwcUoG37O1Dk jBhghLbGaOMeHBmY
0MbshxkqtKVYlLalt+FyasrYspNrou5zWyKZYCbmcpfWWdCmXGMPhUEGWJEt wYQ2rpQZGE8bexCu
yprQlqQO07Z5nWg2GaQNPepMw153t5a2YQzeYru+CW1cKTMwnjZoS5c/BQgD ni09qGFN7VhEnli8
MaGNK2UGFqet+KPEm9q7f6bYJwN73IGwsafWzRxrO6KN/tPKzVlz87qphLYE 2nyehDbG3FRCm9DW
5LxuqjOlbRn6Bd8eUYy2pfdJaj3obsXKESVnx9ax5uZ1U50FbcknSJ9+HdWZ tzlrbl43VedpWwQV
9u5E3mTGcqLLSt6nBzNrpodSVm9eR0JbQEknmCiqcHRV61WdHno82jqgEG3m X9/LnQJS0gkmiioc
XdV6VaeHHo827sGRgQltbNXpoUJbgp2eNv09lBm2FVU4uqr1qk4PFdoSjKHN fW1Bnc72jFzbkOTY
XKtwzv02raR5PaMzU6Lzcqvi91Vyv5A2xf0vMK01nja74TLAccafcsnTP+C8 edGGwIq122kB2rb/
Elxs0qcNXpfg4Werbj0L8GwDzv3zDDphV4UeeFxdaaPrmhNtvThhqpO0KYCa fxcWQ7nMmXNULnOE
hzh9r6600XXNmLZe7p+kiDZrkCr/riJp2/k356iEthJCqc7u2eZ7gndhMWB3 x5zQVkooVXdpK76f
zxfzeVF107DacLDr+W1Eid+dz52rMetZzGdGsL0VWZs5qcViRogZi5aBV0WK WRcpN5XQtpHa2e6M
nN/97dUYZGs+D/iFtr0itNlD25fQ87TWGNpCp0+fEckEaVxdhbbsTWgT2o5n Qls2tHVAQdqK71P0
KUc0ryEu85QUn79t8yZlftndZ5vQdox5kzILbcHaYBVfOdlz34jLnFCbJJ1q 3qTMZ0Gbco0uzCJ0
pkJbXAmZX8bfgGRkPG10MbzaYAltcSVkNrSprN7l+halzey5YAUfhP3xCnRn oDvbdm0D+o8quq7s
8MqZ68zrBvufpN2kzYHJ4w914XkZsHy8TgBcnarXyVxnXjcY0ZYjar0ytKFt Q/ICAeAZhmhD/qOq
TtXrZK4zrxsMacsUtV4F2qzf3EIBkCRIm+8/qupUvU7mOvO6wfBbAlnQVluA tu3L7GKTMdrsLaGt
ulIy+98ScrQ4bbOJlnINekwA8szcIaY78/x2LNSslqaEgtOdXNyOHFnaoHHF bZ0xtKWKPrI6Yzmd
BW25m9B2MnE7ciS0JZ9gnbGcuk9bBxSgbfsOnTusCidYZyyn7tPGPTgysCht s9m4kviDi2k+HRPi
5m1qVXTmOSOaNjKzu32hLSi2eFERqBVfbNmpk1dlvy+TojILbUnG0JZeZrZ4 UdWnLR4WnjFH2vJ9
/dHrGG2pq8qONghZjsCFvpMWL6/NnlGZYde2FTBbRdSdhV7zwqob8yEDwc5c cBnWY6/Qo0ITIdqQ
3/W0iDancl2ibTp90tJbMg3bnelf2AuZNva4R6acko8D8Y7nCarw79vTIlJf jZAnmBA24C7svuDV
9xvNSNn1BDWbPRFixroTIdpyRK3XEG0KmGXO0ubc3XlK0gatAm3u8D1bvt8O aSFtKk/Uek3QpsAT
DnvceChTYJY2VBLrKUMb3Av0oD3CGLSkNtCWL2q9MG3FbxVHoA2Rl0Qb8hyK ttB+W0Rb1qj1ytBm
zffAx9LWw32Swnivi2sJ81jIYHfqZoNXnzZ/O77f77aNNmhccVtnDG2+iKO3 1TqBJqTqjCXFsUiJ
GzuC6uzb3VTa7I8ae74NSmjLwQ5AW/nzbVBnQFsHFKDN/I5V9YxOpDOgjXtw ZGBCGzdWaDuc1aVN
ud8lmbrWE/UtpGHaNlMLbbUtTttkpLV9EVC0g13bLqUpKW5sQRuXhMscWDM7 nJia3fKBJLSlqzQT
wbFCW+4WoG33+bLZpKmNf53uyPNZjAXsu6B+sIuy+WkDwSEsgpEqtKr9NZLW GR6M4Sg5lM6dNqug
3w/byOUM1tVWLprHAxS1g7e2nsg6A2sI/ST4E6HMR9AZ0RZrWLNdezqwHYgP gQKzBfK4mMJUwSQK
zgJSwfzbdnANEdpQDNpjc+o4bZPJaFLUw29Mx9urEWoXJRyaq9W2O96oiN9e oceJnODupGjbK1Jw
rPVMIsPptrnCPDA/zBzXiBQ1tpO0/R/oWlDogu/8EgAAAABJRU5ErkJggg==
------=_NextPart_000_000C_01C733F0.94D1E620--

Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Obtener estructura de tablas en base de datos MDB

Mensaje por jasm »

Ignacio,
>ADO SOLO retorna los decimales cuando realmente sabe los que son y
>esto SOLO es posible cuando el campo númerico es del tipo decimal.
>Un tipo numérico SIMPLE es por definición un tipo de coma flotante y
>por lo tanto no tiene prefijado ningún número de decimales,
>lo contrario serí­a desdecir a su propia definición.
Vale. ADO no retorna decimales. Pero si retorna el valor REAL del campo
¿cierto? ¿Por que entonces Xailer lo redondea?. Ya se que no tenemos
coma flotante en xHarbour, pero algo se podrá hacer ¿no?
> Si le pones tipo NUMERICO-DECIMAL como te he indicado veras que
> entonces, y sólo entonces te reporta correctamente el número de
> decimales que tiene.
Es obvio que no puedo tocar la estructura de la MDB.
Bien podrí­a hacer una copia, hacer los cambios y listo, pero para eso no
hago programa de conversión ni me caliento la cabeza y perdemos un cliente.
Es necesario convertirle los datos de MDB a DBF para comunicar dos
programas de dos desarrolladores distintos y ninguno es mí­o. A mi me
toca la parte de convertir de uno a otro.
Saludos
Jose A. Suarez
>
> Un saludo,
>
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
> "José Alfonso Suárez Moreno" <jasm@tpvsoft.com
> <mailto:jasm@tpvsoft.com>> escribió en el mensaje
> news:[email=45a37d15@news.xailer.com...]45a37d15@news.xailer.com...[/email]
> > Ignacio,
> >
> > Aunque en las especificaciones que me dieron por escrito de estas tablas
> > dice que los campos son del tipo DECIMAL de 4 enteros y 4 decimales,
> > compruebo que en la tabla los tipos de datos son NUMERICO con tamaño
> > SIMPLE que según Microsoft:
> >
> > "Almacena números entre
> > -3,402823E38 y -1,401298E-45 para valores negativos,
> > y entre 1,401298E-45 y 3,402823E38 para valores positivos."
> >
> > Por lo que creo que hay un problema de interpretación de tipos de datos
> > entre ADO y Xailer ya que nos falsea resultados devolviendo los valores
> > de estos campos como numéricos con dos decimales, a parte, claro está,
> > de que los tipos de datos no son correctamente traducidos.
> >
> > Como se puede observar en las imágenes, Xailer retorna los valores
> > redondeados a dos decimales cuando no deberí­a ser así­.
> >
> > Saludos y gracias,
> >
> > Jose Alfonso Suarez Moreno
> >
> >
> >
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Obtener estructura de tablas en base de datos MDB

Mensaje por jose.luis »

Hola José Alfonso e Ignacio,
¿Habéis probado a cambiar el SET DECIMALS TO xx ?
Haced la prueba con otro valor que 2 y decidme si para los campos real,
double, etc. el número de decimales devuelto es el indicado en el set.
Saludos,
José Luis Capel
"José Alfonso Suárez Moreno" <jasm@tpvsoft.com> escribió en el mensaje
news:[email=45a38a95@news.xailer.com...]45a38a95@news.xailer.com...[/email]
> Ignacio,
>
>>ADO SOLO retorna los decimales cuando realmente sabe los que son y esto
>>SOLO es posible cuando el campo númerico es del tipo decimal. Un tipo
>>numérico SIMPLE es por definición un tipo de coma flotante y
>>por lo tanto no tiene prefijado ningún número de decimales, lo contrario
>>sería desdecir a su propia definición.
>
> Vale. ADO no retorna decimales. Pero si retorna el valor REAL del campo
> ¿cierto? ¿Por que entonces Xailer lo redondea?. Ya se que no tenemos coma
> flotante en xHarbour, pero algo se podrá hacer ¿no?
>
>> Si le pones tipo NUMERICO-DECIMAL como te he indicado veras que entonces,
>> y sólo entonces te reporta correctamente el número de decimales que
>> tiene.
>
> Es obvio que no puedo tocar la estructura de la MDB.
> Bien podría hacer una copia, hacer los cambios y listo, pero para eso no
> hago programa de conversión ni me caliento la cabeza y perdemos un
> cliente.
>
> Es necesario convertirle los datos de MDB a DBF para comunicar dos
> programas de dos desarrolladores distintos y ninguno es mío. A mi me toca
> la parte de convertir de uno a otro.
>
> Saludos
>
> Jose A. Suarez
>> Un saludo,
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>> "José Alfonso Suárez Moreno" <jasm@tpvsoft.com <mailto:jasm@tpvsoft.com>>
>> escribió en el mensaje news:[email=45a37d15@news.xailer.com...]45a37d15@news.xailer.com...[/email]
>> > Ignacio,
>> >
>> > Aunque en las especificaciones que me dieron por escrito de estas
>> tablas
>> > dice que los campos son del tipo DECIMAL de 4 enteros y 4 decimales,
>> > compruebo que en la tabla los tipos de datos son NUMERICO con tamaño
>> > SIMPLE que según Microsoft:
>> >
>> > "Almacena números entre
>> > -3,402823E38 y -1,401298E-45 para valores negativos,
>> > y entre 1,401298E-45 y 3,402823E38 para valores positivos."
>> >
>> > Por lo que creo que hay un problema de interpretación de tipos de
>> datos
>> > entre ADO y Xailer ya que nos falsea resultados devolviendo los
>> valores
>> > de estos campos como numéricos con dos decimales, a parte, claro está,
>> > de que los tipos de datos no son correctamente traducidos.
>> >
>> > Como se puede observar en las imágenes, Xailer retorna los valores
>> > redondeados a dos decimales cuando no debería ser así.
>> >
>> > Saludos y gracias,
>> >
>> > Jose Alfonso Suarez Moreno
>> >
>> >
>> >
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Obtener estructura de tablas en base de datos MDB

Mensaje por ignacio »

José Alfonso,
> Vale. ADO no retorna decimales. Pero si retorna el valor REAL del campo
> ¿cierto? ¿Por que entonces Xailer lo redondea?. Ya se que no tenemos coma
> flotante en xHarbour, pero algo se podrá hacer ¿no?
Es la primera vez que comentas realmente tu problema, y es que pierdes
precisión decimal cuando recuperas valores de campos numéricos con
decimales. Logicamente ese problema tiene que soluionarse con la instrucción
SET DECIMALS TO .....
xHarbour si que tiene tipo con coma flotante, en concreto, double, que como
su nombre indica tiene el doble de precisión que un simple y ocupa 8 bytes,
por lo tanto puede manejar tipos numéricos con gran cantidad de decimales
pero al igual que con el simple no se puede prefijar un número de decimales.
Debes de marcar tu la precisión que deseas con la instrucción set decimals
to.
> Es obvio que no puedo tocar la estructura de la MDB.
> Bien podría hacer una copia, hacer los cambios y listo, pero para eso no
> hago programa de conversión ni me caliento la cabeza y perdemos un
> cliente.
No te he planteado la necesidad de cambiar la estructura. Tan sólo te he
indicado como Xailer reporta correctamente el número de decimales, eso es
todo.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Obtener estructura de tablas en base de datos MDB

Mensaje por jasm »

Jose Luis, Ignacio,
Con SET DECIMALS TO 6 creo que se me resuelve el problema de la precisión.
Solo me queda resolver el de los tipos de datos para poder crear las
tablas DBF y terminar la conversión entre las dos aplicaciones.
Gracias.
Saludos
Jose A. Suarez
Responder