应用服务器:BDE,TQuery。
客户端:使用TSocketConnet连接,调用服务器端函数,该函数使用TQuery控件按传第的参数刷新数据。客户端的ClientDataset关闭,打开。如果始终与应用服务器连接,客户端数据会刷新,但为了减轻负担,我每次刷新数据后,我都关闭连接,但这样问题出来了,客户端的数据不能够刷新,即数据库的数据发生改变,客户端刷新时,却没有改变,非要下次登录后才能刷新数据。
请问怎么解决。
客户端:使用TSocketConnet连接,调用服务器端函数,该函数使用TQuery控件按传第的参数刷新数据。客户端的ClientDataset关闭,打开。如果始终与应用服务器连接,客户端数据会刷新,但为了减轻负担,我每次刷新数据后,我都关闭连接,但这样问题出来了,客户端的数据不能够刷新,即数据库的数据发生改变,客户端刷新时,却没有改变,非要下次登录后才能刷新数据。
请问怎么解决。
另外问一下:如果始终保持连接,这种方式能支持多少用户?
我是这样做的,先通过gScktConnect.AppServer调用应用服务器上的OpenDataset(参数),更新应用服务器上的对应数据提供者(TQuery),然后打开客户端。保持连接就可以,断开,重新连接就不行了。
不需要重新登录,只需要刷新数据。
TDatabase控件一个 连接数据库
TQuery控件一个 查询数据
TDataSetProvider 一个
自己添加接口一个:
procedure TTOAMServer.OpenDataSet(ALogName, AOrderSQL: OleVariant);
begin
with Query1 do
begin
Close;
SQL.Clear;
SQL.Append('select * from (');
SQL.Append('SELECT A.*,B.FILE_SORT as FILE_SORT_NAME,TRUNC(SYSDATE-A.FILE_DATE) AS DATE_LEN');
SQL.Append('FROM files A,FILES_LB B');
SQL.Append('WHERE A.FILE_SORT=B.CODE');
SQL.Append('AND A.file_limit like ''%'+ALogName+'%''');
SQL.Append('AND A.Check_human not like ''%'+ALogName+'%''');
SQL.Append(') ');
SQL.Append(AOrderSQL);
Open;
end;
end;
客户端:
TSocketConnect 控件一个gScktConnect
TClientDataset一个。
函数refreshview 刷新数据:
begin
gScktConnect.Connected = true;
ClientDataSet1
gScktConnect.AppServer.OpenDataset1(gPersonCode,CreateSortOrderSQL(DBGrid1));
ClientDataSet1.Open;
gScktConnect.Connected = false;
end;
gScktConnect.Connected = true;
ClientDataSet1 这一句??
gScktConnect.AppServer.OpenDataset1(gPersonCode,CreateSortOrderSQL(DBGrid1));
ClientDataSet1.Open;
gScktConnect.Connected = false;
end;你不用你自定义的接口,直接从客户端发出sql语句,应该没有问题,
ClientDataSet1 这一句?? clientDataset.Close;直接发SQL,我也做了,也不行。
gScktConnect.Connected = true;
gScktConnect.AppServer.OpenDataset1(gPersonCode,CreateSortOrderSQL(DBGrid1));
ClientDataSet1.close;
ClientDataSet1.Open;
//对返回的数据集处理
gScktConnect.Connected = false;
这个问题与DBGrid显示有关?