У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


TDate;

для SpeedButton1 створимо таку процедуру обробки події OnClick:

procedure TCalendarForm.SpeedButton1Click(Sender: TObject);

begin

selDate:=MonthCalendar1.Date; // запам'ятовуємо вибрану дату

CalendarForm.Close; // закриваємо форму

end;

В модуль slave.dpr введемо наступний текст:

uses

Forms,

SysUtils,

Classes,

cal in 'cal.pas' {CalendarForm};

function GetDate: TDateTime; stdcall;

begin

Application.CreateForm(TCalendarForm, CalendarForm); // динамічно створюємо форму

CalendarForm.ShowModal; // виводимо форму на екран

GetDate:=selDate;// значенню що повертає функція присвоюємо значення вибраної дати

end;

exports

GetDate; // функція для зовнішнього використання

begin

end.

Так як для більшої швидкості виконання програми, форми створюються динамічно, то відповідно в властивостях проекта (Projects ? Properties) потрібно забирати форми з поля “AutoCreate Forms”.

Для SpeedButton1 i SpeedButton2 в основній програмі, в процедуру обробки події OnClick вставимо наступний текст:

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

DBEdit1.Text:=DateToStr(GetDate);

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

DBEdit2.Text:=DateToStr(GetDate);

end;

Відповідно перед секцією Implementation вставимо наступне:

{export from slave.dll}

function GetDate: TDateTime; stdcall; external 'slave.dll';

Тепер при натисненні на кнопку біля відповідних полів користувач зможе вибрати дату з календаря.

Створимо нову закладку PageControl1, назвемо її “Запити”. Створимо для цієї закладки нову панель інструментів, помістивши на ControlBar1 ToolBar1. Додамо декілька кнопок викликаючи контектне меню на ToolBar1 і вибираючи опцію New Button. Помістимо на закладку DBGrid для перегляду результатів запитів. Помістимо на закладку GroupBox, на якому розташуємо для початку 6 компонент Edit, над якими розмістимо по Label з назвами відповідних полів з таблиці “Товар”. Розташуємо між двома останніми полями ComboBox1. Будемо використовувати відповідні поля для вводу критеріїв для запитів. Перш за все зробимо вікно в якому ми зможемо контролювати правильність створення запиту SQL. Виберемо в меню команду File ??New Form, надамо її властивостям наступних значень: Name = SQLText, BorderStyle = bsToolWindow, Position = poDesktopCenter. Помістимо на форму Memo1, змінимо властивість Align = AllClient. Для Query1 з DataModule1 введемо такий текст для обробки події AfterOpen:

var

SQLtxt:TStrings;

procedure TDataModule1.Query1AfterOpen(DataSet: TDataSet);

begin

SQLtxt:=DataModule1.Query1.SQL;

end;

a для події кнопки OnClick, якій ми присвоїмо Hint “Показати текст виконаного запиту”, цей напис буде з'являтись при наведенні курсору миші на кнопку (властивість ShowHints для відображення вспливаючих підказок повинна мати значення True, для присвоєння всім елементам цього значення, достатньо присвоїти ShowHints = True батьківському елементу, наприклад Form1):

procedure TForm1.ToolButton10Click(Sender: TObject);

begin

Application.CreateForm(TSQLText, SQLText); // динамічно створюємо форму

SQLText.Memo1.Lines:=SQLtxt; // виводимо текст запиту

SQLText.ShowModal; // показуємо форму

SQLText.Close;

end;

Для DBGrid3 властивості DataSource присвоїмо значення DataModule1.DataSource4, властивості DataSource4 DataSet = Query1. Щоб при завантаженні програми DBGrid не був пустим відобразимо в ньому таблицю «Товар» наступним чином – властивості DatabaseName Query1 надамо значення “_db1” в полі SQL викликавши вікно введемо текст: “select * from Товар;” (без лапок).

Для першої кнопки з ToolBar1 – ToolButton1 в полі властивості Hint напишемо настпуне – “Шукати записи по введених критеріях”, створимо для цієї кнопки виконання запиту з використанням інструкції SQL select. Перед цим ComboBox1 надамо таких значень для вибору в властивості «Items»: “=”,”>”,”<”,”..”. Для події OnChange ComboBox1 введемо наступне:

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

if ComboBox1.ItemIndex=3 then Edit12.Visible:=True // при виборі значення “..” з'являється поле для //вказання інтервалу відбору значень

else Edit12.Visible:=False;

end;

Для обробки події OnClick ToolButton1 введемо наступний текст:

const

t1:string='[Код товару]'; // назви полів

t2:string='[Назва товару]';

t3:string='[Опис товару]';

t5:string='[Ціна за одиницю товару]';

t4:string='[Упаковка]';

procedure TForm1.ToolButton3Click(Sender: TObject);

var sqlTable,sqlWhere: String;

begin

DataModule1.Query1.SQL.Clear;

sqlTable:='Select * ';

sqlWhere:='where ';

sqlTable:=sqlTable + 'from Товар ';

sqlWhere:=sqlWhere+'('+t1+' like '''+'%'+Edit1.Text+''') and ('+t2+' like '''+Edit2.Text+''') and ('+

t3+' like '''+Edit3.Text+''') and ('+t4+' like '''+Edit4.Text+''') and (';

case ComboBox1.ItemIndex of

0: sqlWhere:=sqlWhere+t5+' = '+Edit5.Text+');'; // рівне вказаному значенню

1: sqlWhere:=sqlWhere+t5+' > '+Edit5.Text+');'; // більше

2: sqlWhere:=sqlWhere+t5+' < '+Edit5.Text+');'; // менше

3: sqlWhere:=sqlWhere+t5+' between '+Edit5.Text+' and '+Edit12.Text+');'; // в інтервалі

end;

DataModule1.Query1.SQL.Add(sqlTable+sqlWhere);

DataModule1.Query1.Active:=True;

end;

Символ процента використовується в мові SQL драйвера MS ACCESS для вибору всіх значень з предикатом Like (наприклад like’a%’ поверне всі значення що починаються з букви а), тому по замовчуванні для Edit полів таблиці товар задамо значення Text = %, для поля «Ціна за одиницю товару” Text = 0, для Edit12, поля в якому вказуэться верхня межа по замовчуванны введемо Text = 1000. Запустимо програму і перейшовши на закладку “Запити” натиснемо кнопку з підказкою “Шукати записи по введених критеріях”, після чого натиснемо на кнопку для перегляду тексту запиту з підказкою “Показати текст виконаного запиту”, отримаємо наступне:

Аналогічно створимо на панелі інструментів кнопки, яким присвоїмо властивість Hint відповідно «Знищити записи, що задовільняють критеріям», «Створити нову таблицю на основі записів, що задовільняють критеріям», «Додати новий запис» і «Ввести запит самому», для яких введемо наступний текст обробки подій OnClick:

procedure TForm1.ToolButton4Click(Sender: TObject); // знищення записів

var sqlTable,sqlWhere: String;

begin

if MessageDlg('Ви впевненні що хочете знищити записи, що задовільняють введеним даним?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then

begin

DataModule1.Query1.SQL.Clear;

sqlTable:='Delete * ';

sqlWhere:='where ';

sqlTable:=sqlTable + 'from Товар ';

sqlWhere:=sqlWhere+'('+t1+' like '''+'%'+Edit1.Text+''') and ('+t2+' like '''+Edit2.Text+''') and ('+

t3+' like '''+Edit3.Text+''') and ('+t4+' like '''+Edit4.Text+''') and (';

case ComboBox1.ItemIndex of

0: sqlWhere:=sqlWhere+t5+' = '+Edit5.Text+');';

1: sqlWhere:=sqlWhere+t5+' > '+Edit5.Text+');';

2: sqlWhere:=sqlWhere+t5+' < '+Edit5.Text+');';

3: sqlWhere:=sqlWhere+t5+' between '+Edit5.Text+' and '+Edit12.Text+');';

end;

DataModule1.Query1.SQL.Add(sqlTable+sqlWhere);

DataModule1.Query1.ExecSQL;

end;

end;

procedure TForm1.ToolButton9Click(Sender: TObject); // додання записів

var sqlInsert: String;

begin

DataModule1.Query1.SQL.Clear;

sqlInsert:='Insert into Товар Values ('''+'%'+Edit1.Text+''','''+Edit2.Text+''','''+

Edit3.Text+''','''+Edit5.Text+''','''+Edit4.Text+''');';

DataModule1.Query1.SQL.Add(sqlInsert);

DataModule1.Query1.ExecSQL;

end;

procedure TForm1.ToolButton7Click(Sender: TObject); // створення нової таблиці

var TableName,sqlCreate:string;

begin

DataModule1.Query1.SQL.Clear;

TableName:=InputBox('Введіть ім''я нової таблиці','','');

sqlCreate:='Select * into '+TableName+' from Товар where ('+t1+' like '''+'%'+Edit1.Text+''') and ('+t2+' like '''+Edit2.Text+''') and ('+

t3+' like '''+Edit3.Text+''') and ('+t4+' like '''+Edit4.Text+''') and (';

case ComboBox1.ItemIndex of

0: sqlCreate:=sqlCreate+t5+' = '+Edit5.Text+');';

1: sqlCreate:=sqlCreate+t5+' > '+Edit5.Text+');';

2: sqlCreate:=sqlCreate+t5+' < '+Edit5.Text+');';

3: sqlCreate:=sqlCreate+t5+' between '+Edit5.Text+' and '+Edit12.Text+');';

end;

DataModule1.Query1.SQL.Add(sqlCreate);

DataModule1.Query1.ExecSQL;

DataModule1.Query1.SQL.Clear;

DataModule1.Query1.SQL.Add('Select * from '+TableName);

DataModule1.Query1.Active:=True;

end;

procedure TForm1.ToolButton11Click(Sender: TObject); // самостійне введення запиту

begin

with DataModule1.Query1 do

begin

SQL.Clear;

SQL.Add(InputBox('Введіть запит','',''));

Active:=True;

end;

end;

Наведемо приклад створення запиту з двох таблиць. Помістимо на GroupBox Edit9, ComboBox3 i дві компоненти SpeedButton. Одна з них буде використовувати нашу функцію з dll GetDate. Запит повинен вибирати за введеною датою товари з таблиці «Товар» на основі


Сторінки: 1 2 3