Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

Проблема с методом 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
14-96952
Anatoly Podgoretsky
2003-01-12 13:22
2003.01.30
Именинники 12 января


6-96932
lamachok
2002-12-04 18:17
2003.01.30
winsock


4-97072
TankMan
2002-12-14 00:31
2003.01.30
Как быстрее всего сравнить содержимое двух TBitMap?


4-97089
Alex-Alexeev
2002-12-16 12:21
2003.01.30
Список функций из DLL


1-96676
error 2k
2003-01-20 03:26
2003.01.30
delphi в XP не дружит с .txt файлами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский