环境:
Delphi2006+EHlib4.1.4
组件:
DBGridEh+MemTableEh+DataSetDriverEh+TAdoQuery+SQLServer2000问题症状:
1,如数据表某字符串型字段(nvarchar类型)中含有汉字的内容,则当该字段滚入显示窗口时会出现异常;该字段未出现在显示窗口中时没有问题;
2,在MemTableEh中设置过滤条件时,如在条件中含有汉字,则会出现异常;如使用英文则没有问题;
哪位大侠知道解决的办法...谢了
Delphi2006+EHlib4.1.4
组件:
DBGridEh+MemTableEh+DataSetDriverEh+TAdoQuery+SQLServer2000问题症状:
1,如数据表某字符串型字段(nvarchar类型)中含有汉字的内容,则当该字段滚入显示窗口时会出现异常;该字段未出现在显示窗口中时没有问题;
2,在MemTableEh中设置过滤条件时,如在条件中含有汉字,则会出现异常;如使用英文则没有问题;
哪位大侠知道解决的办法...谢了
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;
......
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;
......