Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.22;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
15-1317719782
Сергій
2011-10-04 13:16
2012.01.22
Допоможіть розібратись!!! Будь-ласка...


15-1312893625
Aleks1995
2011-08-09 16:40
2012.01.22
Delphi Prism 2011


15-1317761204
Делфиец
2011-10-05 00:46
2012.01.22
А что за кайф быть мастером делфи?


2-1318317392
алешка
2011-10-11 11:16
2012.01.22
Значение в ячейке


3-1270104268
Lyudik
2010-04-01 10:44
2012.01.22
Передача данных из Oracle в Delphi