Читать книгу: «Базы данных на Delphi 7», страница 5

Шрифт:

3. ОТКРЫТИЕ ТАБЛИЦЫ ДАННЫХ С ПОМОЩЬЮ КОМПОНЕНТЫ «TQUERY»

Рассмотрим процедуру, открывающую таблицу "c:\db\u2_fakul.dbf". Доступными будут все поля и все записи:

procedure TForm1.Button1Click(Sender: TObject);

begin

// Привязываем компонент Datasource1 к компоненту DBGrid1

  DBGrid1.DataSource:=Datasource1;

// Привязываем компонент Query1 к компоненту Datasource1

  DataSource1.DataSet:=Query1;

// Указываем каталог таблиц БД

  DataSource1.DataBaseName:=’ c:\student\db’;

  with query1 do begin

    Close; // Закрываем (на всякий случай) данные в компоненте Query1

    SQL.Clear; // Очищаем текст SQL-запроса

// Занесем в компонент query1 текст SQL-запроса

    SQL.Add('select *'); // даем команду выбрать все поля

    SQL.Add('from "u2_fakul.db"'); // указываем имя таблицы БД

    Open; // Открываем таблицу данных "c:\db\u2_fakul.db"

  end;

end;

Рассмотрим фрагмент процедуры, открывающий таблицу "c:\db\u2_fakul.dbf", причем записи будут доступные все, а поля только с именами «name» и «kod_fakul». Все записи отсортируются по полю «name» в возрастающем порядке.

with query1 do begin

    Close; SQL.Clear;

    SQL.Add('select name, kod_fakul');

    SQL.Add('from "c:\db\u2_fakul.dbf"');

    SQL.Add('order by name');

    Open;

  end;

Рассмотрим фрагмент процедуры, открывающий таблицу "c:\db\u2_fakul.dbf", причем записи будут доступные все, а поля только с именами «name» и «kod_fakul». Все записи отсортируются по полю «kod_fakul» в возрастающем порядке и по полю «name» в убывающем порядке. В тексте SQL-запроса используются две строковые переменные s1 и s2.

var s1,s2: string;

begin

with query1 do begin

    s1:='name, kod_fakul'; s2:='c:\db\u2_fakul.dbf';

    Close; SQL.Clear;

    SQL.Add('select '+s1); SQL.Add('from "'+s2+'"');

    SQL.Add('order by kod_fakul, name DESC');

    Open;

  end;

end;

После открытия данных командой «Open» текст SQL-запроса не имеет значения, и его изменение не изменит отображаемых компонентом данных. Для активизации нового текста SQL-запроса необходимо закрыть данные компонента “Query” командой «Close», после чего задать новый текст запроса и открыть данные командой «Open».

Программирование с использованием SQL-запросов является наиболее передовой технологией работы с базами данных. Данная технология называется реляционным способом доступа к базе данных. Непосредственный доступ к базе данных через компонент «Table» называется навигационным способом. Навигационный способ является устаревшим, т.к. он рассчитан на использование локальных базам данных без сетевой поддержки.

При работе с распределенными в сети (коллективными) базами данных используется только реляционный способ, т.к. только он позволяет предотвращать сетевые коллизии при одновременном доступе нескольких пользователей к базе данных, и существенно разгружает сетевой трафик. Поэтому рекомендуется использовать компонент “Query” вместо компоненты «Table», хотя нужно отметить, что навигационный способ обычно работает быстрей, чем реляционный.

Использование реляционного способа доступа к БД через компоненту “Query” позволяет не только легко производить сложнейшую обработку нескольких взаимосвязанных таблиц данных, но и производить модификацию данных (вставлять новые записи, производить групповое удаление данных, делать каскадную замену информации и др.).

Пример отбора записей по значениям символьного поля:

  SELECT Name FROM Pers WHERE Post=’Менеджер’

     // А лучше так:

  SELECT Name FROM Pers WHERE UPPER(TRIM(Post))=’МЕНЕДЖЕР’

Использование псевдонимов:

  SELECT P.Name FROM “People.db” As P

Пример сцепления двух таблиц:

SELECT p.fio,p.tel

FROM “tel.db” as t, “people.db” as p

WHERE t.code_p =p.code_p;

ЛЕКЦИЯ № 7

1. ОСНОВНЫЕ СОБЫТИЯ КОМПОНЕНТ ДОСТУПА К ТАБЛИЦАМ ДАННЫХ

Компонент “Table” имеет множество событий, которые возникают при любой работе с базой данных, будь то открытие БД, закрытие, переход на другую запись, удаление записи и т.д. Данные события могут возникнуть в одинаковой степени при работе с любым визуальным компонентом, связанным с базой данных. Основные события компонента следующие:


Имя событияСобытие возникает
AfterOpen / BeforeOpenПосле / перед открытием базы данных (например, для метода Open)
AfterClose / BeforeCloseПосле / перед закрытием базы данных (например, для метода Close)
AfterScroll / BeforeScrollПосле / перед переходом на другую запись в БД (например, для метода Next)
AfterEdit / BeforeEditПосле / перед началом редактирования текущей записи (например, для метода Edit)
OnEditErrorВ случаи возникновения ошибки при попытке начать редактирование текущей записи (например, для метода Edit)
AfterInsert / BeforeInsert / OnNewRecordПосле / перед / в процессе вставки или добавления в БД новой записи (например, для метода Insert)
AfterPost / BeforePostПосле / перед сохранением сделанных изменений в текущей записи (например, для метода Post)
OnPostErrorВ случаи возникновения ошибки при сохранении сделанных изменений в текущей записи (например, для метода Post)
AfterDelete / BeforeDeleteПосле / перед удалением текущей записи (например, для метода Delete)
OnDeleteErrorВ случаи возникновения ошибки при удалении текущей записи (например, для метода Delete)
AfterCancel / BeforeCancelПосле / перед отменой сделанных изменений в текущей записи (например, для метода Cancel)

Контроль ввода данных перед сохранением записи:

procedure Table_FakulBeforePost(DataSet: TDataSet);

var s: string;

begin

  try s:=table1['name']; except s:=''; end;

  if s='' then begin

       MessageDlg('Укажите имя!', mtInformation, [mbOK],0); abort;

   end;

end;

ЛЕКЦИЯ № 8

1. ПРИМЕРЫ МЕТОДОВ РАБОТЫ С ДАННЫМИ БД

1. Использование закладок:

procedure TForm1.Button1Click(Sender: TObject);

var SaveP: TBookmark;

begin

try

  SaveP := Table1.GetBookmark;

…………………

  Table1.GotoBookmark(SaveP);

  Table1.FreeBookmark(SaveP);

except end;

end;

2. Показ количества записей в БД:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

  try

    StaticText1.caption:='Всего доступно записей: '+inttostr(Table1.recordcount);

  except; end;

  Application.ProcessMessages;

end;

3. Изменение значений поля через SQL-запрос:

   UPDATE Pers.db

       SET Salary = Salary + 50

        WHERE Salary < 500 // Если сотрудник имеет оклад менее 500 руб., то его оклад увелич. на 50 руб.

………

   UPDATE Store.db

         SET S_Price = S_Price * 1.1 // Цена всех товаров увеличивается на 10 %

4. Добавление записи через SQL-запрос:

    INSERT INTO Store.db

          (Name, Price) VALUES (“Морковь”, 4.7)

5. Добавление нескольких записей через сложный SQL-запрос:

    INSERT INTO CardsArchives (Code, Move, Date)

          SELECT C_Code, C_Move, C_Date

              FROM Cards WHERE C_Date BETWEEN 1.1.98 AND 31.12.98

6. Удаление записей через SQL-запрос:

   DELETE FROM Store.db

       WHERE S_Quantify = 0

7. Использование параметров в SQL-запросах (свойство «Params» типа «TParams»):

  Query1.ParamByName(‘pCena’).AsFloat:= StrToFloat(Edit1.Text);

или

 Query1.Params[0].AsFloat:= StrToFloat(Edit1.Text);

Пример с параметром:

   SELECT Name, Post, Cena

        FROM Pers.db

        WHERE Cena >= :pCena

Возрастное ограничение:
12+
Дата выхода на Литрес:
11 июня 2021
Дата написания:
2012
Объем:
39 стр. 16 иллюстраций
Правообладатель:
Автор
Формат скачивания:
epub, fb2, fb3, ios.epub, mobi, pdf, txt, zip

С этой книгой читают