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

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

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

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

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

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

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

4. Нельзя ли обойтись RFX_Text-ом?
...
Рейтинг: 0 / 0
Проблема Unicode и Типа CDBVariant
    #33304089
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с удовольствием обойдусь 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
Проблема Unicode и Типа CDBVariant
    #33306027
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, так у вас VC 7...

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

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

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

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

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


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