Создание программ обработки данных по SQL – запросам
Цель работы: освоить создание SQL–запросов в Delphi XE4 и их использование в программах.
Порядок выполнения работы

Рисунок 4.1 Доработанная программа из предыдущей работы, позволяющая осуществлять поиск по базе данных

Рисунок 4.2 Модальное окно поиска

Рисунок 4.3 Окно представления базы в виде формы, включающее панель навигации
Вывод:в ходе лабораторной работы освоил создание SQL–запросов в Delphi XE4 и их использование в программах.
Приложение 1. Исходные коды программы
Программа 1. Вывод базы и поиск по ней.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Data.DB,
Data.Win.ADODB, Vcl.StdCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
if Form2.ModalResult = mrOk then
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'SELECT * FROM contacts WHERE nane Like ''%' + Form2.Edit1.Text + '%''';
ADODataSet1.Open;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'SELECT * FROM contacts ORDER BY nane';
ADODataSet1.Open;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
try
ADOConnection1.Open;
ADODataSet1.Active := True;
except
on e:Exception do begin
DBGrid1.Enabled := False;
MessageDlg('not found contacts.mdb', mtError, [mbOk],0);
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if DBGrid1.EditorMode then
begin
ADODataset1.UpdateBatch(arCurrent);
end;
end;
end.
Программа 2. Представление базы в виде формы
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.ExtCtrls,
Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls, Vcl.ComCtrls, Vcl.Grids, Vcl.DBGrids;
type
TForm1 = class(TForm)
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Image1: TImage;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
OpenDialog1: TOpenDialog;
procedure FormActivate(Sender: TObject);
procedure ADODataSet1AfterScroll(DataSet: TDataSet);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Image1Click(Sender: TObject);
procedure ADOConnection1BeforeConnect(Sender: TObject);
private
{ Private declarations }
aPath: string;
procedure ShowImage(img: string);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Jpeg, IniFiles, StrUtils;
procedure TForm1.FormActivate(Sender: TObject);
begin
aPath := 'G:\школьное\БД\Фед_ЛР';
try
ADOConnection1.open;
ADODataset1.open;
except
on e:Exception do begin
DBEdit1.Enabled := False;
DBEdit2.Enabled := False;
DBNavigator1.Enabled := False;
MessageDlg('Ошибка доступа к файлу БД: '+
aPath + 'contacts.mdb', mtError, [mbOk], 0);
end;
end;
end;
procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject);
var
p1,p2: integer;
IniFile: TIniFile;
fn: string;
st: string;
begin
p1 := Pos('.exe', Application.ExeName);
fn := Copy(Application.ExeName, 1, p1-1) + '.ini';
IniFile := TIniFile.Create(fn);
aPath := IniFile.ReadString('data','aPath','');
if aPath = '' then
MessageDlg('Нет файла: '+ fn ,mtError,[mbOk],0);
st := ADOConnection1.ConnectionString;
p1 := Pos('Data Source', st) ;
p2 := PosEx(';',st,p1);
Delete(st,p1,p2-p1);
Insert('Data Source='+ aPath+ 'contacts.mdb',st,p1);
ADOConnection1.ConnectionString := st;
end;
procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet);
var
img: string;
begin
if ADODataSet1.RecNo <> -1 then
begin
if ADODataSet1.FieldValues['img'] <> Null then
img := ADODataSet1.FieldValues['img']
else
img := '' ;
ShowImage(img);
end
end;
procedure TForm1.ShowImage(img: string);
begin
if img = '' then
img := 'nobody.jpg';
try
Image1.Picture.LoadFromFile(aPath+img);
finally
end; end;
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
case Button of
nbInsert, nbDelete, nbEdit:
begin
DBEdit1.Readonly := False;
DBEdit2.Readonly := False;
DBEdit3.Readonly := False;
Image1.Enabled := True;
if Button = nbInsert then
ShowImage('nobody.jpg');
end;
nbPost, nbCancel:
begin
DBEdit1.Readonly := True;
DBEdit2.Readonly := True;
DBEdit3.Readonly := True;
Image1.Enabled := False;
end;
end;
end;
procedure TForm1.Image1Click(Sender: TObject);
var
nFileName: string;
begin
OpenDialog1.FileName := '*.jpg';
if OpenDialog1.Execute then
begin
nFileName := ExtractFileName(OpenDialog1.FileName);
CopyFile(PChar(OpenDialog1.FileName),
PChar(aPath + 'images\'+ nFileName), false);
ShowImage(nFileName);
ADODataSet1.FieldValues['img'] := nFileName;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ADODataSet1.State = dsEdit then
begin
ADODataset1.UpdateBatch(arCurrent);
end; end; end.
Поиск по сайту:
|