База данных в Delphi

Автор: Пользователь скрыл имя, 23 Декабря 2011 в 19:25, реферат

Описание работы

С точки зрения пользователей, база данных Delphi – это программа, которая обеспечивает работу с информацией, в нашем случае - с информацией в электронном виде. При работе с такой программой, которая как правило выдаёт на экране монитора таблицу, пользователь просматривая её может найти интересующую его информацию. Если программа, база данных Delphi, позволяет, то он может внести изменения или дополнить новую информацию, а так же удалить ненужную.
С точки зрения программиста, база данных Delphi - это набор файлов, содержащих информацию.

Работа содержит 1 файл

База данных в Delphi.doc

— 768.00 Кб (Скачать)

Записи  в таблице базы данных

 
Рассмотрим, как фильтровать записи в таблице базы данных  и индексировать их. Фильтровка записей таблицы это эквивален
т SQL запросам. Фильтровка нужна, для того чтобы показать пользователю меньше записей согласно определённому условию (например: показать только тех студентов группы у кого день рождения в мае или в январе и т.д.). Фильтрацию в Delphi также можно использовать как поиск какой то записи в таблице. На практике в большинстве случаев SQL запросы используются именно в таких случаях, какой описан в примере.  
Фильтр задается, как строка и её определяет свойство Filter, а активность фильтра определяет свойство Filtered, соответственно если оно True то записи фильтруются. Фильтр задаётся согласно всем правилам программирования Delphi, к которым вы привыкли.  
Рассмотрим  функции фильтра:

  1. Арифметические и логические функции и операторы сравнения  
    Примеры:  
    a. Population < 110;  
    b. Vozrast > 25 and Rost < 175;  
    c. Stoimost >150 or Razmer <250;  
    d. Town <> Moskva  
    e. Ves + Rost > 200;  
    f. Vozrast/Ves > 9;
  2. Выполнение операций над строками  
    Примеры  
    a. Last_Name = 'Сидоров';  
    b. First_Name+Last_Name = 'ЕгорСидоров ';  
    c. Substring(Last_Name,1,2)= 'Cи';  
  3. Также функции даты и времени  
    Примеры  
    a. Year(Birth_Day) = 2011;  
    b. Day(Birth_Day) = 10;
  4. Используются также операторы Like и In.

Все возможности  фильтрации полностью документированы в файле справки Delphi в разделе Developing Database Applications > Using client datasets > Limiting what records appear.  
Индексацию определяет свойство IndexFieldNames. Для того чтобы упорядочить по возрастанию таблицу по полю Vozrast нужно присвоить свойству IndexFieldNames значение 'Vozrast'. Очень часто индексация нужна тогда, когда пользователь щёлкает на заголовках столбцов компонента DBGrid.  
procedure TForm1.DBGrid1TitleClick(Column: TColumn);  
begin  
ClientDataSet1.IndexFieldNames:=Column.FieldName;  
end;  
Также индексы можно создать с помощью свойства IndexDefs. Их можно создать как во время выполнения, так и в стадии создания базы данных. Во время выполнения delphi приложения, для того чтобы создать индекс нужно вызвать метод Add свойства IndexDefs. Первый параметр - это имя индекса, второй - имя поля (или полей), третий - опции. Теперь для того чтобы упорядочить таблицу по полю нужно присвоить свойству IndexName имя нужного индекса. Данный метод лучше, чем предыдущий, так как можно быстро переключаться между созданными заранее индексами. Для того чтобы изменить индексы нужно воспользоваться свойством Items свойства IndexDefs, указав порядковый номер индекса. Получить порядковый номер индекса можно через метод свойства IndexDefs IndexOf , указав имя индекса. Например:  
var  
i:integer;  
begin  
…..  
i:=ClientDataSet1.IndexDefs.IndexOf('i4');  
ClientDataSet1.IndexDefs.Items[i].Fields:='Birth_Day';

Редактирование  базы данных.

Редактировние базы данных, то есть в компоненте TClientDataSet можно редактировать только текущую запись и извлекать значение только из текущей записи. Текущая запись -  это та запись, которая имеет фокус ввода в данный момент. Для того чтобы некоторая запись стала текущей, для редактирования базы данных,  её пользователь должен выделить , также её можно выделить программно. Чтобы сделать некоторую запись текущей в Delphi используется такой метод как Locate:  
Locate(const KeyFields: string;  
const KeyValues: Variant; Options: TLocateOptions): Boolean;  
Параметры:

  1. Первый параметр это список полей разделяемых "точкой с запятой" либо одно поле.
  2. Второй параметр это значения, которым должны быть равны поля указанные в первом параметре если полей много то во втором параметре должен быть массив из Variant. Если указано несколько полей то переход осуществляется, только если каждое поле, указанное в первом параметре равно значению, указанному во втором параметре. Если переход прошёл успешно, то функция возвращает True. Для того чтобы получить массив из Variant можно использовать функцию VarArrayOf. Примеры использования метода Locate:  
    If not ClientDataSet1.Locate('LastName',Edit1.text,[]) then  
    MessageDlg(' " '+Edit1.text+' " не найдено', mtError, [mbOK], 0);  
     
    ClientDataSet1.Locate('LastName;FirstName', VarArrayOf( [' Сидоров ', 'Иван'] ), []);
  3. Если нужно перейти к записи, зная лишь часть строкового поля можно использовать опцию loPartialKey в третьем параметре.

ClientDataSet1.Locate('Adres','Mosk',[loPartialKey]); Часть значения не может быть где-то посередине поля она может составлять лишь несколько символов сначала. Допустим, что значение поля Adres равно 'Moskva' то:  
ClientDataSet1.Locate('Adres','Mosk',[loPartialKey]); сработает  
ClientDataSet1.Locate('Adres','skv',[loPartialKey]); несработает.  
Для навигации в таблице также можно использовать хорошо знакомые нам методы:  
First;  
Last;  
Next;  
Prior;  
Также:  
MoveBy(Distance : Integer):Integer; Функция возвращает количество записей, на которое фактически произошло перемещение. Например: если до конца осталось 7 записей, а перемещение происходит на 10 записей, то функция возвратит 7.  
RecNo: Integer;  
Свойство обозначает номер записи, на которой находится фокус ввода. Очень странно, но отсчёт начинается с 1.

 
Получить порядковый номер текущей записи:

 
Current_record:=ClientDataSet1.recno;  
Установить фокус ввода на четвёртую запись в таблице:  
ClientDataSet1.RecNo:=4;  
Итак, мы перешли к нужной нам записи.  
Сначала про класс TField: чтобы получить его значение нужно воспользоваться свойством value, которое возвращает значение типа Variant.

Также есть специализированные свойства:

 
AsString;AsFloat;AsCurrency;AsDateTime и т.д.  
 
Рассмотрим некоторые способы получения некоторого поля из таблицы базы данных:

  • Свойство Fields - является массивом объектов TField. Чтобы получить значение поля нужно указать его порядковый номер (отсчёт с нуля):  
    Str:= ClientDataSet1.Fields[3]. AsString;
  • . Метод FieldByName - возвращает объект типа TField. ShowMessage(ClientDataSet1.FieldByName('Adres').AsString);
  • Свойство FieldValues - возвращает значение Variant. ShowMessage(ClientDataSet1. FieldValues ['LastName']);  
    Это свойство является свойством по умолчанию, поэтому можно писать так ShowMessage(ClientDataSet1['LastName']);

Для того чтобы  изменить значение полей нужно сначала перевести компонент в состояние редактирования (ClientDataSet1.edit ) присвоить нужным полям нужные значения и обновить компонент(см. пример). Переход в состояние редактирования осуществляет процедура Edit; обновление осуществляет процедура Post;  
пример:  
ClientDataSet1.edit;  
ClientDataSet1['LastName']:='Иванов';  
ClientDataSet1['Ves']:='71';  
ClientDataSet1.Fields[1].AsString:='Moskva';  
ClientDataSet1.FieldByName('Vozrast').AsFloat:='24';  
ClientDataSet1.post;  
Добавление записи в конец таблицы осуществляет
метод Append; после вызова этого метода запись переходит в состояние редактирования, для обновления таблицы также используется метод Post. Точно также используется метод Insert; только он вставляет запись сразу после текущей записи.  
Для удаления записи используется
метод Delete; предупреждение не выводится и метод Post; вызывать не надо.  
Мы рассматривали вывод  из базы данных  в приложении с помощью таблицы, а далее будем рассматривать вывод из базы данных с помощью
формы (тестовое приложение).

Информация о работе База данных в Delphi