后台用SQLSERVER6.5,前端欲将表内容置于自定义结构的缓存里,怎样实现方便?(100分)

  • 主题发起人 主题发起人 d5
  • 开始时间 开始时间
直接用sql server client 的db库api. 效率最高.
 
用TClientDataSet可以方便的实现.

用Rxlib 控件库中的TMemoryTable, 也可方便实现.
 
SeaSky:
您手头有没有Rxlib2.6比较详尽的帮助资料?
 
Rxlib2.6不是将帮助文件做成了win32 Help格式的文件了吗?
我最详尽的资料就是这个了.

如果没有, 下午我到工作室后发. 一份给你.
 
这个问题我比较有发言权,我的程序几乎都是这么干的。不过不是简单的结构,
我很少用结构,我用类。类的最大好处是可以将数据库中的关系原封不动地保存
下来。举个例子:一个表记录部门,另一个表记录雇员,你定义两个类:
TPart = class;

TEmployee = class(TObject)
private
FPart: TPart;
FID: Integer;
FName: string;
public
constructor Create(APart: TPart; AID: Integer; const AName: string);
...
end;

TPart = class(TObject)
private
FID: Integer;
FName: string;
FEmployees: TList;
public
constructor create(AID: Integer; const AName: string);
destructor Destroy; override;
function AddEmployee(AID: Integer; const AName: string): TEmployee;
...这里可以定义一些与数据处理有关的函数或方法
end;

implementation

constructor TEmployee.Create(APart: TPart; AID: Integer; const AName: string);
begin
FPart := APart;
FID := AID;
FName := AName;
end;

constructor TPart.Create(AID: Integer; const AName: string);
begin
FID := AID;
FName := AName;
FEmployees := TList.Create;
end;

destructor TPart.Destroy;
begin
while FEmployees.Count > 0 do begin
TEmployee(FEmployees[FEmployees.Count - 1]).Free;
FEmployees.Delete(FEmployees.Count - 1);
end;
FEmployees.Free;
inherited Destroy;
end;

function TPart.AddEmployee(AID: Integer; const AName: string): TEmployee;
begin
Result := TEmployee.Create(Self, AID, AName);
FEmployees.Add(Result);
end;

...

试试,非常灵,从不失手。
 
barton:
非常感谢,恕我太迟钝,您的程序是怎样和特定的表结合起来呢,
字段值是怎样灌入定义的类中呢,能不能详细说明一下,最好再
给我mail一份完整的例子,谢谢!
 
我认为我楼上的例子已经够详细了.

你为了实现数据库引擎与应用程序的独立,你可以使用定义事件
的方法处理.当然,数据库的结构千差万别,不可能也勿需定义统
一的类.你应该做两件事,使事件的操作统一:
1.定义数据传递结构,我的经验是:TStrings最好,你能用
Values['Param1']=???的形式向结构中补充内容和获取内容.
例如你用一个DLL或一个Form做雇员的输入,有关雇员的信息
存放在一个TStrings中,如:
ID=1
Name=张三
Sex=男
Birth=11-12-1980
....
用它建立一个类或用它刷新数据库足够了.
2.定义四个事件:
OnList(Sender: TObject; Data: TStrings);//从数据库中取内容
OnInsert(Sender: TObject; Data: TStrings);//插入一条记录到数据库中
OnDelete(Sender: TObject; Data: TStrings);//删除一条记录
OnUpdate(Sender: TObject; Data: TStrings);//修改一条记录
这些事件的触发者是你定义的类,而这些事件的捕捉者是你的数据库模块.
当然事件中的参数是你在事件调用前准备好的.

如果你的项目中有很多这样的类,而这些类公用的部分很多,那刚好你可以
做一个基类,包括所有的公共部分,然后每个具体的类从这个基类继承,你只需
重载每个具体类的不同的部分.这样你的程序的结构化将会很好,而且会简捷
很多.:-p我都是这么做的.
 
多人接受答案了。
 
后退
顶部