Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.02.2009, 09:06
Аватар для XIO
XIO XIO вне форума
Новичок
 
Регистрация: 06.12.2007
Сообщения: 77
Репутация: 32
По умолчанию ADODataSet + Post + DBComboBox = Проблема. В чем причина?

Доброго времени суток всем!
Все чаще сталкиваюсь с проблемой.
А конкретного решения найти не удается. Это конечно вопрос времени, но вот с ним-то как обычно и проблема.
Ситуация:
Форма с гридом, снизу панелька с DBEdit'ами и TdbLookUpComboBox'ами.
Сами по себе объекты работают. Настроены корректно и все было бы замечательно, если бы ни одно "НО".
Во все эти компоненты добавлен обработчик события OnExit. В нем происходит POST DataSet'а к которому они привязаны. Для избавления пользователя от лишних кликов. Именно когда мы вставляем новую запись, пока заполняются текстовые поля все происходит штатно и безпроблемно. Как только мы фокусируемся на TdbLookUpComboBox,
происходит ошибка "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени её последнего чтения." И все.
И после этого невозможно вообще корректно сохранить запись в таблице.
Что мне нужно глянуть где что отключить или как быть вообще в такой ситуации?
__________________
"Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт
Ответить с цитированием
  #2  
Старый 26.02.2009, 13:00
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Я не юзал никогда этот контрол, но что-то думается мне что в процессе заполнения (ну и post) естественно полей ты изменяешь значение поля указанного в KeyField, а KeyValue у тебя остается прежним (пустым). Отсюда и ошибка. Но это имхо, потому что я не пользовался никогда данным компонентом.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 26.02.2009, 13:41
Аватар для XIO
XIO XIO вне форума
Новичок
 
Регистрация: 06.12.2007
Сообщения: 77
Репутация: 32
По умолчанию

Однако глюк и косяк оказался прост. Действительно он связан с изменением значений....
В общем, ключевое поле формируется на самом SQL сервере. И при каждом Post оно судя по всему изменялось. И вылазил глюк.
Вылечилось все так:
Код:
procedure TfmXXX.dsXXXSelectAfterInsert(DataSet: TDataSet);
var
  NewGUID: TGUID;
begin
  CreateGUID(NewGUID);
  DataSet.FieldByName('ID').AsString:=GUIDToString(NewGUID);
end;
__________________
"Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter