powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC в С++ Builder
10 сообщений из 10, страница 1 из 1
ODBC в С++ Builder
    #38032792
Иухенио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста. Нужно узнать имя СУБД. Использую следующую функцию ODBC драйвера:
SQLUINTEGER fFuncs;
retCode = SQLGetInfo(hDBC, SQL_DBMS_NAME, (SQLPOINTER)&fFuncs,sizeof(fFuncs),NULL);

Программа написана в C++ Builder. Не понимаю куда он возвращает результат? Само Имя функции куда он заносит, как я понял то он ее должен хранить в fFuncs, но там хранится последовательность чисел.
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032802
Вафёл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИухениоСамо Имя функции куда он заносит, как я понял то он ее должен хранить в fFuncs, но там хранится последовательность чисел.Эта последовательность зовется указателем на буфер.
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032807
Иухенио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как из самого буфера вытащить название?
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032819
Гизмо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как как, руками.

Ты для начала код покажи, а то кто тебя знает, что у тебя такое fFuncs
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032821
Гонзо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот парочка примеров, кури


Код: plaintext
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.
43.
SQLCHAR string_val[1024];
SQLSMALLINT string_len;
SQLRETURN ret;
SQLUINTEGER u_val;
SQLUSMALLINT su_val;

/* for string values */
ret = SQLGetInfo(dbc,
                 SQL_XXX, /* e.g. SQL_DATA_SOURCE_NAME */
		 string_val,
		 sizeof(string_val),
		 &string_len);
if (SQL_SUCCEEDED(ret)) {
   if (ret == SQL_SUCCESS_WITH_INFO)
       printf("buffer too small, string truncated\n");
   printf("Returned value is %s\n", string_val);
} else {
  /* error */
}

/* for SQLUINTEGER values - mostly bitmasks */
ret = SQLGetInfo(dbc,
                 SQL_XXX, /* e.g. SQL_INSERT_STATEMENT */
		 (SQLPOINTER)&u_val,
		 0, /* ignored for SQLUINTEGER types */
		 0); /* ignored for SQLUINTEGER types */
if (SQL_SUCCEEDED(ret)) {
  printf("Returned value is %lx\n", u_val);
} else {
  /* error */
}

/* for SQLUSMALLINT values - mostly counts/limits */
ret = SQLGetInfo(dbc,
                 SQL_XXX, /* e.g. SQL_MAX_CONCURRENT_ACTIVITIES */
		 (SQLPOINTER)&su_val,
		 0, /* ignored for SQLUSMALLINT types */
		 0); /* ignored for SQLUSMALLINT types */
if (SQL_SUCCEEDED(ret)) {
  printf("Returned value is %u\n", su_val);
} else {
  /* error */
}



Код: plaintext
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>

main() {
  SQLHENV env;
  SQLHDBC dbc;
  SQLRETURN ret; /* ODBC API return status */

  /* Allocate an environment handle */
  SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
  /* We want ODBC 3 support */
  SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
  /* Allocate a connection handle */
  SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
  /* Connect to the DSN mydsn */
  ret = SQLDriverConnect(dbc, NULL, "DSN=web;", SQL_NTS,
			 NULL, 0, NULL,
			 SQL_DRIVER_COMPLETE);
  if (SQL_SUCCEEDED(ret)) {
    SQLCHAR dbms_name[256], dbms_ver[256];
    SQLUINTEGER getdata_support;
    SQLUSMALLINT max_concur_act;
    SQLSMALLINT string_len;

    printf("Connected\n");
    /*
     *  Find something out about the driver.
     */
    SQLGetInfo(dbc, SQL_DBMS_NAME, (SQLPOINTER)dbms_name,
	       sizeof(dbms_name), NULL);
    SQLGetInfo(dbc, SQL_DBMS_VER, (SQLPOINTER)dbms_ver,
	       sizeof(dbms_ver), NULL);
    SQLGetInfo(dbc, SQL_GETDATA_EXTENSIONS, (SQLPOINTER)&getdata_support,
	       0, 0);
    SQLGetInfo(dbc, SQL_MAX_CONCURRENT_ACTIVITIES, &max_concur_act, 0, 0);

    printf("DBMS Name: %s\n", dbms_name);
    printf("DBMS Version: %s\n", dbms_ver);
    if (max_concur_act == 0) {
      printf("SQL_MAX_CONCURRENT_ACTIVITIES - no limit or undefined\n");
    } else {
      printf("SQL_MAX_CONCURRENT_ACTIVITIES = %u\n", max_concur_act);
    }
    if (getdata_support & SQL_GD_ANY_ORDER)
      printf("SQLGetData - columns can be retrieved in any order\n");
    else
      printf("SQLGetData - columns must be retrieved in order\n");
    if (getdata_support & SQL_GD_ANY_COLUMN)
      printf("SQLGetData - can retrieve columns before last bound one\n");
    else
      printf("SQLGetData - columns must be retrieved after last bound one\n");

    SQLDisconnect(dbc);		/* disconnect from driver */
  } else {
    fprintf(stderr, "Failed to connect\n");

  }
  /* free up allocated handles */
  SQLFreeHandle(SQL_HANDLE_DBC, dbc);
  SQLFreeHandle(SQL_HANDLE_ENV, env);
}

...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032823
Вафёл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ты того, прикалываешься?
Код: plaintext
1.
SQLUINTEGER fFuncs;



делай так
Код: plaintext
1.
2.
    SQLCHAR dbms_name[256];
    SQLGetInfo(dbc, SQL_DBMS_NAME, (SQLPOINTER)dbms_name, sizeof(dbms_name), NULL);
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032845
Иухенио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQLUINTEGER fFuncs;
retCode = SQLGetInfo(hDBC, SQL_DBMS_NAME, (SQLPOINTER)&fFuncs,sizeof(fFuncs),NULL);
if (retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
// Читаем значение из буфера
}
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032858
Код: plaintext
1.
2.
3.
4.
5.
6.
 SQLCHAR fFuncs[256];
        retCode = SQLGetInfo(hDBC, SQL_DBMS_NAME, (SQLPOINTER)&fFuncs,sizeof(fFuncs),NULL);
        if (retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
        {
               printf("%s", fFuncs);
        }
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38032862
Уаще
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да ты одолел уже
Код: plaintext
1.
2.
3.
4.
5.
6.
 SQLCHAR fFuncs[256];
        retCode = SQLGetInfo(hDBC, SQL_DBMS_NAME, (SQLPOINTER)&fFuncs,sizeof(fFuncs),NULL);
        if (retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
        {
               printf("%s", fFuncs);
        }


даже так

Код: plaintext
1.
2.
3.
4.
5.
6.
 SQLCHAR fFuncs[256];
        retCode = SQLGetInfo(hDBC, SQL_DBMS_NAME, (SQLPOINTER)fFuncs,sizeof(fFuncs),NULL);
        if (retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
        {
               printf("%s", fFuncs);
        }



короче, автор, иди учи букварь
...
Рейтинг: 0 / 0
ODBC в С++ Builder
    #38034180
Иухенио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уаще,

блин, тут другая проблема появилась. Printf() выводит иероглифы. Не знаешь как кодировку поправить?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC в С++ Builder
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]