把表名也存入pubdm.DictTable 啊。
解决方案 »
- 改变父句柄后保持最顶层的问题。
- 在类中使用Record类型的问题
- 求Pascal程序:输入年、月、日,输出该天是星期几?
- 怎样将记录集的数据付给一个数组?
- 怎么设置,调试可以跟进component的代码里边,我已经设了路径,但F7跟不进去,那个指点指点啊!谢谢!
- ACCESS数据库密码问题?
- 求购酒店管理系统!若有完整可直接使用的,RMB也行!
- 谁去看看在北京上映的<星球大战前传 2>谁去看,gg\mm都行!
- 请问 Delphi 6 在文件系统方面有没有什么新功能?
- 学习SQL是不是一定要在网络环境?DELPHI在单机状态下能不能调试网络版????
- 又一个菜问题!!
- query控件执行的sql语句不能超过255个字符,有何解决的办法?
在控件中提供一个类似于Items这样的用于存放所有字段,再发布一个
属性 ToChinese Boolean型的,用于控制是否做翻译;Items中填入的
如下示例:
No^编号
Name^姓名
Birth^出生年月^左边为字段名,右边为中文名
这样做的原因是可以在控件中实现将这些字符串通过分解成英文字段和
中文名,再将中文名这个字符串赋给Fields的displaylabel,就达到
翻译的效果,这种速度绝对比从数据库里读出来快多了,也是一种很好
的解决方案,在进行批量处理的时候,可以考虑这种非可视控件处理的
模式,下面是我提供的比较核心的处理“翻译”的过程.procedure TFInterface.DoTranslate(toChinese : Boolean);
var
I : Integer;
FName : String;
function GetCDisplayLabel(FName : String) : String;
var
I : Integer;
EString ,CString, theString : String;
SPos : Integer;
begin
for I:=0 to FEtoCFieldsInfo.Count-1 do begin
theString:=Trim(FEtoCFieldsInfo[I]);
SPos:=Pos(ECListSep,theString);
EString:=Copy(theString,1,SPos-1);
CString:=Copy(theString,SPos+1,Length(theString)-SPos);
if EString=FName then begin
Result:=CString;
Exit;
end;
end;
Result:='';
end;
begin
if FEtoCFieldsInfo.Count=0 then Exit;
for I:=0 to Self.Owner.ComponentCount-1 do begin
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if (Self.Owner.Components[I] is TField) then begin
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FName:=TField(Self.Owner.Components[I]).FieldName;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if not toChinese then
TField(Self.Owner.Components[I]).DisplayLabel:=FName
else
if GetCDisplayLabel(FName)<>'' then
TField(Self.Owner.Components[I]).DisplayLabel:=GetCDisplayLabel(FName);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
end;
end;
end;这个组件我们有但是我不想给你,毕竟如果你按照思路实现了
你的需求,那是你会收获很大,总比直接使用好。你上面是一种想法,但是会很麻烦,而且从数据库里读出来不是
明智之举,如果愿意,可以试一下我的这个办法。good luck
可以使程序变得很容易。