. 02 , .
:
. 4
1. .. 5
1.1. .. 6
1.2. . 11
1.3. .. 12
2. . 13
. 14
.. 15
. 16
, . . , , .
, . , , . . .
, , . MySQL .
MySQL , , .
MySQL , .
, , Delphi. , .
. :
1. TDataSetProvider, TClientDataSet, TDataSource ;
2. TSQLQuery ;
3. TDBGrid ;
4. TDBNavigator ;
5. TMainMenu , .
:
1 -
TDBGrid , TDBNavigator , TDBGrid TMainMenu .
, :
2 - "",
, :
|
|
3 - , ""
, , , , .
, . , .
, :
4 - , ""
, .
, :
5 -
, :
6 - , ""
, , , , .
:
7 - / ""
, :
8 - , ""
, , , .
养, . , :
9 - , " ..."
, . , , :
procedure TForm1.N9Click(Sender: TObject);
begin
_state:= ST_NONE;
Caption:= '';
try
ClientDataSet1.Close;
q.Close;
q.SQL.Text:=
'select orders.id_orders as " ", dish.title as "", ' +
'orders.cnt as "", menu.price as "", ' +
'(orders.cnt * menu.price) as "" ' +
'from orders ' +
'left join dish on (orders.id_dish = dish.id_dish) ' +
'left join menu on (dish.id_dish = menu.id_dish)' +
'order by orders.id_orders';
q.Open;
q.FieldByName('').AsCurrency;
q.FieldByName('').AsCurrency;
DataSetProvider1.DataSet:= q;
ClientDataSet1.Open;
DBGrid1.Columns[1].Width:= 200;
except on e:Exception do
MessageBox(0, ' ""!', '', MB_OK + MB_ICONWARNING);
end;
DBGrid1.Options:= DBGrid1.Options - [dgEditing];
end;
SQL, , , .
: *
, . , , , , .
DBGrid .
|
|
, , , DBGrid .
:
- 600 ;
- VGA 800x600;
- 128
- WindowsXP;
- 5 .
, :
1. Cafe.exe
. .
2. , ,
, .
3.
, .
4. , ,
.
, , .
, , .
.
, , .
MySQL, Delphi 2010. dbExpress.
1. .. : . . .: . ., 2003. 447 .
2. . Delphi. . 2010. .: , 2010. 1035 .
3. .. Delphi. : . . .: , 2009. 640 .
4. .. : / .. , .. . : - .., 2003. 719 .
5. .. Delphi 7: . .: , 2008. 736 .
6. .. Delphi . .: -, 2007. 288 .
7. .. Delphi: Delphi. .: , 2008. 804 .
8. .. Delphi. .: -, 2009. 799.
9. .. Delphi/ .. , .. . -, 2004. 320 .
10. .. Windows. - .:- , 1995. 639 .
1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, Menus, ExtCtrls, DBCtrls,
FMTBcd, DBClient, Provider, SqlExpr,
Mbd_MySql, uMenuRec, uOrderRec;
type
TForm1 = class(TForm)
Button1: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
Panel1: TPanel;
Panel2: TPanel;
dbNav: TDBNavigator;
N8: TMenuItem;
N9: TMenuItem;
qDish: TSQLQuery;
DataSetProvider1: TDataSetProvider;
ClientDataSet1: TClientDataSet;
qMenu: TSQLQuery;
qDishtitle: TStringField;
qDishweight: TFloatField;
qDishcompos: TStringField;
qDishid_dish: TIntegerField;
qMenuprice: TFloatField;
qMenutitle: TStringField;
qMng: TSQLQuery;
qMngid_manager: TIntegerField;
qMngf: TStringField;
qMngi: TStringField;
qMngo: TStringField;
qMngtel: TStringField;
qMenuid_menu: TIntegerField;
qMenuid_dish: TIntegerField;
qOrders: TSQLQuery;
qOrdersid_orders: TIntegerField;
qOrdersid_dish: TIntegerField;
|
|
qOrdersid_manager: TIntegerField;
qOrderscnt: TIntegerField;
qOrderscreated_at: TSQLTimeStampField;
qOrderstitle: TStringField;
qOrdersf: TStringField;
q: TSQLQuery;
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure ClientDataSet1AfterPost(DataSet: TDataSet);
procedure dbNavBeforeAction(Sender: TObject; Button: TNavigateBtn);
private
_state: integer;
_db: TMbd_MySql;
Public
end;
const
ST_NONE = 0;
ST_DISH = 1;
ST_MENU = 2;
ST_MNG = 3;
ST_ORDER = 4;
var
Form1: TForm1;
Implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
_state:= ST_NONE;
_db:= TMbd_MySql.Create;
_db.PutDoDirDll:= ExtractFileDir(Application.ExeName);
_db.ConnectionFile:= 'connekt';
end;
procedure TForm1.FormActivate(Sender: TObject);
var
res: Boolean;
begin
res:= false;
//
try
if _db.ConnectDb('045595112_admin', 'admin') then
begin
//SQLQuery1.SQLConnection:= _db.MySqlConnection;
//SQLQuery2.SQLConnection:= _db.MySqlConnection;
//qDish.Open;
//qMenu.Open;
q.SQLConnection:= _db.MySqlConnection;
qDish.SQLConnection:= _db.MySqlConnection;
qMenu.SQLConnection:= _db.MySqlConnection;
qOrders.SQLConnection:= _db.MySqlConnection;
qMng.SQLConnection:= _db.MySqlConnection;
res:= true;
end
else
begin
MessageBox(0, ' .' + #13#10 + ' .',
'', MB_ICONEXCLAMATION + MB_OK);
Application.Terminate;
end;
except on e:Exception do
MessageBox(0, ' .' + #13#10 + ' .',
'', MB_ICONERROR + MB_OK);
end;
if (not res) then
Close;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
if (ClientDataSet1.Active) then
ClientDataSet1.ApplyUpdates(0);
end;
procedure TForm1.dbNavBeforeAction(Sender: TObject; Button: TNavigateBtn);
var
sql: string;
begin
case _state of
ST_NONE: Abort;
ST_MENU:
begin
if (Button = nbInsert) then
begin
FormMenuRec.showNew(_db);
DataSource1.DataSet.Refresh;
Abort;
end;
if (Button = nbEdit) then
begin
with DBGrid1.DataSource.DataSet do
FormMenuRec.showEdit(_db, FieldByName('id_menu').AsInteger,
FieldByName('id_dish').AsInteger, FieldByName('price').AsCurrency);
DataSource1.DataSet.Refresh;
Abort;
end;
if (Button = nbDelete) then
begin
with DBGrid1.DataSource.DataSet do
sql:= 'delete from menu where id_menu = ' +
FieldByName('id_menu').AsString;
if (_db.DdlExecute(sql) = 1) then
MessageBox(0, ' .', '', MB_ICONINFORMATION + MB_OK)
else
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
DataSource1.DataSet.Refresh;
Abort;
end;
end;
ST_ORDER:
begin
if (Button = nbInsert) then
begin
FormOrders.showNew(_db);
DataSource1.DataSet.Refresh;
Abort;
end;
if (Button = nbEdit) then
begin
with DBGrid1.DataSource.DataSet do
FormOrders.showEdit(_db, FieldByName('id_orders').AsInteger, FieldByName('id_dish').AsInteger,
FieldByName('id_manager').AsInteger, FieldByName('cnt').AsInteger);
DataSource1.DataSet.Refresh;
Abort;
end;
if (Button = nbDelete) then
begin
with DBGrid1.DataSource.DataSet do
sql:= 'delete from orders where id_orders = ' + FieldByName('id_orders').AsString;
|
|
if (_db.DdlExecute(sql) = 1) then
MessageBox(0, ' .', '', MB_ICONINFORMATION + MB_OK)
else
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
DataSource1.DataSet.Refresh;
Abort;
end;
end;
end;
end;
{ }
procedure TForm1.N4Click(Sender: TObject);
begin
Caption:= '';
_state:= ST_DISH;
ClientDataSet1.Close;
DataSetProvider1.DataSet:= qDish;
ClientDataSet1.Active:= true;
DBGrid1.Columns[0].Visible:= false;
DBGrid1.Columns[1].Title.Caption:= ' ';
DBGrid1.Columns[1].Width:= 200;
DBGrid1.Columns[2].Title.Caption:= ' ()';
DBGrid1.Columns[2].Width:= 60;
DBGrid1.Columns[3].Title.Caption:= '';
DBGrid1.Columns[3].Width:= 400;
DBGrid1.Options:= DBGrid1.Options + [dgEditing];
end;
{ }
procedure TForm1.N5Click(Sender: TObject);
var
f: TField;
begin
Caption:= '';
_state:= ST_MENU;
ClientDataSet1.Close;
DataSetProvider1.DataSet:= qMenu;
ClientDataSet1.Open;
DBGrid1.Columns[0].Visible:= false;
DBGrid1.Columns[1].Visible:= false;
DBGrid1.Columns[2].Title.Caption:= ' ';
DBGrid1.Columns[2].Width:= 200;
DBGrid1.Columns[3].Title.Caption:= ' ()';
DBGrid1.Columns[3].Width:= 60;
DBGrid1.Columns[3].Field.SetFieldType(ftCurrency);
DBGrid1.Options:= DBGrid1.Options - [dgEditing];
end;//
procedure TForm1.N6Click(Sender: TObject);
begin
Caption:= '';
_state:= ST_ORDER;
ClientDataSet1.Close;
DataSetProvider1.DataSet:= qOrders;
ClientDataSet1.Open;
DBGrid1.Columns[0].Visible:= false;
DBGrid1.Columns[1].Visible:= false;
DBGrid1.Columns[2].Visible:= false;
DBGrid1.Columns[3].Title.Caption:= ' ';
DBGrid1.Columns[3].Width:= 200;
DBGrid1.Columns[4].Title.Caption:= '-';
DBGrid1.Columns[4].Width:= 50;
DBGrid1.Columns[5].Title.Caption:= ' ';
DBGrid1.Columns[5].Width:= 120;
DBGrid1.Columns[5].Field.SetFieldType(ftDateTime);
DBGrid1.Columns[6].Title.Caption:= '';
DBGrid1.Columns[6].Width:= 100;
DBGrid1.Options:= DBGrid1.Options - [dgEditing];
end;//
procedure TForm1.N7Click(Sender: TObject);
begin
Caption:= '';
_state:= ST_MNG;
ClientDataSet1.Close;
DataSetProvider1.DataSet:= qMng;
ClientDataSet1.Open;
DBGrid1.Refresh;
DBGrid1.Columns[0].Visible:= false;
DBGrid1.Columns[1].Title.Caption:= '';
DBGrid1.Columns[1].Width:= 200;
DBGrid1.Columns[2].Title.Caption:= '';
DBGrid1.Columns[2].Width:= 200;
DBGrid1.Columns[3].Title.Caption:= '';
DBGrid1.Columns[3].Width:= 200;
DBGrid1.Columns[4].Title.Caption:= '';
DBGrid1.Columns[4].Width:= 200;
DBGrid1.Options:= DBGrid1.Options + [dgEditing];
end;
procedure TForm1.N9Click(Sender: TObject);
begin
_state:= ST_NONE;
Caption:= '';
try
ClientDataSet1.Close;
q.Close;
q.SQL.Text:=
'select orders.id_orders as " ", dish.title as "", ' +
'orders.cnt as "", menu.price as "", ' +
'(orders.cnt * menu.price) as "" ' +
'from orders ' +
'left join dish on (orders.id_dish = dish.id_dish) ' +
'left join menu on (dish.id_dish = menu.id_dish)' +
'order by orders.id_orders';
q.Open;
q.FieldByName('').AsCurrency;
q.FieldByName('').AsCurrency;
DataSetProvider1.DataSet:= q;
ClientDataSet1.Open;
DBGrid1.Columns[1].Width:= 200;
except on e:Exception do
MessageBox(0, ' ""!', '', MB_OK + MB_ICONWARNING);
end;
DBGrid1.Options:= DBGrid1.Options - [dgEditing];
end;
end.
uMenuRec:
unit uMenuRec;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls, ExtCtrls,
Mbd_MySql;
Type
TDishRec = class
id_dish: integer;
title: string;
end;
TFormMenuRec = class(TForm)
cbDish: TComboBox;
Panel1: TPanel;
edPrice: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
_mode: integer; // 1 - new, 2 - edit
_db: TMbd_MySql;
_id_menu: integer;
public
procedure showNew(aDB: TMbd_MySql);
procedure showEdit(aDB: TMbd_MySql; id_menu: integer; id_dish: integer; price: Currency);
end;
var
FormMenuRec: TFormMenuRec;
Implementation
{$R *.dfm}
const
sql_req: string = 'select * from dish';//
procedure TFormMenuRec.Button1Click(Sender: TObject);
begin
Close;
|
|
end;
// ok
procedure TFormMenuRec.Button2Click(Sender: TObject);
var
req: string;
rec: TDishRec;
begin
//
if (cbDish.ItemIndex < 0) then
begin
MessageBox(0, ' .',
'', MB_ICONWARNING + MB_OK);
cbDish.SetFocus;
Exit;
end;
if (Length(edPrice.Text) <= 0) then
begin
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
edPrice.SetFocus;
Exit;
end;
case _mode of
1: // new
begin
rec:= cbDish.Items.Objects[cbDish.ItemIndex] as TDishRec;
req:= 'insert into menu (id_dish, price) values(' + IntToStr(rec.id_dish) + ', ' + edPrice.Text + ')';
if (_db.DdlExecute(req) = 1) then
begin
MessageBox(0, ' .', '', MB_ICONINFORMATION + MB_OK);
Close;
end
else
begin
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
end;
end;
2: // edit
begin
rec:= cbDish.Items.Objects[cbDish.ItemIndex] as TDishRec;
req:= 'update menu set id_dish = ' + IntToStr(rec.id_dish) + ', price = ' + edPrice.Text + ' where id_menu = ' + IntToStr(_id_menu);
if (_db.DdlExecute(req) = 1) then
begin
MessageBox(0, ' .', '', MB_ICONINFORMATION + MB_OK);
Close;
end
else
begin
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
end;
end;
end;
end;
procedure TFormMenuRec.showNew(aDB: TMbd_MySql);
var
rec: TDishRec;
begin
Caption:= ' ';
_mode:= 1;
_db:= aDB;
cbDish.Items.Clear;
cbDish.ItemIndex:= -1;
edPrice.Text:= '';
// SELECT
aDB.M_Open(sql_req); //
while aDB.M_NoEnd do //
begin
rec:= TDishRec.Create;
rec.id_dish:= aDB.M_Value('id_dish');
rec.title:= aDB.M_Value('title');
cbDish.Items.AddObject(rec.title, rec);
aDB.M_Next; //
end;
aDB.M_Close; //
ShowModal;
end;
procedure TFormMenuRec.showEdit(aDB: TMbd_MySql; id_menu: integer; id_dish: integer; price: Currency);
var
rec: TDishRec;
begin
Caption:= ' ';
_mode:= 2;
_db:= aDB;
_id_menu:= id_menu;
cbDish.Items.Clear;
// SELECT
aDB.M_Open(sql_req); //
while aDB.M_NoEnd do //
begin
rec:= TDishRec.Create;
rec.id_dish:= aDB.M_Value('id_dish');
rec.title:= aDB.M_Value('title');
cbDish.Items.AddObject(rec.title, rec);
if (rec.id_dish = id_dish) then
cbDish.ItemIndex:= cbDish.Items.Count - 1;
aDB.M_Next; //
end;
aDB.M_Close; //
edPrice.Text:= CurrToStr(price);
ShowModal;
end;
end.
uOrderRec:
unit uOrderRec;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls, ExtCtrls,
Mbd_MySql;
type
TDishRec = class
id_dish: integer;
title: string;
end;
TMngRec = class
id_mng: integer;
fam: string;
end;
TFormOrders = class(TForm)
Label1: TLabel;
cbDish: TComboBox;
Label2: TLabel;
edCnt: TEdit;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
cbMng: TComboBox;
Label3: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
_mode: integer; // 1 - new, 2 - edit
_db: TMbd_MySql;
_id_orders: integer;
procedure fillMngs();
procedure fillDishes();
public
procedure showNew(aDB: TMbd_MySql);
procedure showEdit(aDB: TMbd_MySql; id_orders, id_dish, id_mng: integer; cnt: integer);
end;
var
FormOrders: TFormOrders;
Implementation
{$R *.dfm}
procedure TFormOrders.fillMngs();
var
rec: TMngRec;
begin
cbMng.Items.Clear;
cbMng.ItemIndex:= -1;
//
_db.M_Open('select * from manager order by f'); //
while _db.M_NoEnd do //
begin
rec:= TMngRec.Create;
rec.id_mng:= _db.M_Value('id_manager');
rec.fam:= _db.M_Value('f');
cbMng.Items.AddObject(rec.fam, rec);
_db.M_Next; //
end;
_db.M_Close; //
end;
procedure TFormOrders.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TFormOrders.Button2Click(Sender: TObject);
var
req: string;
drec: TDishRec;
mrec: TMngRec;
begin
//
if (cbDish.ItemIndex < 0) then
begin
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
cbDish.SetFocus;
Exit;
end;
if (cbMng.ItemIndex < 0) then
begin
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
cbMng.SetFocus;
Exit;
end;
if (Length(edCnt.Text) <= 0) then
begin
MessageBox(0, '- .', '', MB_ICONWARNING + MB_OK);
edCnt.SetFocus;
Exit;
end;
drec:= cbDish.Items.Objects[cbDish.ItemIndex] as TDishRec;
mrec:= cbMng.Items.Objects[cbMng.ItemIndex] as TMngRec;
case _mode of
1: // new
begin
req:= 'insert into orders (id_dish, id_manager, cnt) values(' + IntToStr(drec.id_dish) + ', ' + IntToStr(mrec.id_mng) + ', ' + edCnt.Text + ')';
if (_db.DdlExecute(req) = 1) then
begin
MessageBox(0, ' .', '', MB_ICONINFORMATION + MB_OK);
Close;
end
else
begin
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
end;
end;
2: // edit
begin
req:= 'update orders set id_dish = ' + IntToStr(drec.id_dish) + ', id_manager = ' + IntToStr(mrec.id_mng) + ', cnt = ' + edCnt.Text + ' where id_orders = ' + IntToStr(_id_orders);
if (_db.DdlExecute(req) = 1) then
begin
MessageBox(0, ' .', '', MB_ICONINFORMATION + MB_OK);
Close;
end
else
MessageBox(0, ' .', '', MB_ICONWARNING + MB_OK);
end;
end;
end;
procedure TFormOrders.fillDishes();
var
rec: TDishRec;
begin
cbDish.Items.Clear;
cbDish.ItemIndex:= -1;
//
_db.M_Open('select * from menu left join dish on menu.id_dish = dish.id_dish order by title'); //
while _db.M_NoEnd do //
begin
rec:= TDishRec.Create;
rec.id_dish:= _db.M_Value('id_dish');
rec.title:= _db.M_Value('title');
cbDish.Items.AddObject(rec.title, rec);
_db.M_Next; //
end;
_db.M_Close; //
end;
procedure TFormOrders.showNew(aDB: TMbd_MySql);
begin
Caption:= ' ';
_mode:= 1;
_db:= aDB;
edCnt.Text:= '1';
fillMngs;
fillDishes;
ShowModal;
end;
procedure TFormOrders.showEdit(aDB: TMbd_MySql; id_orders, id_dish, id_mng: integer; cnt: integer);
var
rec: TDishRec;
i: Integer;
begin
Caption:= ' ';
_mode:= 2;
_db:= aDB;
_id_orders:= id_orders;
fillMngs;
fillDishes;
for i:= 0 to cbDish.Items.Count - 1 do
if (TDishRec(cbDish.Items.Objects[i]).id_dish = id_dish) then
cbDish.ItemIndex:= i;
for i:= 0 to cbMng.Items.Count - 1 do
if (TMngRec(cbMng.Items.Objects[i]).id_mng = id_mng) then
cbMng.ItemIndex:= i;
edCnt.Text:= intToStr(cnt);
ShowModal;
end;
end.