UNICODE и OLE DB
От: Artem_S  
Дата: 30.10.02 18:14
Оценка:
Всем привет!

Наткнулся на проблему:
Есть база Access (ее изменять нельзя), к примеру в ней таблица 'Customers' и поле 'Name', поле текстовое, соответственно Access держит его в Unicod'е, а размер поля равен 50 символов. При чтении данных из таблицы посредством OLE DB я получаю 50 байт вместо 50 символов и теряю половину данных . При этом все прекрасно работает на VC++ 7, но в 6-й версии — проблемы. Кто-нибудь знает как от этого избавиться????


Примерный код:
CDBPropSet pDBinit(DBPROPSET_DBINIT);
pDBinit.AddProperty(DBPROP_INIT_DATASOURCE, "C:\\customers.mdb");

CDataSource pDataSource;
pDataSource.Open("MS Jet.....", &pDBinit);

CSession pSession;
pSession.Open(pDataSource);

CCommand<CDynamicAccessor> pCmd;
pCmd.Open(pSession, "SELECT * FROM customers");
CString sString = (LPCWSTR)pCmd.GetValue("Name");



С уважением, Артем....
Re: UNICODE и OLE DB
От: The Lex Украина  
Дата: 31.10.02 16:59
Оценка:
Здравствуйте Artem_S, Вы писали:

AS>Всем привет!


AS>Наткнулся на проблему:

AS>Есть база Access (ее изменять нельзя), к примеру в ней таблица 'Customers' и поле 'Name', поле текстовое, соответственно Access держит его в Unicod'е, а размер поля равен 50 символов. При чтении данных из таблицы посредством OLE DB я получаю 50 байт вместо 50 символов и теряю половину данных . При этом все прекрасно работает на VC++ 7, но в 6-й версии — проблемы. Кто-нибудь знает как от этого избавиться????

MSDN намекает на специальную обработку типа TCHAR при извлечении его в CDynamicAccessor::GetValue(...)
Голь на выдумку хитра, однако...
Re[2]: UNICODE и OLE DB
От: Artem_S  
Дата: 01.11.02 07:21
Оценка:
Здравствуйте The Lex, Вы писали:

TL>Здравствуйте Artem_S, Вы писали:


AS>>Всем привет!


AS>>Наткнулся на проблему:

AS>>Есть база Access (ее изменять нельзя), к примеру в ней таблица 'Customers' и поле 'Name', поле текстовое, соответственно Access держит его в Unicod'е, а размер поля равен 50 символов. При чтении данных из таблицы посредством OLE DB я получаю 50 байт вместо 50 символов и теряю половину данных . При этом все прекрасно работает на VC++ 7, но в 6-й версии — проблемы. Кто-нибудь знает как от этого избавиться????

TL>MSDN намекает на специальную обработку типа TCHAR при извлечении его в CDynamicAccessor::GetValue(...)


А можно поподробнее? Все что нашел я в MSDN — это описание типа DBTYPE_WSTR и предписание использовать wchar_t, но толку от этого никакого...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.