FBDataSet (библиотека доступа к данным FireBird/Interbase.)
Модератор: Модераторы
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Вот ещё какая мысль есть: для генерации первичного ключа при инсерте использовать не только генератор, но и хранимую процедуру. Просто у меня иногда используется ХП, которая генерит коды в отведённом диапазоне (это если надо генерить уникальные идентификаторы в нескольких однотипных базах, а потом сливать их в одну). Или в твоём датасете уже так можно делать?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
просто интерфейс ХП может быть очень разным - как его в автогенератор запихнёш?
а если ты руками будеш выфетчивать его до вставки в датасет - то пожалусата - сразу после вставки - присвой полю - первичному ключу это значение - а дальше как обычно (рефреш работает по принципу - что указал в качестве параметров рефреш запроса - то берём из тукущего буфера - выполняем запрос и обновляем буфер)
а если ты руками будеш выфетчивать его до вставки в датасет - то пожалусата - сразу после вставки - присвой полю - первичному ключу это значение - а дальше как обычно (рефреш работает по принципу - что указал в качестве параметров рефреш запроса - то берём из тукущего буфера - выполняем запрос и обновляем буфер)
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Я сейчас так и делаю, но часто это лишний обработчик и пара строк в нём. А интерфейс там где разный? Если ХП возвращает инт или бигинт, то всё ОК, иначе - исключение. Если у ХП есть параметр, то только прямо текстом его и втыкать, так что особых нюансов не вижу, если их себе на одно место специально не искать. Ну типа как-то так: есть текстовое свойство, куда вписываем что-то типа:
"GET_NEW_ID('MYTABLE')"
Потом пихаем это в селект (типа SELECT ID FROM GET_NEW_ID('MYTABLE')), или как там с GEN_ID сделано, и считываем результат. В данном случае ХП принимает 1 параметр - имя таблицы. Вот как-то так...
Впрочем, я далеко не настаиваю... так, если вдруг образуется время и желание...
"GET_NEW_ID('MYTABLE')"
Потом пихаем это в селект (типа SELECT ID FROM GET_NEW_ID('MYTABLE')), или как там с GEN_ID сделано, и считываем результат. В данном случае ХП принимает 1 параметр - имя таблицы. Вот как-то так...
Впрочем, я далеко не настаиваю... так, если вдруг образуется время и желание...
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
12.09.2007
ver 1.26
+ Включена поддержка BigInt полей для Lazarus
+ В Lazarus отказался от поодержки полей типа TFBTimeField - используется
стандартный TTimeField (fcl-db работает нормально)
+ В папке lazUIBEditors находится перенесённый из Delphi пакет времени
разработки для настройки свойств компонентов UIB - оригинальные исходники
взяты из uib
- Исправлена регистрация TFBAnsiMemoField - для нормальной работы дизайнера
- Исправлен критический баг при работе в пежиме CashedUpdates
адрес:
http://alexs75.narod.ru/fpc/fbdataset/alexsDataSet_1_26.zip
ver 1.26
+ Включена поддержка BigInt полей для Lazarus
+ В Lazarus отказался от поодержки полей типа TFBTimeField - используется
стандартный TTimeField (fcl-db работает нормально)
+ В папке lazUIBEditors находится перенесённый из Delphi пакет времени
разработки для настройки свойств компонентов UIB - оригинальные исходники
взяты из uib
- Исправлена регистрация TFBAnsiMemoField - для нормальной работы дизайнера
- Исправлен критический баг при работе в пежиме CashedUpdates
адрес:
http://alexs75.narod.ru/fpc/fbdataset/alexsDataSet_1_26.zip
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Назрел у меня вопрос по Master-Detail... Допустим, я в Detail что-то меняю или запись новую вставляю. Потом забываю сохранить и перехожу на другую запись в Master. Вот тут у меня Detail и клинит, пока вручную изменения не сохранишь. Это можно автоматизировать только обрабатывая, например, BeforeScroll в Master или есть какая-то хитрая опция или свойство в компоненте?
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
ок. в следующей версии будет поправлено
сейчас если критично то можеш сам поправить код метода
PS.
Как можно назвать этот флажок - а то у меня уже фантазия не работает
сейчас если критично то можеш сам поправить код метода
Код: Выделить всё
procedure TFBCustomDataSet.MasterUpdate(MasterUpdateStatus:TMasterUpdateStatus);
PS.
Как можно назвать этот флажок - а то у меня уже фантазия не работает
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Похоже, есть ещё один "косячок": Если в Master добавить запись, то в Detail остаются данные с той записи Master, которая была текущей до вставки.
Также я заметил, что если отменить вставку записи (Cancel), то AfterScroll не происходит. Может быть логически это и правильно, но из-за этого, например, не происходит подгрузка картинки, которая "повешена" на данное событие.
Также я заметил, что если отменить вставку записи (Cancel), то AfterScroll не происходит. Может быть логически это и правильно, но из-за этого, например, не происходит подгрузка картинки, которая "повешена" на данное событие.
