|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
ADODataSet + Post + DBComboBox = Проблема. В чем причина?
Доброго времени суток всем!
Все чаще сталкиваюсь с проблемой. А конкретного решения найти не удается. Это конечно вопрос времени, но вот с ним-то как обычно и проблема. Ситуация: Форма с гридом, снизу панелька с DBEdit'ами и TdbLookUpComboBox'ами. Сами по себе объекты работают. Настроены корректно и все было бы замечательно, если бы ни одно "НО". Во все эти компоненты добавлен обработчик события OnExit. В нем происходит POST DataSet'а к которому они привязаны. Для избавления пользователя от лишних кликов. Именно когда мы вставляем новую запись, пока заполняются текстовые поля все происходит штатно и безпроблемно. Как только мы фокусируемся на TdbLookUpComboBox, происходит ошибка "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени её последнего чтения." И все. И после этого невозможно вообще корректно сохранить запись в таблице. Что мне нужно глянуть где что отключить или как быть вообще в такой ситуации? "Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт |
#2
|
||||
|
||||
Я не юзал никогда этот контрол, но что-то думается мне что в процессе заполнения (ну и post) естественно полей ты изменяешь значение поля указанного в KeyField, а KeyValue у тебя остается прежним (пустым). Отсюда и ошибка. Но это имхо, потому что я не пользовался никогда данным компонентом.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
Однако глюк и косяк оказался прост. Действительно он связан с изменением значений....
В общем, ключевое поле формируется на самом SQL сервере. И при каждом Post оно судя по всему изменялось. И вылазил глюк. Вылечилось все так: Код:
procedure TfmXXX.dsXXXSelectAfterInsert(DataSet: TDataSet); var NewGUID: TGUID; begin CreateGUID(NewGUID); DataSet.FieldByName('ID').AsString:=GUIDToString(NewGUID); end; "Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт |