Я работаю с базами данных Delphi 7 и Firebird. Я использую TIBDatabase, TIBTransaction, TIBQuery, TIBDataSet и DBGrid для установления соединения и предоставления пользовательского интерфейса для работы с таблицей. В моей базе данных у меня есть две таблицы:Обновление Delphi 7 с объединенными таблицами
Ships
fields
Id integer
Name varchar(20)
Type_Id(Fk) integer
Longth integer
Ship_types
fields
Id(Pk) integer
Ship_type varchar(10)
Так в результате набор данных, который я получаю через «присоединиться» запрос имеет такие поля
Name
Type
Longth
Тип является Ship_type поле из Ship_types таблицы соединены с помощью запроса по внешнему ключу TYPE_ID к этой таблице из таблицы Ships.
Данные отображаются правильно.
Затем мне нужно отредактировать свои данные непосредственно через DBGrid. Для этого я использую компонент TIBUpdateSQL. Для отображения поля Type (lookup) я выбрал свойство DBGrid.Columns.PickList.
Так что мой вопрос в том, как я могу заставить TIBUpdateSQL работать с таким типом поля? Причина. Я знаю, что если бы это была отдельная таблица без внешних ключей, я должен написать инструкцию update в свойство ModifySQL компонента обновления. Но что я делаю с полями fk? Могу ли я написать заявление о соединении обновлений в компоненте UpdateSQL или, если нет, что еще я могу сделать?
Мне не нужно обновлять две таблицы, мне просто нужно обновить только таблицу Ships, но в отображении набора данных есть поле varchar (word), а при обновлении набора данных оно должно быть целочисленным (соответствующий id) в соответствии с таблицей состав.
Редактор в TIBUpdateSQL не является решением для меня, потому что я назначаю запрос TIBQuery во время выполнения.
Ну, на самом деле это не Firebird вопрос, но дизайн CRUD. Но ответ заключается в использовании DBLookupFields (а не PickList) непосредственно в DBGrid для выбора типа корабля. – rstrelba