C/Visual C - ejemplo de ADO

 
Vista:

ejemplo de ADO

Publicado por HamsteR (8 intervenciones) el 14/04/2001 20:03:40
Por favor, necesito ejemplos que utilicen el acceso a una base de datos de access basedat.mdb
con ADO u ODBC.
Gracias.
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

Acceso a una base de datos de Access (basedat.mdb) utilizando ADO y ODBC en C++

Publicado por Alejandro (913 intervenciones) el 20/09/2024 18:05:26
Claro, aquí tienes ejemplos de cómo acceder a una base de datos de Access (basedat.mdb) utilizando ADO y ODBC en C++:

1. Ejemplo utilizando ADO:

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
35
#include <iostream>
#include <comutil.h>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
 
int main() {
    try {
        _com_ptr_t<_com_IIID<ADODB::Connection, &__uuidof(ADODB::Connection)>> conn;
        _com_ptr_t<_com_IIID<ADODB::Recordset, &__uuidof(ADODB::Recordset)>> rs;
 
        conn.CreateInstance(__uuidof(ADODB::Connection));
        rs.CreateInstance(__uuidof(ADODB::Recordset));
 
        // Establecer la cadena de conexión
        conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\ruta\\a\\basedat.mdb;");
 
        // Ejecutar una consulta SQL
        rs->Open("SELECT * FROM tabla", conn.GetInterfacePtr(), ADODB::adOpenStatic, ADODB::adLockOptimistic, ADODB::adCmdText);
 
        // Recorrer los registros
        while (!rs->adoEOF) {
            std::cout << "Campo1: " << (_bstr_t)rs->Fields->GetItem("Campo1")->Value << std::endl;
            std::cout << "Campo2: " << (_bstr_t)rs->Fields->GetItem("Campo2")->Value << std::endl;
            rs->MoveNext();
        }
 
        // Cerrar el recordset y la conexión
        rs->Close();
        conn->Close();
    }
    catch (_com_error& e) {
        std::cerr << "Error: " << e.ErrorMessage() << std::endl;
    }
 
    return 0;
}

2. Ejemplo utilizando ODBC:

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
35
36
37
38
39
40
41
42
#include <iostream>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
 
int main() {
    SQLHENV env;
    SQLHDBC dbc;
    SQLHSTMT stmt;
    SQLRETURN ret;
 
    // Inicializar el entorno
    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
    ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
 
    // Establecer la conexión
    ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
    ret = SQLDriverConnect(dbc, NULL, (SQLCHAR*)"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\ruta\\a\\basedat.mdb;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
 
    // Preparar la consulta SQL
    ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
    ret = SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM tabla", SQL_NTS);
 
    // Recorrer los registros
    SQLCHAR campo1[255];
    SQLCHAR campo2[255];
    while (SQLFetch(stmt) == SQL_SUCCESS) {
        ret = SQLGetData(stmt, 1, SQL_C_CHAR, campo1, sizeof(campo1), NULL);
        ret = SQLGetData(stmt, 2, SQL_C_CHAR, campo2, sizeof(campo2), NULL);
 
        std::cout << "Campo1: " << campo1 << std::endl;
        std::cout << "Campo2: " << campo2 << std::endl;
    }
 
    // Liberar los recursos
    ret = SQLFreeHandle(SQL_HANDLE_STMT, stmt);
    ret = SQLDisconnect(dbc);
    ret = SQLFreeHandle(SQL_HANDLE_DBC, dbc);
    ret = SQLFreeHandle(SQL_HANDLE_ENV, env);
 
    return 0;
}

Recuerda reemplazar `"C:\\ruta\\a\\basedat.mdb"` con la ruta correcta hacia tu archivo basedat.mdb y ajustar la consulta SQL y los nombres de los campos según tu base de datos.

Espero que estos ejemplos te sean útiles para acceder a la base de datos de Access utilizando ADO y ODBC en C++. ¡Buena suerte, HamsteR!
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