‘ top = ’ + Form1.Top +
‘ width = ’ + Form1.Width +
‘ height = ’ + Form1.Height +
‘ font = ’ + Form1.Font.Name +
‘ fsize = ‘ + Form1.Font.Size + ‘;’;
settings_sql.ExecSQL;
CanClose := TRUE;
end;
Т.о. можно реализовать хранение программной информации в БД. Данный пример, конечно, не имеет практического смысла, т.к. эту же функциональность намного проще и удобнее организовать с помощью системного реестра или INI-файлов. Но общий метод работы с информацией позволяет придумать и реализовать более интересное и полезное применение данной технологии. Можно, например, сохранять в БД индексы иконок, присваиваемых пользователем тому или иному пункту представления информации, а сами иконки хранить в ресурсном файле (например, .DLL). Или можно хранить в БД информацию для построения деревьев (например, для компонента TTreeView). Рассмотрим простейший пример реализации этой задачи. Предположим, что мы хотим сохранить в БД одноуровневое дерево, листья которого имеют такие характеристики, как название, отображаемая иконка, содержание (ссылка на файл, информацию из которого нужно отобразить в расположенном на форме компоненте TMemo при выборе данного листа). Вся эта информация должна храниться в БД с возможностью последующего добавления новых листьев, а так же редактирования и удаления имеющихся. БД в данном примере прекрасно подходит в качестве контейнера для хранения такой информации.
Создадим в нашей БД еще одну таблицу и назовем ее “dbtree”. Примерная схема этой таблицы выглядит так:
Имя столбца |
Тип данных |
Комментарий (назначение) |
num |
INT |
Порядковый номер (Первичный ключ) |
caption |
CHAR(20) |
Заголовок (название) |
icon_index |
INT |
Индекс иконки в файле графических ресурсов |
file_name |
CHAR(256) |
Имя связанного файла |
Создадим процедуру, строящую дерево в компоненте TTreeView (назовем его DBTree1) основываясь на информации, полученной из БД c помощью компонента TQuery (с именем tree_sql):
procedure TForm1.BuildTree;
var
rootNode : TTreeNode;
nodeName : String;
begin
tree_sql.Close;
tree_sql.SQL.Text := ‘SELECT num, caption, icon_index, file_name
FROM bdtree
ORDER BY num;’;
tree_sql.Open;
tree_sql.First;
rootNode:=TTreeNode.Items.Add(nil, ‘Корневой узел’);
while not tree_sql.Eof do begin
nodeName := tree_sql.FieldByName(‘caption’).AsString;
with DBTree1.Items.AddChild(rootNode, nodeName) do begin
ImageIndex := tree_sql.FieldByName(‘icon_index’).AsInteger;
Hint := tree_sql.FieldByName(‘file_name’).AsString;
end;
tree_sql.Next;
end;
DBTree1.Repaint;
end;
В данном примере сначала из БД извлекаются все записи, касающиеся дерева. Затем идет построчный цикл по всем извлеченным кортежам данных, в котором к корневому узлу дерева (созданному перед циклом) добавляются дочерние узлы с именами, полученными из БД. Для каждого узла помимо имени устанавливаются отображаемой рядом с именем узла изображение (свойство ImageIndex – номер изображения из подключенного к TTreeView через свойство Images компонента TImageList) и назначается всплывающая подсказка (свойство Hint), в которую записывается имя связанного с узлом файла. Саму подсказку можно и не отображать (выставив в FALSE свойство ShowHint компонента TTreeView), используется она потому, что в ней удобно хранить строковое значение как еще одно свойство компонента.
В приведенном примере строится одноуровневое дерево, что не всегда достаточно для решения возникающих на практике задач. Расширить возможности этого метода можно представив записи БД связанным списком и сохраняя указатель на родительские или дочерние компоненты в свойствах лита.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.