Главная страница
    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.45 MB
Время: 0.007 c
3-96522
ihtiandr
2003-01-14 15:17
2003.01.30
Transaction


3-96515
First_May
2003-01-14 15:27
2003.01.30
TDBGridEh...


4-97091
Alexsc
2002-12-16 12:48
2003.01.30
показать окно ранее запущенной программы


1-96816
Вит
2003-01-20 18:19
2003.01.30
Масштабирование графических файлов


14-97040
Dimedrol
2003-01-08 20:57
2003.01.30
Win2000 не





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