C/Visual C - Acceso a BD mediante DAO con MFC

 
Vista:

Acceso a BD mediante DAO con MFC

Publicado por Javi (1 intervención) el 06/11/2001 09:22:31
Accedo a BD con DAO en VC++.
Recupero los datos del recordset campo a campo con FetFieldValue. Pero los recupero en un dato de tipo COleVariant y luego no sé pasarlo al tipo CString. He leido algo de usar la clase CCrack , pero creo que necesito uncluir el fichero "crack.h" , pero el compilador dice que no existe ese fichero. ¿Me podeis echar una mano?. Estoy desesperado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Conversión de COleVariant a CString en DAO

Publicado por Alejandro (913 intervenciones) el 22/10/2024 19:03:46
Entiendo que estás teniendo problemas para convertir un `COleVariant` a `CString` al trabajar con DAO en Visual C++. No te preocupes, aquí te dejo una guía sobre cómo hacerlo sin necesidad de usar `CCrack`.

El objeto `COleVariant` puede contener diferentes tipos de datos, y para convertirlo a `CString`, puedes usar el método `ChangeType` para asegurarte de que el tipo de datos sea el correcto. Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <afxdb.h> // Para DAO
#include <afxdisp.h> // Para COleVariant
#include <iostream>
 
void ProcesarRecordset(CDaoRecordset* pRecordset) {
    COleVariant varValue;
 
    // Supongamos que estás en un bucle para recorrer el recordset
    while (!pRecordset->IsEOF()) {
        // Recuperar el valor del campo
        pRecordset->GetFieldValue(_T("NombreDelCampo"), varValue);
 
        // Convertir COleVariant a CString
        CString strValue;
        if (varValue.vt == VT_BSTR) {
            strValue = varValue.bstrVal; // Si es un BSTR
        } else if (varValue.vt == VT_NULL) {
            strValue = _T(""); // Manejar el caso de NULL
        } else if (varValue.vt == VT_I4) {
            strValue.Format(_T("%d"), varValue.lVal); // Si es un entero
        } else if (varValue.vt == VT_R8) {
            strValue.Format(_T("%f"), varValue.dblVal); // Si es un doble
        } else {
            // Manejar otros tipos según sea necesario
            strValue = _T("Tipo no soportado");
        }
 
        // Imprimir el valor
        std::wcout << (LPCTSTR)strValue << std::endl;
 
        // Mover al siguiente registro
        pRecordset->MoveNext();
    }
}

Explicación del código



1. Incluir las bibliotecas necesarias: Asegúrate de incluir `afxdb.h` para trabajar con DAO y `afxdisp.h` para `COleVariant`.

2. Recuperar el valor del campo: Usa `GetFieldValue` para obtener el valor del campo en un `COleVariant`.

3. Convertir COleVariant a CString:
- Verifica el tipo de datos de `COleVariant` usando `varValue.vt`.
- Si es `VT_BSTR`, puedes asignarlo directamente a `CString`.
- Para otros tipos, usa `Format` para convertirlos a `CString`.

4. Manejo de NULL: Si el valor es `VT_NULL`, puedes asignar una cadena vacía.

Notas adicionales



- CCrack: No es necesario usar `CCrack` para esta conversión. La conversión directa de `COleVariant` a `CString` es suficiente en la mayoría de los casos.
- Errores de compilación: Si el compilador no encuentra `crack.h`, es posible que no necesites esa clase para tu caso específico.

¡Espero que esto te ayude a resolver tu problema, Javy!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar