zoukankan      html  css  js  c++  java
  • 修改unidac findkey区分大小写的问题

    使用unidac的findkey时发现是区分大小写的,没找到在那可以设置,最后直接修改DBAccess.pas

    找到:function TCustomDADataSet.FindKey(const KeyValues: array of const): Boolean;

    将:Result := LocateEx(KeyFields, Values, FFindKeyOptions);

    修改为:Result := LocateEx(KeyFields, Values, [lxCaseInsensitive]);

    保存后重新编译应用就可以。

    function TCustomDADataSet.FindKey(const KeyValues: array of const): Boolean;

    function GetKeyValue(Index: integer): variant; // nearly copied from TField.AssignValue
    procedure Error;
    begin
    DatabaseErrorFmt(SFieldValueError, [IntToStr(Index)]);
    end;
    begin
    Result := Unassigned;

    with KeyValues[Index] do
    case VType of
    vtInteger:
    Result := Integer(VInteger);
    vtInt64:
    Result := VInt64^;
    vtBoolean:
    Result := Boolean(VBoolean);
    {$IFNDEF NEXTGEN}
    vtChar:
    Result := String(VChar);
    {$ENDIF}
    vtExtended:
    Result := Extended(VExtended^);
    {$IFNDEF NEXTGEN}
    vtString:
    Result := String(VString^);
    {$ENDIF}
    vtPointer, vtObject:
    if VPointer <> nil then Error;
    {$IFNDEF NEXTGEN}
    vtPChar:
    Result := String(VPChar);
    vtAnsiString:
    Result := String(VAnsiString);
    {$ENDIF}
    vtCurrency:
    Result := Currency(VCurrency^);
    vtVariant:
    if not VarIsClear(VVariant^) then
    Result := Variant(VVariant^);
    vtWideChar:
    Result := WideString(VWideChar);
    vtWideString:
    Result := WideString(VWideString);
    {$IFDEF VER12P}
    vtUnicodeString:
    Result := UnicodeString(VUnicodeString);
    {$ENDIF}
    else
    Error;
    end;
    end;

    var
    KeyFieldDescs: TFieldDescArray;
    Values: variant;
    KeyFieldsCount: integer;
    KeyFields: TFieldArray;
    i: integer;
    begin
    CheckBrowseMode;
    FIRecordSet.GetKeyFieldDescs(KeyFieldDescs);

    Values := Unassigned; // To prevent warning
    KeyFieldsCount := Length(KeyFieldDescs);
    SetLength(KeyFields, KeyFieldsCount);
    case KeyFieldsCount of
    0:
    DatabaseError(SKeyFieldsRequired);
    1: begin
    KeyFields[0] := GetField(KeyFieldDescs[0]);
    Values := GetKeyValue(0);
    end;
    else begin
    Values := VarArrayCreate([0, KeyFieldsCount - 1], varVariant);
    for i := 0 to KeyFieldsCount - 1 do begin
    KeyFields[i] := GetField(KeyFieldDescs[i]);

    if i <= High(KeyValues) then
    Values[i] := GetKeyValue(i)
    else
    Values[i] := Unassigned;
    end;
    end;
    end;


    // Result := LocateEx(KeyFields, Values, FFindKeyOptions);
    Result := LocateEx(KeyFields, Values, [lxCaseInsensitive]);

    end;

  • 相关阅读:
    Atitit. 查找linux 项目源码位置
    Atitit.用户权限服务 登录退出功能
    Atitit.js javascript的rpc框架选型
    Atitit.php  nginx页面空白 并返回500的解决
    Atitit .linux 取回root 密码q99
    Atitit.报名模块的管理
    Atitit.基于时间戳的农历日历历法日期计算
    Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
    我的博客开通了
    (转)列举ASP.NET 页面之间传递值的几种方式
  • 原文地址:https://www.cnblogs.com/qiufeng2014/p/13964438.html
Copyright © 2011-2022 走看看