在Delphi2006中使用Ehlib4.1.4出现不能显示库中的汉字信息的问题....怎么办啊

wyj2 2007-04-27 01:01:06
环境:
Delphi2006+EHlib4.1.4
组件:
DBGridEh+MemTableEh+DataSetDriverEh+TAdoQuery+SQLServer2000

问题症状:
1,如数据表某字符串型字段(nvarchar类型)中含有汉字的内容,则当该字段滚入显示窗口时会出现异常;该字段未出现在显示窗口中时没有问题;
2,在MemTableEh中设置过滤条件时,如在条件中含有汉字,则会出现异常;如使用英文则没有问题;


哪位大侠知道解决的办法...谢了
...全文
195 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyj2 2007-04-27
  • 打赏
  • 举报
回复
第1个问题已经解决了,第二个怎么弄啊...

解决方法: 更改MemTableEh.Pas文件中下面的部分

1,在uses部分加对应的引用单元:
uses Windows, SysUtils, Classes, Controls, DB, Dialogs,
{$IFDEF EH_LIB_9} WideStrUtils, ActiveX, {$ENDIF} //增加此行
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
......

2,修改GetFieldData的实现部分:
function TCustomMemTableEh.GetFieldData(Field: TField;
Buffer: {$IFDEF CIL}TRecordBuffer{$ELSE}Pointer{$ENDIF}; NativeFormat: Boolean): Boolean;
var
.......
{$IFDEF CIL}
.......
{$ELSE}
procedure VarToBuffer(var Value: Variant);
begin
case Field.DataType of
ftGuid, ftFixedChar, ftString:
begin
PChar(Buffer)[Field.Size] := #0;
StrLCopy(PChar(Buffer), PChar(VarToStr(Value)), Field.Size);
end;
//下面6行为修改以后的内容
ftFixedWideChar, ftWideString:
{$IFNDEF EH_LIB_9}
WideString(Buffer^) := Value;//此行为原代码
{$ELSE}
WStrCopy(Buffer, tagVariant(Value).bstrVal);
{$ENDIF}
ftSmallint:
SmallInt(Buffer^) := Value;
......
wyj2 2007-04-27
  • 打赏
  • 举报
回复
第1个问题已经解决了,第二个怎么弄啊...

解决方法: 更改MemTableEh.Pas文件中下面的部分

1,在uses部分加对应的引用单元:
uses Windows, SysUtils, Classes, Controls, DB, Dialogs,
{$IFDEF EH_LIB_9} WideStrUtils, ActiveX, {$ENDIF} //增加此行
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
......

2,修改GetFieldData的实现部分:
function TCustomMemTableEh.GetFieldData(Field: TField;
Buffer: {$IFDEF CIL}TRecordBuffer{$ELSE}Pointer{$ENDIF}; NativeFormat: Boolean): Boolean;
var
.......
{$IFDEF CIL}
.......
{$ELSE}
procedure VarToBuffer(var Value: Variant);
begin
case Field.DataType of
ftGuid, ftFixedChar, ftString:
begin
PChar(Buffer)[Field.Size] := #0;
StrLCopy(PChar(Buffer), PChar(VarToStr(Value)), Field.Size);
end;
//下面6行为修改以后的内容
ftFixedWideChar, ftWideString:
{$IFNDEF EH_LIB_9}
WideString(Buffer^) := Value;//此行为原代码
{$ELSE}
WStrCopy(Buffer, tagVariant(Value).bstrVal);
{$ENDIF}
ftSmallint:
SmallInt(Buffer^) := Value;
......

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧