Форум: "Начинающим";
Текущий архив: 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