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

Вниз

Добавление новой записи и ее отражение.   Найти похожие ветки 

 
lesstab ©   (2011-10-10 12:53) [0]

Таблица имеет поле, значение которого "генерируется" следующим триггером:

AS
BEGIN
   NEW.Subject_ID = GEN_ID(gen_Subject_ID, 1);
END

Что надо делать, чтобы сразу же после выполнения команд qrySubject.Append ...qrySubject.Post  новая запись обновлялось, то есть ключевое поле Subject_ID имел "правильное" значение?
==============================
Проблема в том, что при редактировании только что добавленной записи, вылетает ошибка: "Строка обновления не найдена....".

Прочитал статью JINX в "Королевстве" про синхронизации. Пробовал qrySubject.Propeties["Update Resync"].Value := adResyncAll , вылетел ошибка: "Дескриптор строки указывал на удаленную строку или...".
============
Помогите, пожалуйста. Эта проблема сильно тормозит работу.


 
Ega23 ©   (2011-10-10 12:56) [1]

СУБД?


 
lesstab ©   (2011-10-10 12:57) [2]

Забыл. Пользуюсь Delphi 6, ADO, Firebird 2.5.


 
Медвежонок Пятачок ©   (2011-10-10 13:09) [3]

так как адо, то сначала получать значение генератора, затем вставлять запись с явным значением ключа.


 
DiamondShark ©   (2011-10-10 13:11) [4]


> так как адо, то сначала получать значение генератора, затем
> вставлять запись с явным значением ключа.

И триггер перепейсать:

if  NEW.Subject_ID IS NULL then
NEW.Subject_ID = GEN_ID(gen_Subject_ID, 1);
end if


 
lesstab ©   (2011-10-10 13:12) [5]


>  затем вставлять запись с явным значением ключа.

То есть, отказаться от триггера?


 
Медвежонок Пятачок ©   (2011-10-10 13:20) [6]

а зачем он тебе?


 
DiamondShark ©   (2011-10-10 13:23) [7]


> lesstab ©   (10.10.11 13:12) [5]
>  отказаться от триггера?

А зачем он вам нужен? Ключи генерировать? Ну, оставьте.
Только отдавайте себе отчёт в том, что чудес не бывает. Чтобы получить значение из записи, надо эту запись как-то идентифицировать. А как можно идентифицировать запись, если вы вставляете запись с неизвестным значением первичного ключа? У АДО встроенного телепатора нет.

Сами подумайте, каким образом вы узнаете, как получить обратно вашу новую запись? Вот забудьте про АДО, и вообще ваш конкретный случай. Подумайте, есть у вас интерфейс с сервером только на основе SQL команд и их результатов. Как вы получите назад запись с неизвестным первичным ключом?


 
sniknik ©   (2011-10-10 13:38) [8]

Update Resync - это на изменение... вроде бы, насколько помню.
при вставке там другое, и + изменение (adResyncAll) по всем записям... а это не совсем логично (бывает нужно, но не часто), лучше обновляться по ключевому полю.


 
Ega23 ©   (2011-10-10 13:42) [9]

Редактирование в гриде - суть зло.
Вроде бы кто-то говорил, что у FIB+ есть возможность обращения к генератору извне.


 
lesstab ©   (2011-10-10 13:43) [10]


> а зачем он тебе?



> А зачем он вам нужен? Ключи генерировать? Ну, оставьте.


Принял. Спасибо.


 
sniknik ©   (2011-10-10 13:44) [11]

> У АДО встроенного телепатора нет.
есть стандартные настройки... поддержка теми кто пишет ADO драйвера/движок, считать значение ключа в момент вставки (автоинкремента точно, как в аксесс, мсскл, а вот тригера в FB... х.з. не помню, но давно как-то работал еще "яффилом", проблем не было.).


 
lesstab ©   (2011-10-10 13:45) [12]


> возможность обращения к генератору извне.

Дальше так и буду делать. Спасибо.


 
Ega23 ©   (2011-10-10 13:45) [13]


> считать значение ключа в момент вставки


У FB нету Read Uncommitted


 
DiamondShark ©   (2011-10-10 13:51) [14]


> sniknik ©   (10.10.11 13:44) [11]

Именно. Сильно специфические случаи (вроде автоинкремента в Акцесс и идентити в МССКЛ) могут быть (а могут и не быть) поддержаны провайдером. А вот общего универсального "подать сюда запись с неизвестным извне ПК" -- нету. И быть не может.


 
sniknik ©   (2011-10-10 13:53) [15]

> У FB нету Read Uncommitted
ну, у него вроде и переменные в генерации id вне транзакций... т.е. как то выкручиваются.
не хотелось бы проверять все по новой, но раньше говорю работало, и проблем вроде не было (уж такое то, глюк при вставке записи, точно бы запомнил).


 
DiamondShark ©   (2011-10-10 14:00) [16]


> Ega23 ©   (10.10.11 13:42) [9]
> Редактирование в гриде - суть зло.

Если бы в компоненте доступа к данным можно было иметь явный доступ к формируемым командам вставки/изменения/удаления -- то хоть обредактируйся в гриде.

Зло -- компоненты с навигационной моделью доступа, слишком сильно полагающиеся на умную автоматику.
В BDEDataSet хотя бы UpdateObject был. А в таком всём из себя навороченном АДО и того нету.

Вот АДО.НЕТ -- туп и деревянен, как балалайка. Но пользоваться им во сто крат удобнее и приятнее. И никакие гриды не в силах этому помешать.


 
Ega23 ©   (2011-10-10 14:08) [17]


> Если бы в компоненте доступа к данным можно было иметь явный
> доступ к формируемым командам вставки/изменения/удаления
> -- то хоть обредактируйся в гриде.


Так нету же. Посему - зло.


 
Inovet ©   (2011-10-10 14:09) [18]

> [9] Ega23 ©   (10.10.11 13:42)
> Вроде бы кто-то говорил, что у FIB+ есть возможность обращения
> к генератору извне.

Так и в стандартных IBX вроде было такое. Может автор не знает об IBX?


 
Вариант   (2011-10-10 15:34) [19]


> DiamondShark ©   (10.10.11 13:23) [7]


>  Вот забудьте про АДО, и вообще ваш конкретный случай. Подумайте,
>  есть у вас интерфейс с сервером только на основе SQL команд
> и их результатов. Как вы получите назад запись с неизвестным
> первичным ключом?


Вот если забыть про ADO, то использовать  INSERT... RETURNING. FB 2.0 уже поддерживал этот синтаксис, не думаю что в 2.5 от него отказались.:-) А вот как настроить ADO -  тут я не спец, надо читать и искать, есть ли возможность что-то сделать.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
2-1318359297
Gu
2011-10-11 22:54
2012.01.22
обработчик


15-1317709605
PS
2011-10-04 10:26
2012.01.22
Как запросить пароль?


2-1318236805
lesstab
2011-10-10 12:53
2012.01.22
Добавление новой записи и ее отражение.


15-1317713946
OW
2011-10-04 11:39
2012.01.22
как проще всего из программы выдрать ф-цию прятать TaskBar?


2-1318595251
Очень Злой
2011-10-14 16:27
2012.01.22
Unicode





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