Информационные системы

Автор работы: Пользователь скрыл имя, 05 Ноября 2009 в 13:11, Не определен

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

Лекции

Файлы: 1 файл

КИС_лекции (1 семестр).doc

— 645.00 Кб (Скачать файл)

    BDE взаимодействует с базами данных через драйверы. Для большинства наиболее распространенных баз данных разработаны стандартные драйверы.

    Кроме того, обеспечивается возможность взаимодействия с базой данных через драйвер  ODBC. Доступ к SQL-серверам обеспечивает система драйверов SQL Links, позволяющая разрабатывать приложения для серверов Oracle, Informix, Sybase, DB2 и InterBase.

    15.1. Доступ к данным  с использованием  BDE

      

    

      

    

    

    

    

    

    

      
 

      

      

    

      
 
 

    Рис. 15.1. Схема доступа к БД 

    BDE разрешает реляционный (на языке  SQL) и навигационный (понятия текущей,  следующей и предыдущей строки  и т.п.) способы доступа к БД, доступ к локальным и серверным БД.

    Для каждой БД строится свой драйвер, который  учитывает особенности СУБД и  транслирует вызовы функций общего вида в вызовы частного вида.

    Каждой  БД в BDE обычно назначают условное имя (alias), через которое к ней идет обращение. Перенаправив условное имя на другую БД, можно легко переключить прикладную программу на другие данные и даже на данные другого формата. Назначение условных имен производится программами SQL Explorer или BDE Administrator.

    15.2. Компоненты доступа к данным

    Любое приложение, работающее с базами данных, должно обеспечивать ряд типовых  функциональных возможностей, включающих:

    • подключение к базе данных;
    • считывание информации из таблиц этой базы данных;
    • редактирование данных и навигация по набору данных.

    Обращение к базам данных производится с  помощью специальных компонентов, использующих функции BDE:

    TTable – обеспечивает доступ к таблицам локальных баз данных и управление ими;

    TQuery – использует для доступа к базе данных SQL-запросы, поэтому позволяет работать как с локальными, так и с удаленными базами данных. 

    Любые прикладная программа на Delphi, желающая использовать БД, должна иметь в  своем составе, по меньшей мере, три  слоя компонентов.

      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис. 15.2. Схема слоев компонентов в прикладной программе 

    Простая форма предназначена для просмотра  и обновления единственной таблицы. 

    Для такой формы нужны следующие  компоненты: 

    TQuery (или TTable) - 1 шт.

    TDataSource  - 1 шт.

    TDBGrid  - 1 шт.

    TDBNavigator  - 1 шт. 
 

    Основные  свойства этих компонент

    Свойство Значение Комментарий
    TQuery
    RequestLive True Можно обновлять  таблицу в сетке и передавать обновления в БД
    DatabaseName Student Условное имя БД (alias)
    Name Q1 Имя этого компонента
    SQL Select * from P SQL - оператор
    TDataSource
    DataSet Q1 Имя компонента TQuery, связанного с БД
    Name DS1 Имя этого компонента
    TDBGrid
    DataSource DS1 Имя компонента TDataSource
    TDBNavigator
    DataSource DS1 Имя компонента TDataSource
    VisibleButtons nbFirst, … Список разрешенных  кнопок для перемещения по таблице
 

    Компоненты  верхних слоев ссылаются на имена  компонентов в нижних слоях.

    Компонент TTable предназначен для доступа к  единственной таблице файл-серверной  СУБД, а TQuery - к любому количеству таблиц в клиент-серверной СУБД. 

    Обычно TTable используется в навигационном режиме для обработки единичных строк в таблице, а TQuery - для групповых операций с помощью SQL.

    Оба компонента могут открыть набор  данных методом Open или двоичным свойством Active и закрыть методом Close или  тем же свойством Active. 

    Для просмотра и изменения НД обычно используются компоненты: TDBNavigator, TDBGrid и др., которые автоматически вызывают нужные методы компонентов TTable и TQuery.

    Примеры программного доступа к НД: 

    Пример 1: Изменение в БД 

    Q1 : TQuery;

    ...

    Q1.Open; // Открыть НД - выполнить оператор SQL SELECT

    ...

    Q1.Edit;  // Перевести в режим редактирования

    Q1.FieldByName('gorod').AsString := 'Москва';

                      // Столбец 'Gorod' интерпретируется как строка

                      // Клетке присваивается  значение 'Москва'

      Q1.Post;  // Запомнить изменения в БД

        ...

      Q1.Close; // Закрыть НД  

    Существуют  другие типы-свойства:

    AsBoolean : Boolean;

    AsDataTime : TDataTime;

    AsFloat : double;

    AsInteger : integer; 

    Пример 2: Изменение БД с подтверждением 

    if Q1.Modified then  // НД был изменен?

       if MessageDlg('Записать?', mtConfirmation[mbYes,mbNo],0) = mrYes then

          Q1.Post;    // Запомнить изменения в БД  

    Свойство Modified принимает значение true, если хотя бы одна клетка НД была изменена пользователем. 

    Пример 3: Подсчет суммы значений в столбце 

    var

        sum : integer;

      begin

        sum := 0;

        Q1.Open;

        Q1.First;  // Переход к 1-ой строке 

        while not Q1.EOF do

          begin

            sum := sum + Q1.FieldByName('ves').AsInteger;

            Q1.Next;

          end;

        Q1.Close;

        ...

      end; 
 

    Некоторые особенности класса TQuery

    1) Свойство SQL может содержать только  один оператор SQL, хотя в нем  могут упоминаться несколько  таблиц.

    2) Операторы SELECT из этого свойства  выполняются методом Open, а операторы  INSERT, DELETE и UPDATE методом ExecSQL. 

    Например:

    а)

      with Query1 do

        begin

          Close;  { закрыть НД }

          SQL.Clear;  { удалить предыдущий оператор SQL }

          SQL.Add('SELECT * FROM P');  { задать новый  оператор SQL }

          Open;  { будет выполнять этот  оператор SQL }

        end; 

    б)

      with Query1 do

        begin

          Close;  { закрыть НД }

          SQL.Clear;  { удалить предыдущий оператор SQL }

          SQL.Add('DELETE FROM S');  { задать новый  оператор SQL }

          ExecSQL;  { выполняет другой оператор SQL, помимо SELECT }

        end; 

    3) Свойство RequestLive задает желание изменять  данные в БД путем навигации  и правки НД, т.е. правки результата  оператора SELECT. 

    Однако  истина (true) в свойстве RequestLive не гарантирует, что правка будет разрешена. Для  разрешения требуется, кроме того:

    а) обращаться только к одной таблице;

    б) не применять часть ORDER BY;

    в) не применять функции вида SUM, AVG и  пр.;

    г) не применять вычисляемые столбцы. 

    4) При любых значениях свойств  RequestLive и CanModify изменять БД можно  операторами UPDATE, INSERT, DELETE и методом ExecSQL. 

    5) Изменяющийся оператор SQL можно построить  двумя способами: 

    а)

    var

       x : string[10];

      ...

    with Query1 do

      begin

        Close;  { закрыть НД }

        SQL.Clear;  { удалить предыдущий оператор SQL }

        SQL.Add('SELECT * FROM P WHERE ves='+x);  { задать новый оператор SQL }

        Open;  { будет выполнять этот  оператор SQL }

      end;

     

    x - строковая переменная, содержащая  заданный пользователем вес детали. 

    б) Пусть свойство SQL содержит оператор с двумя параметрами:

       SELECT * FROM P WHERE gorod=:Gor AND ves=:Massa

       тогда с помощью метода ParamByName можно дать параметру некоторое  значение. 

       Пример: 

       var

         Town, x : string[30];

       ...

       with Query1 do

         begin

           Close;  { закрыть НД }

           SQL.Clear;

           SQL.Add('SELECT * FROM P WHERE gorod=:Gor AND ves=:Massa');

           ParamByName('Gor').Value := Town;

           ParamByName('Massa').Value := x;

           Open;  { будет выполнять оператор SQL }

         end; 

    6) Пусть свойство SQL содержит оператор, который возвращает одиночный результат. Например:  SELECT SUM(kapital) FROM S;

    Этот  результат удобно извлекать с  помощью метода FieldByName. 

    Пример: 

       var

         Y : string[30];

       ...

       with Query1 do

Информация о работе Информационные системы