Urgente CDatabase !!!!!

10/09/2003 - 19:52 por bcc | Informe spam
Buen dia.

Como podria hacer para pasar un parametro de tipo CDatabase si se puede

Por Ejemplo:

CDatabase Conexion; //Declaro mi variable global

BOOL AbreConexion(char NomDNS[20],char Usuario[10],char
Password[10],CDatabase Conn) //Funcion que abre la conexion
CString sDsn;
char LineaConexion[100];
strcpy(LineaConexion,"ODBC;DSN="); strcat(LineaConexion,NomDNS);
strcat(LineaConexion,";UID="); strcat(LineaConexion,Usuario);
strcat(LineaConexion,";PWD=");strcat(LineaConexion,Password);
sDsn.Format(LineaConexion);
TRY
{
Conn.Open(NULL,false,false,sDsn);
return (TRUE);
}
CATCH(CDBException, e)
{
AfxMessageBox("Database error: "+e->m_strError);
return (FALSE);
}
END_CATCH;
}

El problema que tengo es que cuando llamo a mi funcion asi:

AbreConexion("NomDns","usuario","password",Conexion)

Me da error al compilar:
cannot convert parameter 4 from
'class CDatabase' to 'class CDatabase'

Cual sera mi error ???

En espera de su respuesta y muchas gracias por la ayudadita.

Preguntas similare

Leer las respuestas

#1 christian
10/09/2003 - 20:22 | Informe spam
Buen dia.

Como podria hacer para pasar un parametro de tipo


CDatabase si se puede

Por Ejemplo:

CDatabase Conexion; //Declaro mi variable global

BOOL AbreConexion(char NomDNS[20],char Usuario[10],char
Password[10],CDatabase Conn) //Funcion que abre la


conexion
CString sDsn;
char LineaConexion[100];
strcpy(LineaConexion,"ODBC;DSN="); strcat


(LineaConexion,NomDNS);
strcat(LineaConexion,";UID="); strcat


(LineaConexion,Usuario);
strcat(LineaConexion,";PWD=");strcat


(LineaConexion,Password);
sDsn.Format(LineaConexion);
TRY
{
Conn.Open(NULL,false,false,sDsn);
return (TRUE);
}
CATCH(CDBException, e)
{
AfxMessageBox("Database error: "+e->m_strError);
return (FALSE);
}
END_CATCH;
}

El problema que tengo es que cuando llamo a mi funcion


asi:

AbreConexion("NomDns","usuario","password",Conexion)

Me da error al compilar:
cannot convert


parameter 4 from
'class CDatabase' to 'class CDatabase'

Cual sera mi error ???

En espera de su respuesta y muchas gracias por la


ayudadita.







tu problema esta basado en el tipo de parametro

1: PASANDO COMO PUNTERO A CDATABASE
esta seria la definicion correcta no 1:
pasando Conn como un apuntador lo que implica ciertos
cambios en tu codigo asi:

BOOL AbreConexion(char* NomDNS,char* Usuario,char*
Password,CDatabase* Conn)
{
CString sDsn;
char LineaConexion[100];

strcpy(LineaConexion,"ODBC;DSN=");
strcat(LineaConexion,NomDNS);
strcat(LineaConexion,";UID=");
strcat(LineaConexion,Usuario);
strcat(LineaConexion,";PWD=");
strcatLineaConexion,Password);
sDsn.Format(LineaConexion);

TRY
{

/*
nota aqui q en vez de Conn.Open...
uso el operador de indireccion ->
*/
Conn->Open(NULL,false,false,sDsn);
return (TRUE);
}
CATCH(CDBException, e)
{
AfxMessageBox("Database error: "+e->m_strError);
return (FALSE);
}
END_CATCH;
}


2: PASANDO COMO referencia A CDatabase
BOOL AbreConexion(char* NomDNS,char* Usuario,char*
Password,CDatabase& Conn)
{
CString sDsn;
char LineaConexion[100];

strcpy(LineaConexion,"ODBC;DSN=");
strcat(LineaConexion,NomDNS);
strcat(LineaConexion,";UID=");
strcat(LineaConexion,Usuario);
strcat(LineaConexion,";PWD=");
strcatLineaConexion,Password);
sDsn.Format(LineaConexion);

TRY
{

/*
nota aqui q en Conn.Open se puede usar
porque pasamos a Conn como referencia
CDatabase& Conn (puntero avanzado)
*/
Conn.Open(NULL,false,false,sDsn);
return (TRUE);
}
CATCH(CDBException, e)
{
AfxMessageBox("Database error: "+e->m_strError);
return (FALSE);
}
END_CATCH;
}
Respuesta Responder a este mensaje
#2 bcc
10/09/2003 - 23:18 | Informe spam
Gracias Christian...
Ahora tengo otra consulta...

Para obtener los valores de una tabla estoy usando:

while( !Registro.IsEOF() )
{ Registro.GetFieldValue("NombreCampoTabla1",valor1);
Registro.GetFieldValue("NombreCampoTabla2",valor2);
Registro.MoveNext();
}

Hay alguna forma de obtener los valores de las tablas no por el nombre de
sus campos sino solo por la posicion en la tabla , algo asi como en visual
basic dandole
solo...

Registro.GetFieldValue(1,valor1);
Registro.GetFieldValue(2,valor1);

Algo asi para definir esto en un ciclo...

Gracias


"christian" escribió en el mensaje
news:0cd101c377c8$7202b350$

>Buen dia.
>
>Como podria hacer para pasar un parametro de tipo
CDatabase si se puede
>
>Por Ejemplo:
>
>CDatabase Conexion; //Declaro mi variable global
>
>BOOL AbreConexion(char NomDNS[20],char Usuario[10],char
>Password[10],CDatabase Conn) //Funcion que abre la
conexion
> CString sDsn;
> char LineaConexion[100];
> strcpy(LineaConexion,"ODBC;DSN="); strcat
(LineaConexion,NomDNS);
>strcat(LineaConexion,";UID="); strcat
(LineaConexion,Usuario);
>strcat(LineaConexion,";PWD=");strcat
(LineaConexion,Password);
> sDsn.Format(LineaConexion);
> TRY
> {
> Conn.Open(NULL,false,false,sDsn);
> return (TRUE);
> }
> CATCH(CDBException, e)
> {
> AfxMessageBox("Database error: "+e->m_strError);
> return (FALSE);
> }
> END_CATCH;
>}
>
>El problema que tengo es que cuando llamo a mi funcion
asi:
>
>AbreConexion("NomDns","usuario","password",Conexion)
>
>Me da error al compilar:
> cannot convert
parameter 4 from
>'class CDatabase' to 'class CDatabase'
>
>Cual sera mi error ???
>
>En espera de su respuesta y muchas gracias por la
ayudadita.
>
>



tu problema esta basado en el tipo de parametro

1: PASANDO COMO PUNTERO A CDATABASE
esta seria la definicion correcta no 1:
pasando Conn como un apuntador lo que implica ciertos
cambios en tu codigo asi:

BOOL AbreConexion(char* NomDNS,char* Usuario,char*
Password,CDatabase* Conn)
{
CString sDsn;
char LineaConexion[100];

strcpy(LineaConexion,"ODBC;DSN=");
strcat(LineaConexion,NomDNS);
strcat(LineaConexion,";UID=");
strcat(LineaConexion,Usuario);
strcat(LineaConexion,";PWD=");
strcatLineaConexion,Password);
sDsn.Format(LineaConexion);

TRY
{

/*
nota aqui q en vez de Conn.Open...
uso el operador de indireccion ->
*/
Conn->Open(NULL,false,false,sDsn);
return (TRUE);
}
CATCH(CDBException, e)
{
AfxMessageBox("Database error: "+e->m_strError);
return (FALSE);
}
END_CATCH;
}


2: PASANDO COMO referencia A CDatabase
BOOL AbreConexion(char* NomDNS,char* Usuario,char*
Password,CDatabase& Conn)
{
CString sDsn;
char LineaConexion[100];

strcpy(LineaConexion,"ODBC;DSN=");
strcat(LineaConexion,NomDNS);
strcat(LineaConexion,";UID=");
strcat(LineaConexion,Usuario);
strcat(LineaConexion,";PWD=");
strcatLineaConexion,Password);
sDsn.Format(LineaConexion);

TRY
{

/*
nota aqui q en Conn.Open se puede usar
porque pasamos a Conn como referencia
CDatabase& Conn (puntero avanzado)
*/
Conn.Open(NULL,false,false,sDsn);
return (TRUE);
}
CATCH(CDBException, e)
{
AfxMessageBox("Database error: "+e->m_strError);
return (FALSE);
}
END_CATCH;
}


Respuesta Responder a este mensaje
#3 christian
11/09/2003 - 19:07 | Informe spam
CRecordset tiene una propiedad llamada <m_nFields>
y varios operadores recargados para GetFieldValue
se usa asi:

for(int i=0;i<turecordset.m_nFields;i++)
{
CString fieldx;
turecordset.GetFieldValue((short)i,fieldx);
//es importante el cast a short (short)
//por este cast es que el compilador reconoce
//la funcion, sino lo pones pueden haber problemas
//en tiempo de enlace creo. o un mensaje de ambiguedad.
::MessageBox(0,fieldx,"mensaje",0);
}

mira este extracto de la documentacion de CRecordset
ahi ves q si lo acepta sin problemas, ya q mfc define
varios operadores recargados para la misma funcion

usa: void GetFieldValue( short nIndex, CString& strValue );


CRecordset::GetFieldValue
void GetFieldValue( LPCTSTR lpszName, CDBVariant&
varValue, short nFieldType = DEFAULT_FIELD_TYPE );
throw( CDBException, CMemoryException );

void GetFieldValue( short nIndex, CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE );
throw( CDBException, CMemoryException );

void GetFieldValue( LPCTSTR lpszName, CString& strValue );
throw( CDBException, CMemoryException );

void GetFieldValue( short nIndex, CString& strValue );
throw( CDBException, CMemoryException );
Respuesta Responder a este mensaje
#4 bcc
11/09/2003 - 19:29 | Informe spam
Gracias

"christian" escribió en el mensaje
news:00dd01c37887$3e3fea00$

CRecordset tiene una propiedad llamada <m_nFields>
y varios operadores recargados para GetFieldValue
se usa asi:

for(int i=0;i<turecordset.m_nFields;i++)
{
CString fieldx;
turecordset.GetFieldValue((short)i,fieldx);
//es importante el cast a short (short)
//por este cast es que el compilador reconoce
//la funcion, sino lo pones pueden haber problemas
//en tiempo de enlace creo. o un mensaje de ambiguedad.
::MessageBox(0,fieldx,"mensaje",0);
}

mira este extracto de la documentacion de CRecordset
ahi ves q si lo acepta sin problemas, ya q mfc define
varios operadores recargados para la misma funcion

usa: void GetFieldValue( short nIndex, CString& strValue );


CRecordset::GetFieldValue
void GetFieldValue( LPCTSTR lpszName, CDBVariant&
varValue, short nFieldType = DEFAULT_FIELD_TYPE );
throw( CDBException, CMemoryException );

void GetFieldValue( short nIndex, CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE );
throw( CDBException, CMemoryException );

void GetFieldValue( LPCTSTR lpszName, CString& strValue );
throw( CDBException, CMemoryException );

void GetFieldValue( short nIndex, CString& strValue );
throw( CDBException, CMemoryException );














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