Conversion de CDBVariant a char*

10/11/2003 - 15:59 por Jorwin | Informe spam
Hola amigos,
Mi problema es el siguiente estoy haciendo una pequeña
Dll, en c++, que necesita recibir varios parametros y
realizar una busqueda en una db y retornar un valor, ahora
bien todo eso lo estoy haciendo, el problema surge cuando
tengo que declarar una variable de tipo CBVariant, y dicho
valor lo tengo que retornar, pero el valor de retorno de
la funcion es char*, ahora sabe alguien como convertir un
valor de CBVariant a char*???, alguna suguerencia, porque
he intentado varias cosas y ninguna me funciono.

Bueno Espero me puedan ayudar y mucha suerte
Jorwin Cumare.

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral González
10/11/2003 - 16:21 | Informe spam
Puedes probar código similar al siguiente:

CDBVariant dbVariant;

... //Código que establece la variable dbVariant

if (dbVariant.m_dwType == DBVT_UCHAR)
pszCharPointer = (char*)dbVariant.m_chVal;

Un saludo
Rodrigo Corral González
Respuesta Responder a este mensaje
#2 Jorwin
10/11/2003 - 17:29 | Informe spam
Gracias, Rodrigo
per me surgio otro tipo de problema, logre convertir una
variable de tipi variant a char*, tu aporte me ayudo, pero
tengo otro pequeño problema,al momento de convertir es me
lo convierte pero los valores devueltos por esta
conversion son unos caracteres y no me muestra lo que he
conseguido, alguna idea de porque pasa esto.

Nota:: Tambien pasa cuando convierto de un string a un
char.

Mucha Gracias por su ayuda y suerte

Jorwin Cumare.
Respuesta Responder a este mensaje
#3 Rodrigo Corral González
10/11/2003 - 17:42 | Informe spam
¿Podrias poner el codigo para ver que puede estar ocurriendo?

Un saludo
Rodrigo Corral González
Respuesta Responder a este mensaje
#4 Jorwin
10/11/2003 - 18:19 | Informe spam
Aqui esta la funcion que te comente(Esto es lo unico que
tengo hecho)

char* conecta(CString mServidor,char* msql,char*
mcampo)
{
//CDBVariant mvalor;

CString mvalor;
/*MessageBox
(NULL,mServidor,"Prueba",MB_OK);
MessageBox(NULL,msql,"Prueba",MB_OK);
MessageBox(NULL,mcampo,"Prueba",MB_OK);*/
try
{
if (!mcampo == NULL && !msql ==
NULL)
{
bool conecto;
conecto = conecta_odbc
(mServidor);
if (conecto)
{
CRecordset rs(&db);
rs.Open
(AFX_DB_USE_DEFAULT_TYPE,msql);
if (!rs.IsEOF())
{

rs.GetFieldValue(LPCTSTR(mcampo),mvalor);
}
rs.Close();
db.Close();
}
}
else
{
MessageBox(NULL,"Faltan
Parametros","Error",MB_ICONSTOP);
//mvalor = "error";
}
}
catch( CDBException* pEX )
{
MessageBox(NULL,pEX-
m_strError,"Error DLL",MB_ICONSTOP );


pEX->Delete();
}
MessageBox(NULL,"Paso","Ejemplo",MB_OK);
// if (mvalor.m_dwType == DBVT_UCHAR)
// {
// MessageBox(NULL, LPCTSTR
(mvalor.m_chVal),"Prueba",MB_OK);
// }
//return (char*) LPCSTR(mvalor);
return (char*)LPCTSTR(mvalor);
};
Respuesta Responder a este mensaje
#5 Anonimo
10/11/2003 - 21:38 | Informe spam
Aqui esta la funcion que te comente(Esto es lo unico que
tengo hecho)

char* conecta(CString mServidor,char* msql,char*
mcampo)
{
//CDBVariant mvalor;

CString mvalor;
/*MessageBox
(NULL,mServidor,"Prueba",MB_OK);
MessageBox(NULL,msql,"Prueba",MB_OK);
MessageBox(NULL,mcampo,"Prueba",MB_OK);*/
try
{
if (!mcampo == NULL && !msql ==
NULL)
{
bool conecto;
conecto = conecta_odbc
(mServidor);
if (conecto)
{
CRecordset rs(&db);
rs.Open
(AFX_DB_USE_DEFAULT_TYPE,msql);
if (!rs.IsEOF())
{

rs.GetFieldValue(LPCTSTR(mcampo),mvalor);
}
rs.Close();
db.Close();
}
}
else
{
MessageBox(NULL,"Faltan
Parametros","Error",MB_ICONSTOP);
//mvalor = "error";
}
}
catch( CDBException* pEX )
{
MessageBox(NULL,pEX-
m_strError,"Error DLL",MB_ICONSTOP );


pEX->Delete();
}
MessageBox(NULL,"Paso","Ejemplo",MB_OK);
// if (mvalor.m_dwType == DBVT_UCHAR)
// {
// MessageBox(NULL, LPCTSTR
(mvalor.m_chVal),"Prueba",MB_OK);
// }
//return (char*) LPCSTR(mvalor);
return (char*)LPCTSTR(mvalor);
};
.



solo faltaba return _strdup((char*)LPCTSTR(mvalor));
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida