Главная страница
    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.45 MB
Время: 0.025 c
3-96532
qwerty2
2003-01-14 23:46
2003.01.30
Изменить текст в DBLookupComboBox


1-96792
Кен
2003-01-23 03:52
2003.01.30
Как получить список всех ресурсов которые я добавляю к программе?


1-96810
Imshanya
2003-01-20 17:45
2003.01.30
Проблема с формами


1-96832
diks
2003-01-20 22:36
2003.01.30
Пароль


1-96664
Артём К
2003-01-21 16:16
2003.01.30
Как определить, что в Edit ни чего не введено!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский