DBGrid + LookupComboBox + новая запись.
Модератор: Модераторы
DBGrid + LookupComboBox + новая запись.
Добрый день!
Не получается сохранить новую запись при добавлении значения через выпадающий список в гриде.
Дата-сеты для подстановки значений и для главного грида присутствуют, все отображается и выбирается, но при сохранении возникает ошибка, что нет такого поля "name". Это поле из дата-сета для подстановки.
Подскажите пожалуйста в чем может быть причина?
Не получается сохранить новую запись при добавлении значения через выпадающий список в гриде.
Дата-сеты для подстановки значений и для главного грида присутствуют, все отображается и выбирается, но при сохранении возникает ошибка, что нет такого поля "name". Это поле из дата-сета для подстановки.
Подскажите пожалуйста в чем может быть причина?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось snkip 22.06.2020 16:37:32, всего редактировалось 1 раз.
LookupResultField д.б. type
Прошу прощения! Я на схеме таблиц неправильно указал название поля, оно называется "name", а не "type" и в настройке столбцов запроса оно же и указано в строке "LookupResultField"
Добавлено спустя 5 минут 39 секунд:
Поменял скрин с таблицами.
Добавлено спустя 41 минуту 44 секунды:
Сейчас попробовал такой пример в Delphi и там все работает, может баг в Lazarus или реализация как-то отличается? Хотя все один в один сделал.
Добавлено спустя 5 минут 39 секунд:
Поменял скрин с таблицами.
Добавлено спустя 41 минуту 44 секунды:
Сейчас попробовал такой пример в Delphi и там все работает, может баг в Lazarus или реализация как-то отличается? Хотя все один в один сделал.
Я списки в DbGrid делаю, через PickList, например
Данные в PickList можете добавлять из чего угодно.
Еще одной причиной может быть, что у вас сложный запрос в SQLQuery, например из нескольких таблиц. Тогда надо явно прописать SQL запросы update, insert в SQLQuery.UpdadeSQL.Text и SQLQuery.InsertSQL.Text
Код: Выделить всё
DbGrid.Columns.Items[0].ButtonStyle := cbsPickList;
DbGrid.Columns.Items[0].PickList.Add('Item1');
DbGrid.Columns.Items[0].PickList.Add('Item2');
Данные в PickList можете добавлять из чего угодно.
Еще одной причиной может быть, что у вас сложный запрос в SQLQuery, например из нескольких таблиц. Тогда надо явно прописать SQL запросы update, insert в SQLQuery.UpdadeSQL.Text и SQLQuery.InsertSQL.Text
mig-31 писал(а):Я списки в DbGrid делаю, через PickList, напримерКод: Выделить всё
DbGrid.Columns.Items[0].ButtonStyle := cbsPickList;
DbGrid.Columns.Items[0].PickList.Add('Item1');
DbGrid.Columns.Items[0].PickList.Add('Item2');
Данные в PickList можете добавлять из чего угодно.
Еще одной причиной может быть, что у вас сложный запрос в SQLQuery, например из нескольких таблиц. Тогда надо явно прописать SQL запросы update, insert в SQLQuery.UpdadeSQL.Text и SQLQuery.InsertSQL.Text
Спасибо за ответ!
Запрос на выборку простой - SELECT * FROM t_phone.
Чтобы работать через PickList мне нужно будет в цикле пройти по датасету? И так понимаю, что добавление данных в таблицу также описать в коде?
Вообще есть ощущение, что при формировании запроса на добавление записи, подставляется Lookup столбец "Name" (тот, что создан для отображения данных подстановки), а по идее должен - "id_t_type"
Все должно работать!. Я в таком стиле сто раз делал, правда. с IBX компонентами. А если убрать Lookup поле все сохраняется?. Чтобы разговор был более предметным желательно привести текст lfm файла.
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, sqldb, db, mysql57conn, Forms, Controls, Graphics, Dialogs,
DBGrids, DBCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
DataPhones: TDataSource;
DataPhoneTypes: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Connection: TMySQL57Connection;
QueryPhones: TSQLQuery;
QueryPhonesid: TAutoIncField;
QueryPhonesid_t_types: TLongintField;
QueryPhonesphone: TStringField;
QueryPhoneTypes: TSQLQuery;
StringField1: TStringField;
Transaction: TSQLTransaction;
procedure FormShow(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormShow(Sender: TObject);
begin
QueryPhones.Open;
end;
end.
Добавлено спустя 2 минуты 2 секунды:
Без Lookup сохраняется, просто ввожу id типа телефона и все ОК!
Добавлено спустя 47 минут 34 секунды:
Попробовал сейчас на PostgreSQL, тот же эффект! Судя по ошибке, данные из Lookup поля тоже пытаются добавиться в таблицу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Сюда по этой ошибке, вам надо задать запрос на вложение записи в SQLQuery.InsertSQL.Text.
Всем спасибо за помощь! Вроде разобрался в чем проблема!
При создании поля подстановки, по умолчанию активны пара чекбоксов, снял галки и все заработало! Ура!
Настройка на скрине, мож кому пригодится!
При создании поля подстановки, по умолчанию активны пара чекбоксов, снял галки и все заработало! Ура!
Настройка на скрине, мож кому пригодится!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
