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

解决方案 »

  1.   

    第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;
    ......
      

  2.   

    第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;
    ......