Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

Проблема с методом Locate   Найти похожие ветки 

 
Роман Лицевич ©   (2003-01-13 19:47) [0]

Доброе время суток!

У меня возникла следующая проблема. Необходимо обработать данные, полученные от "клиента", следующим образом:
1) если запись с указанным кодом существует в локальной таблице, то следует заменить существующие значения ее атрибутов переданными;
2) если запись с таким кодом не найдена, необходимо ее добавить, используя полученные значения атрибутов.
Серверное приложение написано в виде сервиса под W2K. Логика его работы такова: при получении данных создается поток (Thread) для их обработки. При этом потоку передается имя таблицы, в которую необходимо вставить данные. В обработчике потока полученные данные интерпретируются, а затем обрабатываются по описанному выше алгоритму. При этом используется следующий код:
with Table do
begin
Open;
Edit;
if Not Locate(<КодЗаписи>, <полученное значение>, []) then
Append;
SetFields(<значения атрибутов>);
Post;
Close;
end;
При добавлении новой записи этот код работает. Но как только приложение пытается обновить существующую запись, возникает ошибка добавления данных "Dataset not in edit or insert mode".
С чем это может быть связано и как можно решить эту проблему?


 
Anatoly Podgoretsky ©   (2003-01-13 19:55) [1]

if Locate(<КодЗаписи>, <полученное значение>, [])
then Edit
else Append;


 
Роман Лицевич ©   (2003-01-13 20:03) [2]

Anatoly Podgoretsky © (13.01.03 19:55)//
Спасибо, сработало, но вылетело "Key violation" при попытке вызвать Post.
Я прошу прощения за такие, возможно, "детские" вопросы, но тем не менее...


 
Anatoly Podgoretsky ©   (2003-01-13 20:16) [3]

Попытка дублированя одного из уникальных полей, обрати также внимание что у меня инверсный к твоему метода if Locate


 
Роман Лицевич ©   (2003-01-13 20:17) [4]

Возникла мысль, что, может быть, стоит указать вместо значения ключевого поля nil, но тогда, наверное, придется писать отдельный код для Append; возможно, использовать метод AppendRecord и в нем задавать все параметры, а хотелось бы как-то более оптимизированно.


 
Роман Лицевич ©   (2003-01-13 20:22) [5]

/Anatoly Podgoretsky © (13.01.03 20:16)/

Насчет инверсного If согласен, подобная мысль у меня была; но я не догадался использовать Edit по ветке Else, поэтому и использовал конструкцию с Not.



Страницы: 1 вся ветка

Текущий архив: 2003.01.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
3-96526
Ag2002
2003-01-10 18:28
2003.01.30
EHlib


1-96837
Checist [root]
2003-01-21 02:28
2003.01.30
Трабл с ListBox


4-97101
Vasily Terekhov
2002-12-17 09:19
2003.01.30
Lingvo аналог...


14-96968
OlDemon
2003-01-10 13:18
2003.01.30
Кенгуренок Ру


1-96785
tulen
2003-01-22 22:50
2003.01.30
У пробела какой код?