用Delphi6做了一个Midas的三层数据库程序,大致情况如下:
1、数据库:MS SQL Server2000;
2、应用服务器主要控件: TADOConnection, TADOQuery, TDataSetProvider;
3、客户端主要控件: TSocketConnection, TClientDataSet, TDataSource;
现在的情况是有三个主从结构的数据表:
服务器端为:ADOQuery_Main, ADOQuery_Detail1, ADOQUery_Detail2三个控件其中服务器上三控件的数据关系为:
ADOQuery_Main: select * from Tab_Main
ADOQuery_Detail1: select * from Tab_Detail1 where M_id=:ID
ADOQuery_Detail2: select * from Tab_Detail2 where M_id=:ID客户端采用TClientDataSet经TSocketConnection控件连接到服务器上的TDataSetProvider控件,且两明细表由主表中的字段:CDS_MainADOQuery_Detail连接,其中也有部份Lookup字段。
起初运行一切正常,但主表中数据为5条,且每条主表数据对应的明细表中的数据达到50条以上后,无论是新增、修改、保存都慢得无法忍受。
大家都是怎么做的?请大家指教。
1、数据库:MS SQL Server2000;
2、应用服务器主要控件: TADOConnection, TADOQuery, TDataSetProvider;
3、客户端主要控件: TSocketConnection, TClientDataSet, TDataSource;
现在的情况是有三个主从结构的数据表:
服务器端为:ADOQuery_Main, ADOQuery_Detail1, ADOQUery_Detail2三个控件其中服务器上三控件的数据关系为:
ADOQuery_Main: select * from Tab_Main
ADOQuery_Detail1: select * from Tab_Detail1 where M_id=:ID
ADOQuery_Detail2: select * from Tab_Detail2 where M_id=:ID客户端采用TClientDataSet经TSocketConnection控件连接到服务器上的TDataSetProvider控件,且两明细表由主表中的字段:CDS_MainADOQuery_Detail连接,其中也有部份Lookup字段。
起初运行一切正常,但主表中数据为5条,且每条主表数据对应的明细表中的数据达到50条以上后,无论是新增、修改、保存都慢得无法忍受。
大家都是怎么做的?请大家指教。
在远程服务器写一个函数procedure TRemoteDm.TranTest(aDataArray: OleVariant; var iResult: OleVariant);
var
ts:TTransactionDesc;
J,I:Integer;
begin
iResult:=0; I:=0;
ts.TransactionID:=3;
ts.IsolationLevel:=xilreadcommitted;
LocalDm.SQLConnection1.StartTransaction(ts);
for J := VarArrayLowBound(aDataArray, 1) to VarArrayHighBound(aDataArray, 1) do
begin
DataSetProvider1.ApplyUpdates(aDataArray[J],0,I);
if I > 0 then
begin
LocalDM.SQLConnection1.Rollback(ts);
Exit;
end;
end;
LocalDM.SQLConnection1.Commit(ts);
iResult:=1;
end;
没测试过,随便想像出来的
因为保存或移动一条主记录的候特别慢,保存的时候貌似要滚动记录,耗时很多。
要求一个主表和主表下关联两个子表:TabMain, TabDetail1, TabDetail2;用Delphi6或Delphi7开发;
先谢谢了!
服务器端用ADOQuery,DataSource做成主从表方式(ADOQuery_Detail.DataSource=DataSource_Main)还是别的方法?
只需要一个最简单的DEMO,就三个表:一主表两从表,新增、删除、修改操作
(数据库开发,不要过于关注界面,更应该关注性能,对于SQL需要字斟句酌。我相信你添加ID索引后,你的性能立马就可以提升。)
麻烦能否给我一个简单的例子程序? [email protected]
相信你会有很大收获。