![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Глючит сохранение данных(в OLE DB) присохраненение изменений в строке, новая строка обрезается до размера предыдущей, тоже с добавление новой записи, строки в новой записи обрезаются до размеров, строк в аналогичных полях предыдущей записи.
ЗЫ Извиняюсь за столько вопросов по OLE DB ![]() -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
приведи весь код по чтению, записи и инициализации самих аксессоров
|
|||
|
||||
shedon |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Для работы стаблицей я пользуюсь кодом сгенерированном мастером, кроме одного я там убрал загрузку БД из строки инициализации
Дальше в своей программе я делаю примерно следующее
Функция ExchangeData(); что-то типа UpdateData(); только если е ей передаю параметр по умалчанию она копирует данные из БД в форму, передаю true копирует из форму в БД Вот её пример
memcpy вроде всё нормально копирует всю строку. Дальше самое интересное, например если я хочу зменить строку в текущей записи, я вызываю m_pClientInfo->ExchangeData(true); m_pClientInfo->m_oClientIfoDB.SetData(); m_pClientInfo->ExchangeData(true) - делает всё нормально копирует как надо, а вот при вызове m_pClientInfo->m_oClientIfoDB.SetData(); возвращает DB_S_ERRORSOCCURRED -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
||||||
|
|||||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
[Оказывается я забыл, везде обновлять
m_oClientIfoDB.m_dwClientNameLength = m_sClientName.GetLength(); m_oClientIfoDB.m_dwClientNameStatus = DBSTATUS_S_OK; Теперь всё работает!!! - ![]() -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
лучше сделать:
|
|||
|
||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
DENNN, а что от этого изменится ?
-------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
если текстовое поле у тебя объявлено в базе вида char, varchar и т.п., то оно всегда имеет одну и ту же длину - свободные байты должны быть заполнены нулями. Именно так идет обмен данными OLE DB с самой БД - пересылаются все байты. То, что лежит в этих байтах - это твоя задача. Заполнив это поле нулями, а потом вызвав функцию копирования строки, ты можешь быть уверен, что после последнего символа находятся только нулевые байты, либо строка полностью заполнила буфер.
|
|||
|
||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
а разве
memset(m_oCaseInfoDB.m_Whoreportedtheincident, 0, sizeof(m_oCaseInfoDB.m_Whoreportedtheincident)/sizeof(TCHAR)); и memset (&m_oClientIfoDB.m_dwClientNameLengt, 0, sizeof(m_oClientIfoDB.m_dwClientNameLengt)); не одно и то же ? -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
DENNN |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
нет.
т.е. тогда уж, следуя твоей логике
TCHAR - введен именно для большей платформонезависимости. Значит, хотя бы теоретически, возможна конфигурация UNICODE, ATL, ... проекта, где тип TCHAR будет не равен 1 байту. Читаем MSDN:
Можешь также считать, что тип char всегда будет соответствовать 1 байту, поэтому мой код будет выполняться верно всегда. P.S. CoInitialize вызывается один раз при старте приложения, а при его закрытии должен быть вызван CoUninitialize(NULL); |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |