Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос MS SQL7.0 D5 [D5, MSSQL]


Evgen123 ©   (2002-09-13 09:43:00) 

Вопрос в слудующем D5 MS SQL 7.0 через DBE 5.01.
При добавлении записи (append... post) в таблицу имеющую только PK невозможно "запоститься" возникает ошибка (Record/key deleted).
Ошибка возникает только если на сервере изменялась структура таблицы при открытом НД. Но как с этим бороться? Она теперь появляется постоянно. В коде ошибки нет, т.к. до этого все работало.
На сервере в таблицу запись добавляется без проблем.
По некоторым причинам добавление записи в эту таблицу с использованием запроса или хранимой процедуры не желательно.


Evgen123   (2002-09-13 16:42:00) [1]

ermserg СПАСИБО ОГРОМНОЕ.
В статье нашел ответ на мучавший меня вопрос.
Все дело в выставляемых на сервре значениях по умолчанию, а UpdateMode в режиме upWhereAll по этому так и получалось.


ermserg   (2002-09-13 15:36:00) [2]

Vot chto ya nashol:
http://www.izlabs.com/icezone/docs/articles/bde_feat.shtml


ermserg   (2002-09-13 15:35:00) [3]

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.


Evgen123   (2002-09-13 15:09:00) [4]

ermserg:Он перечитывает запись перед редактированием, а перед добавлением он чего перечитывает? И почему скажем 378 раз он с этим справлялся а потом (после указанных в начале обсуждения действий) перестал. Возможно существует некий кэш на структуру, но тогда где он хранится. Я пробовал установить программу и BDE на другую машину где их никогда не было. Без изменений.
Если убрать базу полностью (физически на сервере) и потом создать ее снова, но не востановлением из архива, а руками таблица за таблицей, тогда работоспособность востанавливается.
Но это же не выход. И потом что заставляет опять понимать друг друга BDE и MS SQL после этого.


ermserg   (2002-09-13 14:51:00) [5]

Sorry, pohozhe eti triggeri poyavilis tolko v SQL2000. Poprobuy

SET IDENTITY_INSERT myTable ON
Insert into myTable("KeyValue","...")
SET IDENTITY_INSERT myTable OFF


ermserg   (2002-09-13 14:36:00) [6]

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


Evgen123   (2002-09-13 13:42:00) [7]

ЮЮ: Это значение определяет сервер.

ermserg: BDE перестает узнавать это значение в результате действий см. вопрос. Вопрос как раз в том и состоит ПОЧЕМУ?

Steven: Это даст только "Фигвам" вместо "Record/key deleted" а проблема так и останется.


3JIA9I CyKA   (2002-09-13 13:09:00) [8]

2Steven © (13.09.02 12:57)
А ds.Open точно не выдаст Exception? 8)


Steven   (2002-09-13 12:57:00) [9]

попробуй через трай

try
ds.Append;
...
ds.Post;
except
Application.MessageBox("Фигвам", nil, MB_ICONWARNING);
ds.Close;
ds.Open;
end;


ermserg   (2002-09-13 12:42:00) [10]

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?


ЮЮ   (2002-09-13 11:53:00) [11]

>но тогда и значение ключа не узнать
А кто же тогда определяет это значение?


Evgen123   (2002-09-13 11:44:00) [12]

Происходит не удаление а добавление записи, т.о. значение ключа еще не известно.
Следующее замечание ошибка происходит только если Table.Autorefresh:=True если False то добавление происходит без проблем, но тогда и значение ключа не узнать.


REA   (2002-09-13 11:15:00) [13]

Я пробовал в обработчике события AfterDelete поставить закладку и переместив курсор к ней вернуться - не удается. Именно Record deleted. Пришлось запомнить ключ и делать Locate.


Evgen123   (2002-09-13 10:19:00) [14]

Текст ошибки приведен Record/key deleted
В приложении структура соответствует структуре в базе.
К гриду ничего не прицепляется в таблицу просто добавляется запись в результате некоторых вычислений.
Структура менялась не перед тем как BDE непосредственно добавляет запись. Просто НД был открыт (Table.Active:=True) на этапе разработки.


Fiend   (2002-09-13 10:06:00) [15]

Изменить структуру таблицы, перед тем как БДЕ будет прописывать запись в таблицу э то конечно жёстко, если не сказать больше.

В любом случае при последующем запуске софтины, всё должно работать.
Насколько я понимаю, вы используете живые запросы, а не работаете с НД при помощи UpdateSQL?

Если так, то т.к. вы изменили структуру табл., надо бы и в приложении ее поменять. Вы ж наверно прицепили грид к НД и колонки туда подобавляли?

И скажите котя бы текст ошибки


Наверх

Титульная страница Поиск, карта сайта Написать письмо