Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
ВнизВопрос MS SQL7.0 D5 Найти похожие ветки
← →
Evgen123 (2002-09-13 09:43) [0]Вопрос в слудующем D5 MS SQL 7.0 через DBE 5.01.
При добавлении записи (append... post) в таблицу имеющую только PK невозможно "запоститься" возникает ошибка (Record/key deleted).
Ошибка возникает только если на сервере изменялась структура таблицы при открытом НД. Но как с этим бороться? Она теперь появляется постоянно. В коде ошибки нет, т.к. до этого все работало.
На сервере в таблицу запись добавляется без проблем.
По некоторым причинам добавление записи в эту таблицу с использованием запроса или хранимой процедуры не желательно.
← →
Fiend (2002-09-13 10:06) [1]Изменить структуру таблицы, перед тем как БДЕ будет прописывать запись в таблицу э то конечно жёстко, если не сказать больше.
В любом случае при последующем запуске софтины, всё должно работать.
Насколько я понимаю, вы используете живые запросы, а не работаете с НД при помощи UpdateSQL?
Если так, то т.к. вы изменили структуру табл., надо бы и в приложении ее поменять. Вы ж наверно прицепили грид к НД и колонки туда подобавляли?
И скажите котя бы текст ошибки
← →
Evgen123 (2002-09-13 10:19) [2]Текст ошибки приведен Record/key deleted
В приложении структура соответствует структуре в базе.
К гриду ничего не прицепляется в таблицу просто добавляется запись в результате некоторых вычислений.
Структура менялась не перед тем как BDE непосредственно добавляет запись. Просто НД был открыт (Table.Active:=True) на этапе разработки.
← →
REA (2002-09-13 11:15) [3]Я пробовал в обработчике события AfterDelete поставить закладку и переместив курсор к ней вернуться - не удается. Именно Record deleted. Пришлось запомнить ключ и делать Locate.
← →
Evgen123 (2002-09-13 11:44) [4]Происходит не удаление а добавление записи, т.о. значение ключа еще не известно.
Следующее замечание ошибка происходит только если Table.Autorefresh:=True если False то добавление происходит без проблем, но тогда и значение ключа не узнать.
← →
ЮЮ (2002-09-13 11:53) [5]>но тогда и значение ключа не узнать
А кто же тогда определяет это значение?
← →
ermserg (2002-09-13 12:42) [6]BDE vstavlyaet zapis, SQL generiruyet znacheniye key-polya, BDE eto znacheniye ne znayet i terayet zapis. Eto ne sluchayetsya s ADO. Chem tebe ADO ploh?
← →
Steven (2002-09-13 12:57) [7]попробуй через трай
try
ds.Append;
...
ds.Post;
except
Application.MessageBox("Фигвам", nil, MB_ICONWARNING);
ds.Close;
ds.Open;
end;
← →
3JIA9I CyKA (2002-09-13 13:09) [8]2Steven © (13.09.02 12:57)
А ds.Open точно не выдаст Exception? 8)
← →
Evgen123 (2002-09-13 13:42) [9]ЮЮ: Это значение определяет сервер.
ermserg: BDE перестает узнавать это значение в результате действий см. вопрос. Вопрос как раз в том и состоит ПОЧЕМУ?
Steven: Это даст только "Фигвам" вместо "Record/key deleted" а проблема так и останется.
← →
ermserg (2002-09-13 14:36) [10]Potomu chto BDE tak rabotaet. On perechitivayet zapis pered redaktirovaniem. Tebe zdes nichego ne sdelat. Edinstvenniy vihod: opredelit dla etoy tablitsi trigger INSTEAD OF INSERT - dlya podrobnostey smotri SQL Books Online
← →
ermserg (2002-09-13 14:51) [11]Sorry, pohozhe eti triggeri poyavilis tolko v SQL2000. Poprobuy
SET IDENTITY_INSERT myTable ON
Insert into myTable("KeyValue","...")
SET IDENTITY_INSERT myTable OFF
← →
Evgen123 (2002-09-13 15:09) [12]ermserg:Он перечитывает запись перед редактированием, а перед добавлением он чего перечитывает? И почему скажем 378 раз он с этим справлялся а потом (после указанных в начале обсуждения действий) перестал. Возможно существует некий кэш на структуру, но тогда где он хранится. Я пробовал установить программу и BDE на другую машину где их никогда не было. Без изменений.
Если убрать базу полностью (физически на сервере) и потом создать ее снова, но не востановлением из архива, а руками таблица за таблицей, тогда работоспособность востанавливается.
Но это же не выход. И потом что заставляет опять понимать друг друга BDE и MS SQL после этого.
← →
ermserg (2002-09-13 15:35) [13]On takzhe perechitivayet ih posle update / insert.
Vozmozhno vso rabotayet Ok do poyavleniya dirok v tablitse (do pervogo delete), potom pri popitke vstavit novuyu zapis ti poluchayesh etu oshibku. Poporobuy s SET IDENTITY_INSERT.
← →
ermserg (2002-09-13 15:36) [14]Vot chto ya nashol:
http://www.izlabs.com/icezone/docs/articles/bde_feat.shtml
← →
Evgen123 (2002-09-13 16:42) [15]ermserg СПАСИБО ОГРОМНОЕ.
В статье нашел ответ на мучавший меня вопрос.
Все дело в выставляемых на сервре значениях по умолчанию, а UpdateMode в режиме upWhereAll по этому так и получалось.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c