powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC Чтение данных из базы
8 сообщений из 8, страница 1 из 1
ODBC Чтение данных из базы
    #38002821
igas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую Всех!
Пытаюсь читать данные из базы таким образом:
Код: 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.
   SQLWSTR wsqlstrin;
   
   SQLUINTEGER BatchID;

   SQLWCHAR BatchName[128];
   SQLINTEGER BatchNameInd;

   SQLWCHAR CreatorName[512];
   SQLINTEGER CreatorNameInd;

   TIMESTAMP_STRUCT CreationTime;
   SQLINTEGER CreationTimeInd;

   SQLWSTR BatchData;
   SQLINTEGER BatchDataInd;

   SQLPOINTER pData = NULL;
   CHKRC(SQLBindCol(hstmt1, 1, SQL_C_ULONG, &BatchID, sizeof(SQLUINTEGER), NULL));
   CHKRC(SQLBindCol(hstmt1, 2, SQL_C_WCHAR, BatchName, 128, &BatchNameInd));
   CHKRC(SQLBindCol(hstmt1, 3, SQL_C_WCHAR, CreatorName, 512, &CreatorNameInd));
   CHKRC(SQLBindCol(hstmt1, 4, SQL_TYPE_TIMESTAMP, &CreationTime, sizeof(TIMESTAMP_STRUCT), &CreationTimeInd));
   CHKRC(SQLBindCol(hstmt1, 5, SQL_C_WCHAR, NULL, (SQLINTEGER) SQL_DATA_AT_EXEC, &BatchDataInd));


   CHKRC(SQLExecDirect(hstmt1, L"SELECT BATCH_ID, NAME, CREATORNAME, CREATIONTIME, BATCHDATA FROM BATCHES WITH(NOLOCK) WHERE BatchID <> 4 ORDER BY CREATIONTIME", SQL_NTS));

 		SQLUINTEGER iCount = 100;
		SQLPOINTER * pPTR = (SQLPOINTER*)malloc(100);
	  CHKRC(SQLSetStmtAttr(hstmt1, SQL_ATTR_ROW_STATUS_PTR, pPTR, 0));
 	  CHKRC(SQLSetStmtAttr(hstmt1, SQL_ATTR_ROW_ARRAY_SIZE,  (SQLPOINTER)iCount, 0));


	while(1)
	{
		CHKRC(SQLFetchScroll(hstmt1, SQL_FETCH_NEXT, 0));
		CHKRC(SQLGetData(hstmt1, 5, SQL_C_WCHAR, (SQLPOINTER)BatchData, 0, &BatchDataInd));
		
		SQLWSTR &wstrsqlpnt = *(SQLWSTR*)&BatchData;
		if (!IsBadStringPtrW(wstrsqlpnt,sizeof(wstrsqlpnt)))
 		{
			delete wstrsqlpnt;
		}
		wstrsqlpnt = new SQLWCHAR [BatchDataInd + 1];

		SQLINTEGER iSize = (BatchDataInd + 1) * sizeof(SQLWCHAR);

		pData = wstrsqlpnt;
		CHKRC(SQLGetData(hstmt1, 1, SQL_C_WCHAR, pData, iSize, NULL));
		//wprintf(.....);
	}


Получается какая-то чушь. Может кто подскажет как поправить?

Структура таблицы:
BATCH_ID intNAME nvarchar(127)CREATORNAME nvarchar(512)CREATIONTIME datetimeBATCHDATA ntext
...
Рейтинг: 0 / 0
ODBC Чтение данных из базы
    #38002946
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igas,

А конкретнее, какая именно чушь получается ?
...
Рейтинг: 0 / 0
ODBC Чтение данных из базы
    #38003278
igas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу простить, тот код работает, а этот нет
Код: 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.
   SQLWSTR wsqlstrin;
   
   SQLUINTEGER BatchID;

   SQLWCHAR BatchName[128];
   SQLINTEGER BatchNameInd;

   SQLWCHAR CreatorName[512];
   SQLINTEGER CreatorNameInd;

   TIMESTAMP_STRUCT CreationTime;
   SQLINTEGER CreationTimeInd;

   SQLWSTR BatchData;
   SQLINTEGER BatchDataInd;

   SQLPOINTER pData = NULL;
   CHKRC(SQLBindCol(hstmt1, 1, SQL_C_ULONG, &BatchID, sizeof(SQLUINTEGER), NULL));
   CHKRC(SQLBindCol(hstmt1, 2, SQL_C_WCHAR, BatchName, 128, &BatchNameInd));
   CHKRC(SQLBindCol(hstmt1, 3, SQL_C_WCHAR, CreatorName, 512, &CreatorNameInd));
   CHKRC(SQLBindCol(hstmt1, 4, SQL_TYPE_TIMESTAMP, &CreationTime, sizeof(TIMESTAMP_STRUCT), &CreationTimeInd));
   CHKRC(SQLBindCol(hstmt1, 5, SQL_C_WCHAR, NULL, (SQLINTEGER) SQL_DATA_AT_EXEC, &BatchDataInd));


   CHKRC(SQLExecDirect(hstmt1, L"SELECT BATCH_ID, NAME, CREATORNAME, CREATIONTIME, BATCHDATA FROM BATCHES WITH(NOLOCK) WHERE BatchID <> 4 ORDER BY CREATIONTIME", SQL_NTS));

 		SQLUINTEGER iCount = 100;
		SQLPOINTER * pPTR = (SQLPOINTER*)malloc(100);
	  CHKRC(SQLSetStmtAttr(hstmt1, SQL_ATTR_ROW_STATUS_PTR, pPTR, 0));
 	  CHKRC(SQLSetStmtAttr(hstmt1, SQL_ATTR_ROW_ARRAY_SIZE,  (SQLPOINTER)iCount, 0));


	while(1)
	{
		CHKRC(SQLFetchScroll(hstmt1, SQL_FETCH_NEXT, 0));
                CHKRC(SQLSetPos(hstmt1, 0, SQL_POSITION, SQL_LOCK_NO_CHANGE)); //забыл указать эту строчку
		CHKRC(SQLGetData(hstmt1, 5, SQL_C_WCHAR, (SQLPOINTER)BatchData, 0, &BatchDataInd));
		
		SQLWSTR &wstrsqlpnt = *(SQLWSTR*)&BatchData;
		if (!IsBadStringPtrW(wstrsqlpnt,sizeof(wstrsqlpnt)))
 		{
			delete wstrsqlpnt;
		}
		wstrsqlpnt = new SQLWCHAR [BatchDataInd + 1];

		SQLINTEGER iSize = (BatchDataInd + 1) * sizeof(SQLWCHAR);

		pData = wstrsqlpnt;
		CHKRC(SQLGetData(hstmt1, 1, SQL_C_WCHAR, pData, iSize, NULL));
		//wprintf(.....);
	}
...
Рейтинг: 0 / 0
ODBC Чтение данных из базы
    #38003279
igas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLSetPos вылетает с ошибкой:
Код: sql
1.
 [Microsoft][ODBC SQL Server Driver]Недопустимое положение курсора
...
Рейтинг: 0 / 0
ODBC Чтение данных из базы
    #38003291
Фотография vromanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем SqlFetchScroll & SQLSetPos?
...
Рейтинг: 0 / 0
ODBC Чтение данных из базы
    #38003681
igas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vromanov,
пытаюсь разобраться с таким методом чтения:)
...
Рейтинг: 0 / 0
ODBC Чтение данных из базы
    #38003811
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igas,

Если ты хочеш скрол, то надо устанавливать тип курсора.
И не все субд это поддерживают.
И экзект директ кажется не поддерживает.
И главное, что если ты фетчиш только вперед, он ни на фиг не нужен.
Ну и глобально он тоже ни на фиг не нужен.
...
Рейтинг: 0 / 0
ODBC Чтение данных из базы
    #38004604
igas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
http://msdn.microsoft.com/en-us/library/windows/desktop/ms709468(v=vs.85).aspx
мне нужно получить Long Data и желательно таким методом
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC Чтение данных из базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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