Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC Чтение данных из базы / 8 сообщений из 8, страница 1 из 1
17.10.2012, 16:22
    #38002821
igas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC Чтение данных из базы
Приветствую Всех!
Пытаюсь читать данные из базы таким образом:
Код: 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
17.10.2012, 17:02
    #38002946
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC Чтение данных из базы
igas,

А конкретнее, какая именно чушь получается ?
...
Рейтинг: 0 / 0
17.10.2012, 20:04
    #38003278
igas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC Чтение данных из базы
Прошу простить, тот код работает, а этот нет
Код: 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
17.10.2012, 20:06
    #38003279
igas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC Чтение данных из базы
SQLSetPos вылетает с ошибкой:
Код: sql
1.
 [Microsoft][ODBC SQL Server Driver]Недопустимое положение курсора
...
Рейтинг: 0 / 0
17.10.2012, 20:16
    #38003291
vromanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC Чтение данных из базы
А зачем SqlFetchScroll & SQLSetPos?
...
Рейтинг: 0 / 0
18.10.2012, 09:59
    #38003681
igas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC Чтение данных из базы
vromanov,
пытаюсь разобраться с таким методом чтения:)
...
Рейтинг: 0 / 0
18.10.2012, 11:10
    #38003811
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC Чтение данных из базы
igas,

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


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