Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема Unicode и Типа CDBVariant / 13 сообщений из 13, страница 1 из 1
04.10.2005, 11:43
    #33303215
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Здравствуйте. У меня такая проблема. Мне нужно получить данные из поля МЕМО базы данных, но при этом проект должне поддерживать Unicode. При включенной поддержке Юникод, данные я могу без проблем получать через RFX_Text(). Они отображаются правильно и никаких проблем нет, но при использовании функции GetFieldValue, возвникают проблемы не только с полем МЕМО, но и просто с текстовыми полями. Как я ее только не использовал и просто брал из нее строку и через тип CDBVatiant, все равно он выдает вместо текста квадратики. Кто знает, помогите пожалуйста. Заранее спасибо.
...
Рейтинг: 0 / 0
04.10.2005, 13:24
    #33303608
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Пожалуйста, приводи(те) образцы кода, в данном случае — вызов GetFieldValue.

Честно скажу, сам с этой проблемой не сталкивался. Но есть предложение — указать третьим параметром в GetFieldValue SQL_C_WCHAR (оно описано в SQLUCODE.H).
...
Рейтинг: 0 / 0
04.10.2005, 13:46
    #33303685
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Так в том то и дело. Все варианты вызова функции попробовал. Пробовал указывать SQL_C_WCHAR, но он при этом ругается и даже ничего не говорит, а выводит пустое окно со стилем ошибки и раздается сигнал ошибки. Не ругается когда пишу SQL_C_CHAR, но тогда опять получаются квадратики.
...
Рейтинг: 0 / 0
04.10.2005, 13:53
    #33303718
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Вот видите, был бы в первом посте образец вызова с SQL_C_WCHAR, я бы не писал бесполезный ответ.

он при этом ругается и даже ничего не говорит, а выводит пустое окно со стилем ошибки
Где, трам-тарарам, скриншот сообщения?

А тот вариант, где CString, а не CDBVariant, пробовали?
...
Рейтинг: 0 / 0
04.10.2005, 14:33
    #33303864
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
И этот вариант пробовал. С полем Мемо дает то же окно. Скриншот прикреплен.
...
Рейтинг: 0 / 0
04.10.2005, 14:58
    #33303955
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Гм...

1. Предлагаю пройтись с отладчиком по CRecordset::GetFieldValue. Там в явном виде упоминается _UNICODE, посмотрите, заходит ли оно с соответствующий кусок. И на какой строчке выдаётся сообщение об ошибке.

2. Какая версия Visual C++ и какой сервис пак установлен?

3. Какая у вас СУБД и какого типа поле?

4. Нельзя ли обойтись RFX_Text-ом?
...
Рейтинг: 0 / 0
04.10.2005, 15:41
    #33304089
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Я с удовольствием обойдусь RFX_Text, если только можно будет получать данные через функцию, указав имя поля или же его индекс. Чтобы не хранить значения в переменных.
Использую MS ACCESS, в качестве базы данных.

Продалал пассы с отладчиком он вывел меня на следующий код
CATCH_ALL(e)
{
lResult = AfxProcessWndProcException(e, &pThreadState->m_lastSentMsg);
TRACE(traceAppMsg, 0, "Warning: Uncaught exception in WindowProc (returning %ld).\n",
lResult);
DELETE_EXCEPTION(e);
}
END_CATCH_ALL

в файле wiccore.cpp

А версия у меня такая:
...
Рейтинг: 0 / 0
05.10.2005, 12:39
    #33306027
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
А, так у вас VC 7...

1. Текст с CATCH_ALL интереса не представляет, это просто место, где обрабатываются exceptions. Надо _зайти_ (F11) в CRecordset::GetFieldValue и протыкать её, чтобы выяснить, какая строчка последняя перед exception. Если в этой строчке стоит функция, в которую можно зайти, то надо перезапуститься и зайти.

В седьмом С++ в CRecordset::GetFieldValue _UNICODE явно не упоминается...

2. Что значит "Чтобы не хранить значения в переменных"? Откуда такая ненависть к переменным?

3. На всякий случай — если нужно получить снимок диалогового окна, то проще всего нажать Alt+Print Screen.
...
Рейтинг: 0 / 0
05.10.2005, 13:59
    #33306299
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
А какой нужен С++ для того, чтобы Юникод упоминался?
А это не нелюбовь, а просто не хочу, чтобы объекты были очень большими, их у меня может быть много, вот и хочу динамически получать эти данные.
...
Рейтинг: 0 / 0
05.10.2005, 14:11
    #33306337
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Посмотрел через F11 и пришел к выводу, что он не знает значение типа. В переменной, где хранится типSQL значение -10, а насколько я знаю, такого тип нет, вот он и выдает общее исключение.
...
Рейтинг: 0 / 0
05.10.2005, 14:40
    #33306456
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
А какой нужен С++ для того, чтобы Юникод упоминался?
Никакой не нужен, просто я исследовал текст для VC6.

А это не нелюбовь, а просто не хочу, чтобы объекты были очень большими, их у меня может быть много, вот и хочу динамически получать эти данные.
Мне кажется, это надуманная проблема.
Каждый CRecordset в отдельный момент времени будет хранить в переменной значение конкретного поля только из текущей записи. Получится ровно столько же памяти, что и при GetFieldValue.

В переменной, где хранится типSQL значение -10, а насколько я знаю, такого тип нет, вот он и выдает общее исключение.
Откуда это вы знаете?
Цитирую sqlucode.h:
#define SQL_WLONGVARCHAR (-10)

Хуже то, что оно этот тип просто не обрабатывает:
Код: plaintext
1.
2.
3.
4.
5.
6.
// May need to cleanup and call SQLGetData again if LONG_VAR data
switch(nFieldType)
{
case SQL_C_CHAR:
case SQL_C_WCHAR:
case SQL_C_BINARY:
}

Я нашёл, друзья, нашёл! (с)
Зато есть функция GetFieldValue Ex , которая этот тип знает!
Пробуй(те)!
...
Рейтинг: 0 / 0
05.10.2005, 15:42
    #33306715
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
В том то и дело, что при использовании этой функции компилятор ругается

c:\Documents and Settings\PIP\My Documents\Visual Studio Projects\TestCRecordSet\TestCRecordSetDlg.cpp(286): error C2248: 'CRecordset::GetFieldValueEx' : cannot access private member declared in class 'CRecordset'

И никак не хочет компилироваться. Может я совсем чайник и ее нужно использовать по другому?
...
Рейтинг: 0 / 0
05.10.2005, 15:55
    #33306776
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Unicode и Типа CDBVariant
Ну и зачем опять выставлять меня идиотом?
Нельзя было сразу сказать, что вы её нашли?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема Unicode и Типа CDBVariant / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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