Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
all_lab.doc
Скачиваний:
47
Добавлен:
14.11.2019
Размер:
1.42 Mб
Скачать

2. Связь с таблицами

Для связи с таблицами из вашей базы данных среди палитры AnyDAC есть специальный компонент: ADTable.

Для работы необходимо поменять свойства компонента, которые можно редактировать в окошке Object Inspector:

  • Active – true или false. Очень часто, если данные не отображаются в DBGrid’е, то первым делом надо проверить это свойство.

  • Connection – используемое подключение.

  • table_name – самое важное свойство - название таблицы, доступ к которой будем получать через этот компонент. При нажатии вызывает диалог подключения, если база еще не подключена.

Если необходимо изменить названия колонок или добавить новые поля, в том числе и из других таблиц, дважды щелкните по нужному компоненту, появится маленькое пустое окошко. Нажмите правую кнопку мыши и выберите пункт add all fields, в окошке должны появиться все названия полей выбранной таблицы.

Выбираем нужное поле, далее в Object Inspector’е можно редактировать следующие свойства:

  • DisplayLabel – отображаемый заголовок поля: то есть фактически название не меняется, но при отображении в DBGrid’е название поля будет меняться;

  • DisplayWidth – ширина колонки;

  • Visible – отображается поле или нет. Полезно, например, для скрытия от пользователя ID номеров.

Также можно создать новое поле: нажать правую кнопку мыши и выбрать New field, появится форма создания поля. Это удобно, например, для отображения вместо внешних ID номеров - данные из других таблиц. На этой форме необходимо указать имя нового поля (Name), тип данных нового поля (Type), тип поля (Field Type, в нашем случае Lookup, т.е. смотреть из другой таблицы), а также ключ внешнего поля в нашей таблице (Key Fields), просматриваемый ключ другой таблицы (Lookup Keys), имя компонента, в котором находятся просматриваемые данные (Dataset) и имя поля другой таблицы, которое должно отображаться в нашей. Например для того чтобы создать поле, отображающее название профиля необходимо ввести следующие значения:

Перед добавлением новых полей необходимо, чтобы для каждой таблицы из вашей БД был свой компонент ADTable. (на рисунке в компоненте ADTable2 свойство table_name=school25_db.profiles)

3. Отображение таблицы на форме

На форму надо добавить следующие компоненты:

  • Datasource – находится на вкладке Data Access – источник данных, в свойстве DataSet надо выбрать необходимый компонент (ADTable, ADQuery).

  • DBGrid – находится на вкладке Data Controls и в свойстве DataSource выбрать имя нужного компонента DataSource.

Пример:

У нас есть

ADTable1.table_name=school25_db.classes

DataSource1.DataSet= ADTable2

DBGrid1.DataSource= DataSource1

После того, как мы поставим ADTable1.Active=true, данные из этой таблицы сразу же отобразятся в DBGrid’е.

Примечание:

При работе в Delphi подключение происходит только один раз, поэтому, если данные должны были измениться, но это не отображается, попробуйте переподключить БД: поставьте ADConnection.Connected=false при этом у всех компонентов, зависящих от этого подключения свойство Active станет равным false, затем снова поставьте ADConnection.Connected=true, после этого придется вручную поставить у всех зависимых компонентов Active=true.

ADTable1 DataSource1

DBGrid1

Форма

Если необходимо вручную задать отображаемую ширину полей, то можно обработать событие DataSourceDataChange в котором будет проводится проверка типа данных в поле и для них изменять ширину.

Пример.

procedure TForm1.DataSource8DataChange(Sender: TObject; Field: TField);

var i:integer;

begin

for i:=0 to dbgrid8.Columns.Count-1 do

begin

if dbgrid8.Columns.Items[i].Field.DataType=ftstring then

dbgrid8.Columns.Items[i].Width:=160;

if dbgrid8.Columns.Items[i].Field.DataType=ftinteger then

dbgrid8.Columns.Items[i].Width:=32;

end;

end;

Также можно попробовать редактировать столбцы в свойстве DBGrid.Columns, но если количество столбцов меняется, то лучше это свойство не трогать.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]