数据库(多表关连)

本文详细介绍了在Delphi环境中,如何进行多表关联操作,包括设置Database、Table、DataSource和DBGrid等组件,以及实现数据筛选。文章中还提及了尝试添加‘插入’等功能但因存在缺陷而未实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库(多表关连)

 

步骤一:开始---程序---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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值