Salve,
Volevo sapere se c'era un modo per accedere a un File Access 07.
Mi spiego meglio st๒ utilizzando CodeBlock su Windows con compilatore MingW.
Ho visto che ci sono le dtl ma non riesco a compilarle con tale compilatore. :muro:
Qualcuno ha qualche idea?
Grazie
Non c'่ proprio il makefile.
E' possibile che non ci sia modo di accedere ad un file access senza usare le MFC?
Non ci voglio credere :eekk:
EUREKA
Ecco la soluzione, mi rispondo da solo. :D
#include <windows.h>
#include <sqlext.h>
#include <iostream>
int main()
{
char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb)};Dbq=.\\mio_database.mdb;Uid=;Pwd=;";
/* Metodo di Accesso usato */
const char* DAM = "Connessione ODBC Diretta";
HENV hEnv;
HDBC hDbc;
/* ODBC API return status */
RETCODE rc;
int iConnStrLength2Ptr;
char szConnStrOut[256];
const char* query = "SELECT Nome, Cognome FROM mia_tabella;";
SQLCHAR chval1[128], chval2[128], colName[128];
int ret1;
int ret2;
/* Numero di righe e colonne nel result set */
SQLINTEGER rowCount = 0;
SQLSMALLINT fieldCount = 0, currentField = 0;
HSTMT hStmt;
/* Allochiamo un environment handle */
rc = SQLAllocEnv(&hEnv);
/* Allochiamo un connection handle */
rc = SQLAllocConnect(hEnv, &hDbc);
/* Connessione al database 'mio_database.mdb' */
rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN,
SQL_NTS, (unsigned char*)szConnStrOut,
255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
if (SQL_SUCCEEDED(rc))
{
printf("%s: Connesso con successo al Database. Data source name: \n %s\n",
DAM, szConnStrOut);
/* Prepariamo le query SQL */
printf("%s: SQL query:\n %s\n", DAM, query);
rc = SQLAllocStmt(hDbc,&hStmt);
rc = SQLPrepare(hStmt, (unsigned char*)query, SQL_NTS);
/* Binding del result set con le colonne */
rc = SQLBindCol(hStmt, 1, SQL_C_CHAR, chval1, 128, (SQLINTEGER*)&ret1);
rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, chval2, 128, (SQLINTEGER*)&ret2);
/* Esecuzione della query e creazione di un record set */
rc = SQLExecute(hStmt);
if (SQL_SUCCEEDED(rc))
{
printf("%s: Recupero schema info per il result set:\n", DAM);
SQLNumResultCols(hStmt, &fieldCount);
if (fieldCount > 0)
{
for (currentField=1; currentField <= fieldCount; currentField++)
{
SQLDescribeCol(hStmt, currentField,
colName, sizeof(colName), 0, 0, 0, 0, 0);
printf(" | %s", colName);
}
printf("\n");
}
else
{
printf("%s: ERRORE: Il Numero di campi nel result set e' 0.\n", DAM);
}
printf("%s: Fetch data:\n", DAM);
/* Loop sulle righe del result set */
rc = SQLFetch(hStmt);
while (SQL_SUCCEEDED(rc))
{
printf(" | %s | %s\n", chval1, chval2);
rc = SQLFetch(hStmt);
rowCount++;
};
printf("%s: Total Row Count: %d\n", DAM, rowCount);
rc = SQLFreeStmt(hStmt, SQL_DROP);
}
}
else
{
printf("%s: Non riesco a connetermi a %s.\n\n", DAM, szDSN);
}
/* Disconnessione e rilascio degli handles allocati*/
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
printf("%s: Cleanup. Fatto.\n", DAM);
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.