亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dbutilseh.pas

?? 針對Lib控件
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
    Exit;
  if S[Pos] = '''' then
  begin
    for i := Pos + 1 to Length(S) do
      if S[i] = '''' then
      begin
        Result := Copy(S, Pos + 1, i - Pos - 1);
        Pos := i + 1;
        Exit;
      end;
    raise Exception.Create(SQuoteIsAbsentEh + S);
  end
  else
  begin
    for i := Pos to Length(S) do
    begin
      if ((S[i] in [' ']) and CheckForOperand(S, SkipBlanks(S, i))) or
        ((S[i] in [')', '('])) or
        (PreferCommaForList and (S[i] = ',')) then
      begin
        Result := Copy(S, Pos, i - Pos);
        Pos := i;
        Exit;
      end;
    end;
    Result := Copy(S, Pos, MAXINT);
    Pos := Length(S) + 1;
  end;
end;

function ReadValues(S: String; var Pos: Integer; PreferCommaForList: Boolean): Variant;
var
  i: Integer;
  vArr: Variant;
begin
  i := 0;
  vArr := VarArrayCreate([0, 0], varVariant);
  while True do
  begin
    vArr[i] := ReadValue(S, Pos, PreferCommaForList);
    if vArr[i] = Null then
      Break;
    if PreferCommaForList and (CharAtPos(S, Pos) = ',') then
      Inc(Pos)
    else
      Break;
    Inc(i);
    VarArrayRedimEh(vArr, i);
  end;
  if i = 0 then
    Result := vArr[0]
  else
    Result := vArr;
end;

function GetLexeme(S: String; var Pos: Integer; var Operator: TSTFilterOperatorEh;
  PreferCommaForList: Boolean): Variant;
var
  Oper: TOperator;
  Operator1: TSTFilterOperatorEh;
  TheWord: String;

  function ReadWord(S: String; Pos: Integer): String;
  var
    c: Char;
    NextPos: Integer;
  begin
    Result := '';
    while True do
    begin
      c := CharAtPos(S, Pos);
      if (c < #32) or (c in [' ','(',')','>','<','=','!','~','&','|','.',',','''','"','+','-']) then
        Exit;
      NextPos := NextCharIndex(S,Pos);
      Result := Result + Copy(S,Pos,NextPos-Pos);
      Pos := NextPos;
    end;
  end;

begin
  Operator := foNon;
  Oper := opNon;
  Result := '';
  if Length(S) < Pos then
    Exit;
  if S[Pos] = '''' then
  begin
    Result := ReadValues(S, Pos, PreferCommaForList);
    Operator := foValue;
  end
  else
  begin
    case S[Pos] of

      '!':
        if CharAtPos(S, Pos + 1) = '=' then
          SetOperatorPos(Pos, 2, Oper, opNotEqual)
        else
          SetOperatorPos(Pos, 1, Oper, opNot);
      '=':
        SetOperatorPos(Pos, 1, Oper, opEqual);
      '(':
        SetOperatorPos(Pos, 1, Oper, opOpenBracket);

      '>':
        if CharAtPos(S, Pos + 1) = '=' then
          SetOperatorPos(Pos, 2, Oper, opGreaterOrEqual)
        else
          SetOperatorPos(Pos, 1, Oper, opGreaterThan);
      '<':
        if CharAtPos(S, Pos + 1) = '=' then
          SetOperatorPos(Pos, 2, Oper, opLessOrEqual)
        else if CharAtPos(S, Pos + 1) = '>' then
          SetOperatorPos(Pos, 2, Oper, opNotEqual)
        else
          SetOperatorPos(Pos, 1, Oper, opLessThan);
      '~':
        SetOperatorPos(Pos, 1, Oper, opLike);
      '&':
        SetOperatorPos(Pos, 1, Oper, opAnd); //And
      '|':
        SetOperatorPos(Pos, 1, Oper, opOr); // Or
    else
      TheWord := ReadWord(S,Pos);
      Oper := GetOperatorByWord(TheWord);
      if Oper <> opNon then
        Inc(Pos, Length(TheWord));
    end; //case

    if Oper = opNon then
    begin
      Result := ReadValues(S, Pos, PreferCommaForList);
      if VarIsNull(Result) then
        Operator := foNon
      else
        Operator := foValue;
      Exit;
    end;

    Pos := SkipBlanks(S, Pos);

    if Oper = opNot then
    begin
      GetLexeme(S, Pos, Operator1, PreferCommaForList);
      case Operator1 of
        foLike: Operator := foNotLike;
        foIn: Operator := foNotIn;
        foNull: Operator := foNotNull;
      end
    end
    else if Oper = opIn then
    begin
      if CharAtPos(S, Pos) = '(' then
        Inc(Pos)
      else
        raise Exception.Create(SLeftBracketExpectedEh + S);
      Operator := foIn;
    end
    else
      Operator := OperatorAdvFilterOperatorMap[Oper];
  end;
end;

function ParseSTFilterExpression(Exp: String; var FExpression: TSTFilterExpressionEh): Boolean;

var
  PreferCommaForList: Boolean;

  procedure ResetPreferCommaForList;
  begin
    if (FExpression.ExpressionType = botNumber) and (DecimalSeparator = ',') then
      PreferCommaForList := False
    else
      PreferCommaForList := True;
  end;

var
  v: Variant;
  op, op1: TSTFilterOperatorEh;
  p: Integer;
begin
  Result := False;

  ResetPreferCommaForList;

  FExpression.Operator1 := foNon;
  FExpression.Operand1 := Null;
  FExpression.Relation := foNon;
  FExpression.Operator2 := foNon;
  FExpression.Operand2 := Null;

  Exp := Trim(Exp);
  if Exp = '' then
    Exit;
  // 1 [Oper] + Values
  p := SkipBlanks(Exp, 1);
  v := GetLexeme(Exp, p, op, PreferCommaForList);
  if op = foValue then
  begin
    if VarIsArray(v) then
      FExpression.Operator1 := foIn
    else if FExpression.ExpressionType = botString then
      FExpression.Operator1 := foLike
    else
      FExpression.Operator1 := foEqual;
    FExpression.Operand1 := v;
  end
  else if (op = foNon) and (Length(Exp) <> 0) then
    raise Exception.Create(SErrorInExpressionEh + Exp)
  else
  begin
    if op in [foIn, foNotIn] then
      PreferCommaForList := True;
    p := SkipBlanks(Exp, p);
    v := GetLexeme(Exp, p, op1, PreferCommaForList);
    FExpression.Operator1 := op;
    if op1 = foNull then
      if op = foEqual then
        FExpression.Operator1 := foNull
      else if op = foNotEqual then
        FExpression.Operator1 := foNotNull
      else
        raise Exception.Create(SUnexpectedExpressionBeforeNullEh + Exp)
    else if op1 <> foValue then
      raise Exception.Create(SUnexpectedExpressionAfterOperatorEh + Exp);
    FExpression.Operand1 := v;
    if op in [foIn, foNotIn] then
    begin
      p := SkipBlanks(Exp, p);
      if CharAtPos(Exp, p) = ')' then
        Inc(p)
      else
        raise Exception.Create(SRightBracketExpectedEh + Exp);
      ResetPreferCommaForList;
    end;
  end;

  while True do
  begin
    // 2 And or Or
    p := SkipBlanks(Exp, p);
    v := GetLexeme(Exp, p, op, PreferCommaForList);
    if op = foNon then
      if p <> Length(Exp) + 1 then
        raise Exception.Create(SIncorrectExpressionEh + Exp)
      else
        Break;
    if not (op in [foAND, foOR]) then
      raise Exception.Create(SUnexpectedANDorOREh + Exp);
    FExpression.Relation := op;

    // 3 [Oper] + Values
    p := SkipBlanks(Exp, p);
    v := GetLexeme(Exp, p, op, PreferCommaForList);
    if op = foNon then
      if p <> Length(Exp) + 1 then
        raise Exception.Create(SIncorrectExpressionEh + Exp)
      else
        Break;
    if op = foValue then
    begin
      if VarIsArray(v) then
        FExpression.Operator2 := foIn
      else if FExpression.ExpressionType = botString then
        FExpression.Operator2 := foLike
      else
        FExpression.Operator2 := foEqual;
      FExpression.Operand2 := v;
    end
    else if (op = foNon) and (Length(Exp) <> 0) then
      raise Exception.Create(SErrorInExpressionEh + Exp)
    else
    begin
      if op in [foIn, foNotIn] then
        PreferCommaForList := True;
      p := SkipBlanks(Exp, p);
      v := GetLexeme(Exp, p, op1, PreferCommaForList);
      FExpression.Operator2 := op;
      if op1 = foNull then
        if op = foEqual then
          FExpression.Operator2 := foNull
        else if op = foNotEqual then
          FExpression.Operator2 := foNotNull
        else
          raise Exception.Create(SUnexpectedExpressionBeforeNullEh + Exp)
      else if op1 <> foValue then
        raise Exception.Create(SUnexpectedExpressionAfterOperatorEh + Exp);
      FExpression.Operand2 := v;
      ResetPreferCommaForList;
    end;
    Result := True;
    Break;
  end;

  if FExpression.Operator1 in [foEqual..foNotIn] then
    ConvertVarStrValues(FExpression.Operand1, FExpression.ExpressionType)
  else
    FExpression.Operand1 := Null;

  if FExpression.Operator2 in [foEqual..foNotIn] then
    ConvertVarStrValues(FExpression.Operand2, FExpression.ExpressionType)
  else
    FExpression.Operand2 := Null;
end;

function ParseSTFilterExpressionEh(Exp: String; var FExpression: TSTFilterExpressionEh): Boolean;

var
  PreferCommaForList: Boolean;

  procedure ResetPreferCommaForList;
  begin
    if (FExpression.ExpressionType = botNumber) and (DecimalSeparator = ',') then
      PreferCommaForList := False
    else
      PreferCommaForList := True;
  end;

var
  v: Variant;
  op, op1: TSTFilterOperatorEh;
  p: Integer;
begin
  Result := False;

  ResetPreferCommaForList;

  FExpression.Operator1 := foNon;
  FExpression.Operand1 := Null;
  FExpression.Relation := foNon;
  FExpression.Operator2 := foNon;
  FExpression.Operand2 := Null;

  Exp := Trim(Exp);
  if Exp = '' then
    Exit;
  // 1 [Oper] + Values
  p := SkipBlanks(Exp, 1);
  v := GetLexeme(Exp, p, op, PreferCommaForList);
  if op = foValue then
  begin
    if VarIsArray(v) then
      FExpression.Operator1 := foIn
    else if FExpression.ExpressionType = botString then
      FExpression.Operator1 := foLike
    else
      FExpression.Operator1 := foEqual;
    FExpression.Operand1 := v;
  end
  else if (op = foNon) and (Length(Exp) <> 0) then
    raise Exception.Create(SErrorInExpressionEh + Exp)
  else
  begin
    if op in [foIn, foNotIn] then
      PreferCommaForList := True;
    p := SkipBlanks(Exp, p);
    v := GetLexeme(Exp, p, op1, PreferCommaForList);
    FExpression.Operator1 := op;
    if op1 = foNull then
      if op = foEqual then
        FExpression.Operator1 := foNull
      else if op = foNotEqual then
        FExpression.Operator1 := foNotNull
      else
        raise Exception.Create(SUnexpectedExpressionBeforeNullEh + Exp)
    else if op1 <> foValue then
      raise Exception.Create(SUnexpectedExpressionAfterOperatorEh + Exp);
    FExpression.Operand1 := v;
    if op in [foIn, foNotIn] then
    begin
      p := SkipBlanks(Exp, p);
      if CharAtPos(Exp, p) = ')' then
        Inc(p)
      else
        raise Exception.Create(SRightBracketExpectedEh + Exp);
      ResetPreferCommaForList;
    end;
  end;

  while True do
  begin
    // 2 And or Or
    p := SkipBlanks(Exp, p);
    v := GetLexeme(Exp, p, op, PreferCommaForList);
    if op = foNon then
      if p <> Length(Exp) + 1 then
        raise Exception.Create(SIncorrectExpressionEh + Exp)
      else
        Break;
    if not (op in [foAND, foOR]) then
      raise Exception.Create(SUnexpectedANDorOREh + Exp);
    FExpression.Relation := op;

    // 3 [Oper] + Values
    p := SkipBlanks(Exp, p);
    v := GetLexeme(Exp, p, op, PreferCommaForList);
    if op = foNon then
      if p <> Length(Exp) + 1 then
        raise Exception.Create(SIncorrectExpressionEh + Exp)
      else
        Break;
    if op = foValue then
    begin
      if VarIsArray(v) then
        FExpression.Operator2 := foIn

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区综合| 免费观看在线色综合| 69堂亚洲精品首页| 国产大片一区二区| 亚洲电影欧美电影有声小说| 国产亚洲1区2区3区| 欧美日韩国产一级二级| 国产成人免费视频网站高清观看视频| 亚洲一区二区黄色| 国产婷婷色一区二区三区在线| 欧美日免费三级在线| 国产黄人亚洲片| 日本中文字幕不卡| 亚洲国产三级在线| 亚洲日本在线看| 久久综合国产精品| 欧美日韩不卡视频| 在线一区二区观看| 99久久99久久精品免费看蜜桃| 久久av老司机精品网站导航| 亚洲高清免费一级二级三级| 日韩美女视频19| 国产女同互慰高潮91漫画| 日韩欧美亚洲国产另类| 欧美日本免费一区二区三区| 色综合 综合色| 粉嫩嫩av羞羞动漫久久久| 六月丁香综合在线视频| 性做久久久久久久久| 亚洲女爱视频在线| 日韩伦理av电影| 国产精品私人自拍| 亚洲国产岛国毛片在线| 久久久91精品国产一区二区三区| 日韩女优av电影在线观看| 欧美老肥妇做.爰bbww| 欧美性色aⅴ视频一区日韩精品| 色综合一个色综合亚洲| 成人免费av资源| av激情成人网| 91老师片黄在线观看| 色94色欧美sute亚洲13| 色爱区综合激月婷婷| 一本在线高清不卡dvd| 色国产综合视频| 国产精品免费aⅴ片在线观看| 日本一区二区免费在线观看视频| 中文字幕不卡在线观看| 欧美国产激情二区三区| 国产精品久久99| 亚洲视频你懂的| 亚洲精品国产成人久久av盗摄| 一区二区在线观看视频| 亚洲国产精品一区二区www| 亚洲动漫第一页| 日本美女一区二区| 久久国产精品一区二区| 国产伦精品一区二区三区免费| 国产成人午夜视频| 92国产精品观看| 欧美伊人久久大香线蕉综合69| 欧美久久久久免费| 精品99一区二区| 国产精品热久久久久夜色精品三区| 国产精品美女一区二区在线观看| 亚洲视频在线一区| 天天操天天综合网| 国产美女在线观看一区| 91在线精品一区二区| 欧美三级蜜桃2在线观看| 日韩久久久精品| 日韩一区欧美一区| 日本系列欧美系列| 懂色中文一区二区在线播放| 91丝袜国产在线播放| 69成人精品免费视频| 国产欧美va欧美不卡在线| 亚洲自拍另类综合| 精一区二区三区| 99re这里都是精品| 欧美一三区三区四区免费在线看 | 粉嫩欧美一区二区三区高清影视| 色综合 综合色| 欧美岛国在线观看| 亚洲欧美日韩国产一区二区三区| 同产精品九九九| 国产69精品久久777的优势| 欧美日韩一区 二区 三区 久久精品| 精品国产免费一区二区三区四区 | 色综合一区二区三区| 日韩免费电影网站| 亚洲三级久久久| 精品一区二区在线视频| 色网综合在线观看| 久久久精品人体av艺术| 亚洲一二三四在线| 大胆欧美人体老妇| 欧美一级国产精品| 亚洲综合网站在线观看| 国产精品一区二区在线播放| 欧美制服丝袜第一页| 久久精品一区四区| 秋霞午夜鲁丝一区二区老狼| 93久久精品日日躁夜夜躁欧美| 欧美大黄免费观看| 亚洲无人区一区| av在线不卡观看免费观看| 欧美mv日韩mv亚洲| 午夜国产精品一区| 中文字幕高清一区| 久久精工是国产品牌吗| 欧美三日本三级三级在线播放| 欧美激情综合五月色丁香| 免费美女久久99| 色婷婷一区二区三区四区| 国产日韩欧美高清| 国产一区二区三区免费在线观看| 欧美精选午夜久久久乱码6080| 亚洲欧洲精品一区二区三区| 国产精品123区| 日韩欧美综合一区| 蜜臀久久99精品久久久久久9| 欧美亚洲图片小说| 一区二区三区在线播放| 99久久777色| 成人免费在线视频| 99视频精品在线| 中文字幕一区免费在线观看| 国产成人鲁色资源国产91色综| 精品久久久影院| 韩国中文字幕2020精品| 日韩精品一区二区三区视频播放 | 亚洲444eee在线观看| 91精品91久久久中77777| 中文字幕一区二| 成人成人成人在线视频| 国产精品视频免费看| 成人性视频网站| 国产精品沙发午睡系列990531| 高清不卡一二三区| 国产精品色婷婷| 高清不卡在线观看| 亚洲视频1区2区| 色综合天天做天天爱| 亚洲卡通欧美制服中文| 日本久久电影网| 亚洲一区二区三区三| 56国语精品自产拍在线观看| 日韩和的一区二区| 欧美成人乱码一区二区三区| 久久9热精品视频| 欧美韩日一区二区三区四区| 99视频超级精品| 亚洲国产精品一区二区尤物区| 欧美精品三级在线观看| 日本少妇一区二区| 久久久久久久久蜜桃| 成人av在线一区二区| 依依成人精品视频| 制服.丝袜.亚洲.中文.综合| 久久av资源站| 中文一区一区三区高中清不卡| av亚洲精华国产精华精| 亚洲h精品动漫在线观看| 欧美一区二区三区公司| 国产成人综合亚洲91猫咪| 国产精品看片你懂得| 欧美午夜片在线观看| 日本不卡一二三| 国产欧美一区二区在线观看| 91福利在线免费观看| 久久se精品一区二区| 亚洲视频资源在线| 欧美v亚洲v综合ⅴ国产v| 成人av电影在线播放| 水蜜桃久久夜色精品一区的特点 | 久久久不卡影院| caoporm超碰国产精品| 丝瓜av网站精品一区二区| 国产日产欧美精品一区二区三区| 日韩一区日韩二区| 91精品国产高清一区二区三区| 成人免费视频免费观看| 午夜av区久久| 国产精品青草综合久久久久99| 欧美视频中文字幕| 国产精品88888| 亚洲线精品一区二区三区八戒| 亚洲精品在线观| 欧美日韩亚洲另类| 福利电影一区二区| 日本欧美久久久久免费播放网| 国产精品短视频| 欧美成人一级视频| 欧美日韩一级大片网址| 成人av资源站| 久久精品国产成人一区二区三区| 亚洲精品一卡二卡| 国产亚洲一二三区| 91精品久久久久久蜜臀|