Leer de Microsoft SQL

30/06/2004 - 10:42 por Javier | Informe spam
Hola a todos.

Tengo un problema con un programa en C++ es el siguiente.
Este código que pongo a continuación para leer de una base
de datos de SQL, los campos que tiene 10 dígitos (string)
solo me retorna 9.

CDatabase *m_BaseDatos = new CDatabase();
m_BaseDatos->OpenEx(_T( "DSN=SQL" ),
CDatabase::openReadOnly | CDatabase::noOdbcDialog);

CRecordset rs( m_BaseDatos );
rs.Open( CRecordset::forwardOnly,
_T( "SELECT Webpwd FROM CLIENTES" ) );

CDBVariant varValue;

short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue, SQL_C_CHAR);
}
rs.MoveNext( );
}

rs.Close( );
delete m_BaseDatos;

En la variable varValue si en la consulta en SQL
hay "1234567890", en esta variable sale "123456789", el
último 0 no sale. Lo he probado todo pero no se porque
puede pasar, si alguien le paró esto le agradeceria que me
comentara como se solucionas.

Salu2 y Gracias Javier

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral [MVP]
30/06/2004 - 13:00 | Informe spam
Quiza te este tomando el cero como final de cadena y por eso no lo muestre,
prueba expecificando un tipo distinto de SQL_C_CHAR.

De todos modos yo no usaria las clases de MFC para trabajar con datos. Mejor
usar ADO. Lee la faq del grupo sobre el tema.


Un saludo
Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net
Respuesta Responder a este mensaje
#2 Jorge A S
07/07/2004 - 03:02 | Informe spam
Javier, a mi me paso, lo solucione modificando el sql de
la consulta, ajustandonos a tu ejemplo y si no me estoy
equivocando seria:
"SELECT cast(Webpwd, varchar(10)) as webpwd FROM
CLIENTES"
la idea seria lograr el campo un byte mas largo de lo que
verdaderamente esta cargado en la base. Desconozco la
razon de porque funciona asi pero con esto lo logre
solucionar.
Pero creo que lo mejor es trabajar con ADO, de la manera
en la que estas tarbajando a mi no me dejaba hacer
MoveFirst() y no funcionaba bien RecordCount().
Espero que te sirva. Saludos.

Jorge



Hola a todos.

Tengo un problema con un programa en C++ es el siguiente.
Este código que pongo a continuación para leer de una


base
de datos de SQL, los campos que tiene 10 dígitos (string)
solo me retorna 9.

CDatabase *m_BaseDatos = new CDatabase();
m_BaseDatos->OpenEx(_T( "DSN=SQL" ),
CDatabase::openReadOnly | CDatabase::noOdbcDialog);

CRecordset rs( m_BaseDatos );
rs.Open( CRecordset::forwardOnly,
_T( "SELECT Webpwd FROM CLIENTES" ) );

CDBVariant varValue;

short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue, SQL_C_CHAR);
}
rs.MoveNext( );
}

rs.Close( );
delete m_BaseDatos;

En la variable varValue si en la consulta en SQL
hay "1234567890", en esta variable sale "123456789", el
último 0 no sale. Lo he probado todo pero no se porque
puede pasar, si alguien le paró esto le agradeceria que


me
comentara como se solucionas.

Salu2 y Gracias Javier

.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida