2012年(106)
分类: 嵌入式
2012-05-07 18:15:04
数据库(多表关连)
步骤一:开始---程序---Borland Delphi 6---BDE---Object---New---OK(默认STANDARD)---PATH---设置为含有数据库文件的目录下。
步骤二:向Form1中添加1个Database组件(BDE组中),AliasName---STANDARD1(上一步创建的), DatabaseName---Acc。
添加3个Table组件(BDE组中),DatabaseName---ACC,TableName---分别设置为Pza.DBF, Pzb.DBF,Km.DBF。
添加2个DataSource 组件(DataAccess组中),DataSet---分别设置为Table1和Table2。
添加DBGrid组件(Data Controls 组中) DataSource---DataSource2。添加DBNavigator(DataControls 组中),DataSource---DataSource1 , VisibleButton----后6个设置为false。
添加3个DBEdit,分别用来输出“编号”,“日期”,“备忘录”,Datasource----Datasource1, Datafield----分别为NO,DATE, MEMO。
添加5个Edit(依次为Edit1至Edit5),两个用于查询编号,两个用于查询日期,一个用于查询备忘录。添加3个Lable组件,用于标示这5个Edit的功能。最后添加1个Button, Caption----筛选。
步骤三:1.Form1--- OnActivate:
Table1.Open;
Table2.Open;
Table3.Open;
2.Table2---masterfields----设置为 ID->ID
3. 右键单击Table3,选中Fields Editor---Add allfields
右键单击Table2,选中FieldsEditor---Add all fields
然后选中New field---Name(NAME), Component(Table2NAME), Type(Strings), Size(30), Fieldtype(Lookup), Key Fields(CODE), Dataset(Table3), Lookup Keys(CODE), ResultField(NAME)。
右键单击DBGrid----Columns Editor----Addall fields
4.Button1(筛选):
var s:string;
begin
s:='';
ifedit1.Text<>'' then s:=s+'NO>='+edit1.text+' and ';
ifedit2.Text<>'' then s:=s+'NO<='+edit2.Text+' and ';
if(edit1.Text<>'') or (edit2.Text<>'') then s:=copy(s,1,length(s)-5);
if(edit3.Text<>'') or (edit4.Text<>'') then
ifs<>'' then s:=s+' and ';
ifedit3.Text<>'' then s:=s+'DATE>='+edit3.Text+' and ';
ifedit4.Text<>'' then s:=s+'DATE<='+edit4.Text+' and ';
if(edit3.Text<>'') or (edit4.Text<>'') then s:=copy(s,1,length(s)-5);
if(edit5.Text<>'')then
begin
ifs<>'' then s:=s+' and ';
s:=s+'MEMO='''+edit5.Text+'*''';
end;
table1.Filtered:=false;
table1.Filter:=s;
table1.Filtered:=true;
showmessage(s);
end;
问题:这次作业还要求“插入”“确定”“取消”按钮,但是功能存在很多缺陷,所以没有加上,因而Database组件在这里没什么太大的作用
private
function GetID():string;
{Private declarations }
public
{Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Tform1.GetID():string;
begin
result:=' 103';
end;
procedure TForm1.FormActivate(Sender:TObject);
begin
table1.Open;
table2.Open;
table3.Open;
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
database1.StartTransaction;
table1.Append;
table1id.value:=getid();
table1.Post;
table2.Append;
table2id.Value:=getid();
table2.Post;
dbedit1.SetFocus;
end;
procedure TForm1.DBEdit1Enter(Sender:TObject);
begin
if table1.State=dsbrowse then table1.Edit;
end;
procedure TForm1.DBEdit1Exit(Sender:TObject);
begin
if table1.State=dsbrowse then table1.Post;
end;
procedure TForm1.DBGrid1Enter(Sender:TObject);
begin
if table2.State=dsbrowse then table2.Edit;
end;
procedure TForm1.DBGrid1Exit(Sender:TObject);
begin
if table2.State=dsbrowse then table2.Post;
end;
procedure TForm1.Button2Click(Sender:TObject);
begin
database1.Commit;
end;
procedure TForm1.Button3Click(Sender:TObject);
begin
database1.Rollback;
end;
procedure TForm1.Button4Click(Sender:TObject);
var s:string;
begin
s:='';
if edit1.Text<>'' thens:=s+'NO>='+edit1.text+' and ';
if edit2.Text<>'' thens:=s+'NO<='+edit2.Text+' and ';
if (edit1.Text<>'') or(edit2.Text<>'') then s:=copy(s,1,length(s)-5);
if (edit3.Text<>'') or(edit4.Text<>'') then
if s<>'' then s:=s+' and ';
if edit3.Text<>'' thens:=s+'DATE>='+edit3.Text+' and ';
if edit4.Text<>'' thens:=s+'DATE<='+edit4.Text+' and ';
if (edit3.Text<>'') or(edit4.Text<>'') then s:=copy(s,1,length(s)-5);
if(edit5.Text<>'') then
begin
if s<>'' then s:=s+' and ';
s:=s+'MEMO='''+edit5.Text+'*''';
end;
table1.Filtered:=false;
table1.Filter:=s;
table1.Filtered:=true;
showmessage(s);
end;