Создать базу данных типа Interbase и приложение для работы с базой данных в архитектуре клиент-сервер
DataModule1 (dannie.pas)
Настройки компонентов Database1 и Database2 (модуль данных dannie.pas)
Настройки алиаса ib_skl1 в администраторе BDE.
Создать базу данных типа Interbase и приложение для работы
с базой данных в архитектуре клиент-сервер.
•Создать базу данных типа Interbase из двух таблиц. Проиндексировать поля
для организации отношения между таблицами "один ко многим".
•Создать клиентскую часть приложения.
Меню приложения:
•Таблица 1
•Таблица 2
•Выход
Пункт Таблица 1 должен позволять работать с таблицей 1.
Предусмотрите:
•навигацию по записям таблицы: Вперед, Назад, Первая, Последняя;
•добавление, удаление, редактирование записей; выполните их
при помощи команд языка запросов SQL.
Пункт Таблица 2 должен позволять работать с таблицей 2.
Выход - выход из приложения.
•Реализовать каскадные воздействия:
при удалении записи в родительской таблице (с отношением один)
должны быть удалены соответствующие записи в дочерней таблице
(с отношением многие);
при изменении ключевого поля в родительской таблице должны быть
изменены соответствующие записи в дочерней таблице.
Примечание: каскадные воздействия работают только в SQLexplorer
(Delphi\bin\dbexplor.exe) :-(
~~~~~~~~~~~~~~~~
Для этого приложения созданы 2 БД, которые должны размещаться:
C:\book\ib_sklad\IB_SKLAD.GDB и C:\book\ib_obuv\ib_obuv.gdb
(так настроено). Алиасы для них, соответственно: ib_skl1 и obuv
Текст модулей.
unit main; // главный модуль
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
btnTovar: TBitBtn;
btnRash: TBitBtn;
btnQuit: TBitBtn;
btnRast: TBitBtn;
procedure btnTovarClick(Sender: TObject);
procedure btnRashClick(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
procedure btnRastClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation uses tovar, rash, dannie, unRast;
{$R *.dfm}
procedure TForm1.btnTovarClick(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.btnRashClick(Sender: TObject);
begin
Form3.Show;
end;
procedure TForm1.btnQuitClick(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.btnRastClick(Sender: TObject);
begin
frmRast.Show;
end;
end.
~~~~~~~~~~~~~~~~~~~~~
Файл dannie.pas
unit dannie;
interface
uses
SysUtils, Classes, DB, DBTables;
type
TDataModule1 = class(TDataModule)
Database1: TDatabase;
Database2: TDatabase;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule1: TDataModule1;
implementation
{$R *.dfm}
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
database1.Connected:= false;
database1.Connected:= true;
database2.Connected:= false;
database2.Connected:= true;
end;
end.
~~~~~~~~~~~~~~~~~
Файл dannie.dfm
object DataModule1: TDataModule1
OldCreateOrder = False
OnCreate = DataModuleCreate
Left = 593
Top = 204
Height = 185
Width = 295
object Database1: TDatabase
AliasName = 'ib_skl1'
DatabaseName = 'in_sklad'
LoginPrompt = False
Params.Strings = (
'SERVER NAME=C:\book\ib_sklad\ib_sklad.gdb'
'USER NAME=SYSDBA'
'OPEN MODE=READ/WRITE'
'SCHEMA CACHE SIZE=8'
'LANGDRIVER=ancyrr'
'SQLQRYMODE='
'SQLPASSTHRU MODE=SHARED AUTOCOMMIT'
'SCHEMA CACHE TIME=-1'
'MAX ROWS=-1'
'BATCH COUNT=200'
'ENABLE SCHEMA CACHE=FALSE'
'SCHEMA CACHE DIR='
'ENABLE BCD=FALSE'
'BLOBS TO CACHE=64'
'BLOB SIZE=32'
'WAIT ON LOCKS=FALSE'
'COMMIT RETAIN=FALSE'
'ROLE NAME='
'PASSWORD=masterkey')
SessionName = 'Default'
Left = 16
Top = 16
end
object Database2: TDatabase
AliasName = 'obuv'
DatabaseName = 'obuv2'
Params.Strings = (
'SERVER NAME=C:\book\ib_obuv\IB_OBUV.GDB'
'USER NAME=SYSDBA'
'OPEN MODE=READ/WRITE'
'SCHEMA CACHE SIZE=8'
'LANGDRIVER=ancyrr'
'SQLQRYMODE='
'SQLPASSTHRU MODE=SHARED AUTOCOMMIT'
'SCHEMA CACHE TIME=-1'
'MAX ROWS=-1'
'BATCH COUNT=200'
'ENABLE SCHEMA CACHE=FALSE'
'SCHEMA CACHE DIR='
'ENABLE BCD=FALSE'
'BLOBS TO CACHE=64'
'BLOB SIZE=32'
'WAIT ON LOCKS=FALSE'
'COMMIT RETAIN=FALSE'
'ROLE NAME='
'PASSWORD=masterkey')
SessionName = 'Default'
Left = 80
Top = 16
end
end
~~~~~~~~~~~~~~~~~
unit nov; // добавление записи в таблицу расходов
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Mask;
type
TForm31 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
edNom: TEdit;
edKol: TEdit;
edTov: TEdit;
edPok: TEdit;
MaskEdit1: TMaskEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form31: TForm31;
implementation uses rash;
{$R *.dfm}
procedure TForm31.BitBtn1Click(Sender: TObject);
begin
{ Присвоение значений параметрам запроса}
Form3.Query_InsR.ParamByName('MN_rash').AsInteger:=StrToInt(edNom.Text);
Form3.Query_InsR.ParamByName('MDat_rash').AsString:= MaskEdit1.Text;
Form3.Query_InsR.ParamByName('MKolvo').AsInteger:=StrToInt(edKol.Text);
Form3.Query_InsR.ParamByName('MTovar').AsString:=edTov.Text;
Form3.Query_InsR.ParamByName('MPokup').AsString:=edPok.Text;
Form3.Query1.Active:=false; { Query1 делается неактивным }
Form3.Query_InsR.ExecSQL; { Выполнение запроса Query_Ins }
Form3.Query1.Active:=true; { Активизация Query1 }
Form31.Hide;
end;
end.
~~~~~~~~~~~~~~~~~~
unit rash; // модуль таблицы расходы
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;
type
TForm3 = class(TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
btnNext: TButton;
btnPrev: TButton;
btnFirst: TButton;
btnLast: TButton;
Query_InsR: TQuery;
btnAdd: TButton;
Query_DelR: TQuery;
btnDel: TButton;
btnEdit: TButton;
Query_RedR: TQuery;
procedure btnFirstClick(Sender: TObject);
procedure btnPrevClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnLastClick(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnDelClick(Sender: TObject);
procedure btnEditClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation uses nov,red;
{$R *.dfm}
procedure TForm3.btnFirstClick(Sender: TObject);
begin
Query1.First;
end;
procedure TForm3.btnPrevClick(Sender: TObject);
begin
Query1.Prior;
end;
procedure TForm3.btnNextClick(Sender: TObject);
begin
Query1.Next;
end;
procedure TForm3.btnLastClick(Sender: TObject);
begin
Query1.Last;
end;
procedure TForm3.btnAddClick(Sender: TObject);
begin
Form31.show;
end;
procedure TForm3.btnDelClick(Sender: TObject);
//var Mn_rash: integer;
begin
{ определяет значения параметра запроса}
// Mn_rash:= Query1.FieldByName('N_rash').Value;
// edit1.Text:= inttostr(Mn_rash);
Query_DelR.ParamByName('Mn_rash').Value:=
Query1.FieldByName('N_rash').Value;
Query1.Active:=false; { Query1 делается неактивным }
Query_DelR.ExecSQL; { Выполнение запроса Query_Del }
Query1.Active:=true; { Активизация запроса Query1 }
end;
procedure TForm3.btnEditClick(Sender: TObject);
begin
Form32.edNom.Text:=IntToStr(Query1.FieldByName('N_Rash').Value);
Form32.MaskEdit1.Text:= Query1.FieldByName('Dat_Rash').Value;
Form32.edkol.Text:=IntToStr(Query1.FieldByName('Kolvo').Value);
Form32.edtov.Text:=Query1.FieldByName('Tovar').Value;
Form32.edpok.Text:=Query1.FieldByName('Pokup').Value;
Form32.show;
end;
procedure TForm3.FormActivate(Sender: TObject);
begin
Query1.Active:= true;
end;
end.
~~~~~~~~~~~~~~~
unit red; // модуль редактирования выделенной записи таблицы расходы
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Mask;
type
TForm32 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
edNom: TEdit;
edKol: TEdit;
edTov: TEdit;
edPok: TEdit;
MaskEdit1: TMaskEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form32: TForm32;
implementation uses rash;
{$R *.dfm}
procedure TForm32.BitBtn1Click(Sender: TObject);
begin
{ Присвоение значений параметрам запроса}
Form3.Query_RedR.ParamByName('MN_rash').AsInteger:=StrToInt(edNom.Text);
Form3.Query_RedR.ParamByName('MDat_rash').AsString:= MaskEdit1.Text;
Form3.Query_RedR.ParamByName('MKolvo').AsInteger:=StrToInt(edKol.Text);
Form3.Query_RedR.ParamByName('MTovar').AsString:=edTov.Text;
Form3.Query_RedR.ParamByName('MPokup').AsString:=edPok.Text;
Form3.Query_RedR.ParamByName('MN_rash1').AsInteger:=
Form3.Query1.FieldByName('N_Rash').Value;
Form3.Query1.Active:=false; { Query1 делается неактивным }
Form3.Query_RedR.ExecSQL; { Выполнение запроса Query_Ins }
Form3.Query1.Active:=true; { Активизация Query1 }
Form32.Hide;
end;
end.
~~~~~~~~~~~~~~
unit tovar; // модуль таблицы товары
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;
type
TForm2 = class(TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
btnFirst: TButton;
btnPrev: TButton;
btnNext: TButton;
btnLast: TButton;
btnAdd: TButton;
btnDel: TButton;
btnRed: TButton;
Query_Ins: TQuery;
Query_Del: TQuery;
QueryRed: TQuery;
procedure btnNextClick(Sender: TObject);
procedure btnPrevClick(Sender: TObject);
procedure btnFirstClick(Sender: TObject);
procedure btnLastClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnDelClick(Sender: TObject);
procedure btnRedClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation uses unTovDob, unTovRed;
{$R *.dfm}
procedure TForm2.btnNextClick(Sender: TObject);
begin
Query1.Next;
end;
procedure TForm2.btnPrevClick(Sender: TObject);
begin
Query1.Prior;
end;
procedure TForm2.btnFirstClick(Sender: TObject);
begin
Query1.First;
end;
procedure TForm2.btnLastClick(Sender: TObject);
begin
Query1.Last;
end;
procedure TForm2.FormActivate(Sender: TObject);
begin
Query1.Active:= true;
end;
procedure TForm2.btnAddClick(Sender: TObject);
begin
frmTovDob.Show;
end;
procedure TForm2.btnDelClick(Sender: TObject);
begin
{ определяет значения параметра запроса}
Query_Del.ParamByName('Mtovar').Value:=Query1.FieldByName('tovar').Value;
Query1.Active:=false; { Query1 делается неактивным }
Query_Del.ExecSQL; { Выполнение запроса Query_Del }
Query1.Active:=true; { Активизация запроса Query1 }
end;
procedure TForm2.btnRedClick(Sender: TObject);
begin
frmTovRed.edTov.Text:= Query1.FieldByName('tovar').Value;
frmTovRed.edEd.Text:=Query1.FieldByName('ed_izm').Value;
frmTovRed.edZena.Text:= IntToStr(Query1.FieldByName('zena').Value);
frmTovRed.show;
end;
end.
~~~~~~~~~~~~~~
unit unRast; // модуль таблицы растения (БД обувь :-) )
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls;
type
TfrmRast = class(TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
btnNext: TButton;
btnPrev: TButton;
btnFirst: TButton;
btnLast: TButton;
btnAdd: TButton;
Query_dob_rast: TQuery;
Query_rast_del: TQuery;
btnDel2: TButton;
btnRed: TButton;
Query_rast_red: TQuery;
procedure btnNextClick(Sender: TObject);
procedure btnPrevClick(Sender: TObject);
procedure btnFirstClick(Sender: TObject);
procedure btnLastClick(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnDel2Click(Sender: TObject);
procedure btnRedClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmRast: TfrmRast;
implementation uses unRastDob, unRastRed;
{$R *.dfm}
procedure TfrmRast.btnNextClick(Sender: TObject);
begin
Query1.Next;
end;
procedure TfrmRast.btnPrevClick(Sender: TObject);
begin
Query1.Prior;
end;
procedure TfrmRast.btnFirstClick(Sender: TObject);
begin
Query1.First;
end;
procedure TfrmRast.btnLastClick(Sender: TObject);
begin
Query1.Last;
end;
procedure TfrmRast.btnAddClick(Sender: TObject);
begin
frmRastDob.Show;
end;
procedure TfrmRast.btnDel2Click(Sender: TObject);
begin
{ определяет значения параметра запроса}
Query_rast_del.ParamByName('MNAZVANIE').Value:=
Query1.FieldByName('NAZVANIE').Value;
Query1.Active:=false; { Query1 делается неактивным }
Query_rast_del.ExecSQL; { Выполнение запроса Query_Del }
Query1.Active:=true; { Активизация запроса Query1 }
end;
procedure TfrmRast.btnRedClick(Sender: TObject);
begin
with frmrastred do
begin
ednazv.Text:= Query1.FieldByName('NAZVANIE').Value;
MaskEdit1.Text:= Query1.FieldByName('DAT_POSADKI').Value;
edzena.Text:=IntToStr(Query1.FieldByName('zena').Value);
edrazmer.Text:=IntToStr(Query1.FieldByName('razmer').Value);
Show;
end;
end;
procedure TfrmRast.FormActivate(Sender: TObject);
begin
Query1.Active:= true;
end;
end.
~~~~~~~~~~~~~~~
unit unRastDob; // добавление записи в таблицу растений
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Mask;
type
TfrmRastDob = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edNazv: TEdit;
edZena: TEdit;
BitBtn1: TBitBtn;
MaskEdit1: TMaskEdit;
Label4: TLabel;
edRazmer: TEdit;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmRastDob: TfrmRastDob;
implementation uses unRast;
{$R *.dfm}
procedure TfrmRastDob.BitBtn1Click(Sender: TObject);
begin
{ Присвоение значений параметрам запроса}
frmRast.Query_dob_rast.ParamByName('MNAZVANIE').AsString:=edNazv.Text;
frmRast.Query_dob_rast.ParamByName('MDAT_POSADKI').AsString:= MaskEdit1.Text;
frmRast.Query_dob_rast.ParamByName('MZENA').AsInteger:=StrToInt(edZena.Text);
frmRast.Query_dob_rast.ParamByName('MRAZMER').AsInteger:=StrToInt(edRazmer.Text);
frmRast.Query1.Active:=false; { Query1 делается неактивным }
frmRast.Query_dob_rast.ExecSQL; { Выполнение запроса Query_Ins }
frmRast.Query1.Active:=true; { Активизация Query1 }
frmRastDob.Hide;
end;
end.
~~~~~~~~~~~
unit unRastRed; // редактирование выделенной записи таблицы растений
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Mask;
type
TfrmRastRed = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edNazv: TEdit;
edZena: TEdit;
BitBtn1: TBitBtn;
MaskEdit1: TMaskEdit;
Label4: TLabel;
edRazmer: TEdit;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmRastRed: TfrmRastRed;
implementation uses unRast;
{$R *.dfm}
procedure TfrmRastRed.BitBtn1Click(Sender: TObject);
begin
{ Присвоение значений параметрам запроса}
frmRast.Query_rast_red.ParamByName('MNAZVANIE').AsString:=edNazv.Text;
frmRast.Query_rast_red.ParamByName('MDAT_POSADKI').AsString:= MaskEdit1.Text;
frmRast.Query_rast_red.ParamByName('MZENA').AsInteger:=StrToInt(edZena.Text);
frmRast.Query_rast_red.ParamByName('MRAZMER').AsInteger:=StrToInt(edRazmer.Text);
frmRast.Query1.Active:=false; { Query1 делается неактивным }
frmRast.Query_rast_red.ExecSQL; { Выполнение запроса Query_Ins }
frmRast.Query1.Active:=true; { Активизация Query1 }
frmRastRed.Hide;
end;
end.
~~~~~~~~~~~~~~
unit unTovDob; // добавление записи в таблицу товаров
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TfrmTovDob = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edTov: TEdit;
edEd: TEdit;
edZena: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmTovDob: TfrmTovDob;
implementation uses tovar;
{$R *.dfm}
procedure TfrmTovDob.BitBtn1Click(Sender: TObject);
begin
{ Присвоение значений параметрам запроса}
Form2.Query_Ins.ParamByName('Mtovar').AsString:=edTov.Text;
Form2.Query_Ins.ParamByName('Med_izm').AsString:= eded.Text;
Form2.Query_Ins.ParamByName('Mzena').AsInteger:=StrToInt(edZena.Text);
Form2.Query1.Active:=false; { Query1 делается неактивным }
Form2.Query_Ins.ExecSQL; { Выполнение запроса Query_Ins }
Form2.Query1.Active:=true; { Активизация Query1 }
frmTovDob.Hide;
end;
end.
~~~~~~~~~~~~~
unit unTovRed; // редактирование выделенной записи таблицы товаров
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TfrmTovRed = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edTov: TEdit;
edEd: TEdit;
edZena: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmTovRed: TfrmTovRed;
implementation uses tovar;
{$R *.dfm}
procedure TfrmTovRed.BitBtn1Click(Sender: TObject);
begin
{ Присвоение значений параметрам запроса}
Form2.QueryRed.ParamByName('Mtovar').AsString:=edTov.Text;
Form2.QueryRed.ParamByName('Med_izm').AsString:= eded.Text;
Form2.QueryRed.ParamByName('Mzena').AsInteger:=StrToInt(edZena.Text);
Form2.Query1.Active:=false; { Query1 делается неактивным }
Form2.QueryRed.ExecSQL; { Выполнение запроса Query_Ins }
Form2.Query1.Active:=true; { Активизация Query1 }
frmTovRed.Hide;
end;
end.
========= Метаданные таблиц ==========
Табл. TOVARY, Metadata
/* Table: TOVARY, Owner: SYSDBA */
CREATE TABLE "TOVARY"
(
"TOVAR" VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
"ED_IZM" VARCHAR(10) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
"ZENA" INTEGER NOT NULL,
PRIMARY KEY ("TOVAR")
);
SET TERM ^ ;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER "BU_TOVARY" FOR "TOVARY"
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
IF ( OLD.TOVAR <> NEW.TOVAR) THEN
UPDATE RASHOD
SET TOVAR = NEW.TOVAR
WHERE (TOVAR = OLD.TOVAR);
END
^
CREATE TRIGGER "AD_TOVARY" FOR "TOVARY"
ACTIVE AFTER DELETE POSITION 0
AS
BEGIN
DELETE FROM RASHOD
WHERE (RASHOD.TOVAR = TOVARY.TOVAR);
END
^
COMMIT WORK ^
SET TERM ;^
Табл. RASHOD, Metadata
/* Table: RASHOD, Owner: SYSDBA */
CREATE TABLE "RASHOD"
(
"N_RASH" INTEGER NOT NULL,
"DAT_RASH" CHAR(8) CHARACTER SET WIN1251 NOT NULL,
"KOLVO" INTEGER NOT NULL,
"TOVAR" VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
"POKUP" VARCHAR(10) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("N_RASH")
);
Табл. RAST, Metadata
/* Table: RAST, Owner: SYSDBA */
CREATE TABLE "RAST"
(
"NAZVANIE" VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,
"DAT_POSADKI" CHAR(8) CHARACTER SET WIN1251 NOT NULL,
"ZENA" INTEGER NOT NULL,
"RAZMER" INTEGER NOT NULL,
PRIMARY KEY ("NAZVANIE")
);
Примечание: в процессе создания приложения не забывайте, что компоненты Query1 на формах
должны быть: Active=true и компоненты Database1,2 : Connected = true. Иногда полезно (когда не находится например БД obuv2) переключить Database.Connected false , затем - true. После этого посмотреть на значение Query1.Active и если false, то включить true (всё это при помощи инспектора объектов). Также - не забудьте настроить Database1,2 при помощи редактора (дв щелчок по Database)
Файлы проекта, баз данных (в папке book) и описание сборки - в упакованном виде