修正fpc(lazarus)BufDataSet.Filter使用中文字段名称时无效的Bug

发布时间 2023-07-19 09:24:35作者: 秋·风

最近在使用fpc(lazarus)BufDataset的Filter使用中文字段名称时无效的问题,经跟踪Bufdataset源码时,发现Filter处理关键字时没正确读取中文引起的,处理起来也很简单:
打开/fpcsrc/packages/fcl-db/src/dbase/dbf_prsore.pas
定位837、870和872行,按以下添加#$80..#$FF,然后重新编译fpcsrc及应用程序就可以。

          while (I2 <= Len) and (AnExpr[I2] in ['a'..'z', 'A'..'Z', '_', '0'..'9',#$80..#$FF]) do  //第837行添加#$80..#$FF
          // However string constants can also appear without delimiters
          'a'..'z', 'A'..'Z', '_',#$80..#$FF://第870行添加#$80..#$FF
            begin
              while (I2 <= Len) and (AnExpr[I2] in ['a'..'z', 'A'..'Z', '_', '0'..'9',#$80..#$FF]) do //第872行添加#$80..#$FF
                Inc(I2);
            end;

修正后Bufdataset Filter已能正确处理含中文的字段: