Função em "C" para retornar a lista de Drivers ODBC, Windows
Enviado: 04 Jan 2024 14:48
Boas a todos.
com a ajuda do Chat GPT, consegui uma função em C para retornas a lista de Drivers e assim poder verificar se o que ver precisa está na lista.
Compilado com xHarbour + BCC 7.30.
Fico aberto a qualquer crítica ou sugestão.
Ps. Não sei porque o nome da função tem que ser em caixa alta.
Abraços.
com a ajuda do Chat GPT, consegui uma função em C para retornas a lista de Drivers e assim poder verificar se o que ver precisa está na lista.
Compilado com xHarbour + BCC 7.30.
Código: Selecionar todos
//Linkar / informar a LIB obbc32.lib (Borland C) no seu arquivo .HBP
#pragma BEGINDUMP
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>
#define MAX_DRIVER_COUNT 50
// Função para obter a lista de drivers ODBC
HB_FUNC( GETODBCDRIVERS )
{
SQLHANDLE henv;
SQLRETURN ret;
static char drivers[MAX_DRIVER_COUNT][1024]; // Array para armazenar os nomes dos drivers
static char result[1024 * MAX_DRIVER_COUNT];
int count = 0;
int i;
SQLCHAR driver[1024]; // Declarado no início da função
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
ret = SQLDrivers(henv, SQL_FETCH_FIRST, driver, sizeof(driver), NULL, NULL, NULL, NULL);
while (ret != SQL_NO_DATA && count < MAX_DRIVER_COUNT - 1) {
snprintf(drivers[count], sizeof(drivers[count]), "%s", driver);
count++;
ret = SQLDrivers(henv, SQL_FETCH_NEXT, driver, sizeof(driver), NULL, NULL, NULL, NULL);
}
drivers[count][0] = '\0'; // Null-terminate the last string
SQLFreeHandle(SQL_HANDLE_ENV, henv);
// Concatenar os nomes dos drivers em uma única string
result[0] = '\0';
for (i = 0; i < count; i++) {
strcat(result, drivers[i]);
strcat(result, "\n");
}
hb_retc( result );
return ;
}
#pragma ENDDUMPPs. Não sei porque o nome da função tem que ser em caixa alta.
Abraços.