Здравствуйте, рассматриваю данную тему — по просьбе читателя моего блога. После того, как он мне задал вопрос: как в TDBGridEh, в полях (в записях), где установлены checkbox (флажки), перенести в другую таблицу. Через пару часов, я скачал последнюю версию библиотеки Ehlib и установил ее. Как мне известно, то в компоненте TDBGridEh, в отличии от того же TDBGrid, присутствует расширенный функционал. Ну что, давайте рассмотрим простой пример. А для начала сформируем наш проект. На форме у меня следующие компоненты:
- TDBGridEh
- TADOQuery
- TADOConnection
- TDataSource
- TButton
Теперь, давайте создадим нашу БД, с которой мы будем работать. Таблица у меня следующей структуры:
То есть, понятно, где у нас будут отображаться checkboxes, там у нас тип Логический, если использовать БД MySQL, то необходимо для данного поля, выбирать тип BOOL.
Теперь давайте настроем немного наши компоненты. Выделяем компонент TADOConnection и свойство LoginPromt устанавливаем в False. Затем, через свойство ConnectionString, подключаемся к нашей БД. Как это сделать, можно посмотреть здесь.
Далее, мы выделяем компонент TDataSource и в свойстве DataSet - выбираем TADOQuery.
После этого, выделяем компонент TADOQuery и в свойстве Connection - выбираем TADOConnection, ну и наконец-то выделяем компонент TDBGridEh и в свойстве DataSource выбираем — TDataSource.
Если, Вы сделали все правильно, то подключение к нашей БД должно работать. Далее, выделяем еще раз компонент TDBGridEh и нажимаем по нему двойным щелчком мыши, после чего должно появиться следующее окно:
В данном окне, мы создаем 2 колонки (TColumns). В свойствах FieldName указываем — id, а второй колонки — checkbox.
В свойстве checkboxes поля, в котором необходимо отображать CheckBox устанавливаем в True (в нашем случае это поле — checkbox).
Теперь необходимо активировать нашу таблицу, для этого на событие формы OnShow напишем следующий код:
procedure TForm1.FormShow(Sender: TObject);
begin
ADOQuery1.SQL.Add('SELECT * FROM TableTest');
ADOQuery1.Active:=True;
end;
Тут все понятно, в прошлых статьях: по работе с БД MS Access, мы рассматривали данный код подробнее.
Ну, а теперь, давайте попробуем добавить какую-нибудь запись и посмотреть, как она храниться в таблице. Для этого, на событие OnClick TButton напишем следующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Insert;
ADOQuery1.Fields.FieldByName('checkbox').AsVariant:=True;
ADOQuery1.Post;
end;
Что делаем, мы данным кодом: вставляем запись, устанавливаем указатель (флажок), сохраняем запись.
А теперь давайте попробуем вывести значение поля checkbox. Для это напишем следующий код:
procedure TForm1.Button3Click(Sender: TObject);
begin
ADOQuery1.First;
ShowMessage(ADOQuery1.Fields.Fields[1].AsVariant);
end;
Установили указатель на первую запись и вывели результат — сообщением, у меня получилось следующее:
То есть, если указатель установлен, то возвращаться будет True, если нет — False. Все просто.
Ну, а теперь, выборка записей, у которых установлен флажок. Для этого, мы частично, воспользуемся статьей.
Выделяем компонент TADOQuery, в свойстве Parameters - создадим новый параметр, которому в свойстве Name укажем check, а в свойстве DataType - ftBoolean. Все, теперь нам остается написать следующий код:
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TableTest WHERE checkbox=:check');
ADOQuery1.Parameters.ParamByName('check').Value:=True;
ADOQuery1.Active:=True;
end;
Все, теперь в нашем запросе находятся все поля, у которых установлен флажок (указатель), и с данными записями можно делать все, что угодно: переносить в другие таблицы, удалять, редактировать и так далее.
Исходник, как всегда, прилагается, качаем его тут (IDE Delphi 7).