Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-8141
Oleg_Gashev
2002-09-07 19:24
2002.10.03
Задачка


14-8140
Roman002
2002-09-06 12:13
2002.10.03
NT+D6


7-8207
Smallll
2002-07-23 18:37
2002.10.03
Как програмно узнать температуру процессора?


8-8077
Татар2000
2002-06-06 09:33
2002.10.03
Простейщая анимация


3-7793
Duce
2002-09-11 18:49
2002.10.03
Как в связке БДЕ+Оракл вернуть набор(курсор) из хранимой прц/фун?





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