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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbutilseh.pas

?? 針對Lib控件
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
      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 GetExpressionAsFilterString(AGrid: TCustomDBGridEh;
  OneExpressionProc: TOneExpressionFilterStringProcEh;
  DateValueToSQLStringProc: TDateValueToSQLStringProcEh;
  UseFieldOrigin: Boolean = False;
  SupportsLocalLike: Boolean = False): String;

  function GetExpressionAsString(Column: TColumnEh): String;
  var
    FieldName: String;
  begin
    if Column.Field = nil then
      FieldName := ''
    else if UseFieldOrigin and (Column.Field.Origin <> '') and (Column.STFilter.DataField = '') then
      FieldName := Column.Field.Origin
//    else if (Column.STFilter.ListSource <> nil) or (Column.Filter.DataField <> '') then
//      FieldName := Column.Filter.DataField
    else
//      FieldName := Column. Field.FieldName;
      FieldName := Column.STFilter.GetFilterFieldName;
    Result := '';
    with Column.STFilter do
    begin
      if (Expression.ExpressionType = botNon) or (Column.Field = nil) or (Expression.Operator1 = foNon) then
        Exit;
//      if KeyField <> '' then
//        Result := OneExpressionProc(Expression.Operator1, FKeyValues, FieldName, AGrid.DataSource.DataSet, DateValueToSQLStringProc)
//      else
      begin
        Result := OneExpressionProc(Expression.Operator1, GetOperand1, FieldName,
          AGrid.DataSource.DataSet, DateValueToSQLStringProc, SupportsLocalLike);
        if Expression.Relation <> foNon then
        begin
          Result := Result + ' ' + STFilterOperatorsSQLStrMapEh[Expression.Relation];
          Result := Result + OneExpressionProc(Expression.Operator2, GetOperand2,
            FieldName, AGrid.DataSource.DataSet, DateValueToSQLStringProc, SupportsLocalLike);
        end
      end;
      if Expression.Relation = foOR then
        Result := '(' + Result + ')';
    end;
  end;
var
  i: Integer;
  s: String;
begin
  Result := '';
  if (AGrid.DataSource <> nil) and (AGrid.DataSource.DataSet <> nil) and
    AGrid.DataSource.DataSet.Active then
  begin
    for i := 0 to AGrid.Columns.Count - 1 do
    begin
      s := GetExpressionAsString(TColumnEh(AGrid.Columns[i]));
      if s <> '' then
        Result := Result + s + ' AND ';
    end;
    Delete(Result, Length(Result) - 3, 4);
  end;
end;

function GetOneExpressionAsLocalFilterString(O: TSTFilterOperatorEh; v: Variant;
  FieldName: String; DataSet: TDataSet;
  DateValueToSQLStringProc: TDateValueToSQLStringProcEh; SupportsLike: Boolean): String;

  function VarValueAsFilterStr(v: Variant): String;
  begin
    if VarType(v) = varDouble then
      Result := FloatToStr(v)
    else if VarType(v) = varDate then
      if @DateValueToSQLStringProc <> nil then
        Result := DateValueToSQLStringProc(Dataset, v)
      else
        Result := '''' + DateTimeToStr(v) + ''''
    else
      Result := '''' + VarToStr(v) + '''';
  end;

var
  i: Integer;
begin
  if O in [foIn, foNotIn] then
  begin
    Result := Result + ' (';
    if VarIsArray(v) then
      for i := VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do
        Result := Result + '[' + FieldName + '] = ' + VarValueAsFilterStr(v[i]) + ' OR '
    else
      Result := Result + '[' +FieldName + '] = ' + VarValueAsFilterStr(v) + ' OR ';
    Delete(Result, Length(Result) - 3, 4);
    Result := Result + ')';
  end
  else if O in [foLike, foNotLike] then
  begin
    Result := Result +  ' [' + FieldName;
    if SupportsLike then
      if O = foLike
        then Result := Result + '] Like '
        else Result := Result + '] Not Like '
    else
      if O = foLike
        then Result := Result + '] = '
        else Result := Result + '] <> ';
    if SupportsLike
        then Result := Result + '''%' + VarToStr(v) + '%'''
        else Result := Result + VarValueAsFilterStr(v);
  end else
  begin
    Result := Result +  ' [' + FieldName +  '] ' + STFilterOperatorsSQLStrMapEh[O];
    if not (O in [foNull, foNotNull]) then
      Result := Result + ' ' + VarValueAsFilterStr(v);
  end;
end;

function GetOneExpressionAsSQLWhereString(O: TSTFilterOperatorEh; v: Variant;
  FieldName: String; DataSet: TDataSet;
  DateValueToSQLStringProc: TDateValueToSQLStringProcEh; SupportsLike: Boolean): String;

  function VarValueAsFilterStr(v: Variant): String;
  var
{$IFDEF CIL}
    OldDecimalSeparator: String;
{$ELSE}
    OldDecimalSeparator: Char;
{$ENDIF}
  begin
    if VarType(v) = varDouble then
    begin
      OldDecimalSeparator := DecimalSeparator;
      DecimalSeparator := '.';
      try
        Result := FloatToStr(v);
      finally
        DecimalSeparator := OldDecimalSeparator;
      end;
    end
    else if VarType(v) = varDate then
      if @DateValueToSQLStringProc <> nil then
        Result := DateValueToSQLStringProc(DataSet, v)
      else
        Result := '''' + VarToStr(v) + ''''
    else
      Result := '''' + VarToStr(v) + '''';
  end;

var
  i: Integer;
  theNOT: String;
begin
  if O in [foIn, foNotIn] then
  begin
    if O = foNotIn then
      theNOT := ' NOT'
    else
      theNOT := '';
    Result := Result + FieldName + theNOT + ' IN (';
    if VarIsArray(v) then
      for i := VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do
        Result := Result + VarValueAsFilterStr(v[i]) + ','
    else
      Result := Result + VarValueAsFilterStr(v) + ',';
    Delete(Result, Length(Result), 1);
    Result := Result + ')';
  end else
  begin
    Result := Result + ' ' + FieldName + ' ' + STFilterOperatorsSQLStrMapEh[O];
    if not (O in [foNull, foNotNull]) then
      if O in [foLike, foNotLike]
        then Result := Result + ' ''%' + VarToStr(v) + '%'''
        else Result := Result + ' ' + VarValueAsFilterStr(v);
  end;
end;

function DateValueToDataBaseSQLString(DataBaseName: String; v: Variant): String;
var
{$IFDEF CIL}
  OldDateSeparator: String;
{$ELSE}
  OldDateSeparator: Char;
{$ENDIF}
begin
  DataBaseName := UpperCase(DataBaseName);
  if DataBaseName = 'STANDARD' then
    Result := '''' + VarToStr(v) + ''''
  else if DataBaseName = 'ORACLE' then
    Result := 'TO_DATE(''' + FormatDateTime(ShortDateFormat, v) + ''',''' + ShortDateFormat + ''')'
  else if DataBaseName = 'INTRBASE' then
    Result := '''' + VarToStr(v) + ''''
  else if DataBaseName = 'INFORMIX' then
    Result := '''' + VarToStr(v) + ''''
  else if DataBaseName = 'MSACCESS' then
  begin
    OldDateSeparator := DateSeparator;
    try
      DateSeparator := '/';
      Result := '#' + FormatDateTime('MM/DD/YYYY', v) + '#';
    finally
      DateSeparator := OldDateSeparator;
    end;
  end
  else if DataBaseName = 'MSSQL' then
    Result := '''' + VarToStr(v) + ''''
  else if DataBaseName = 'SYBASE' then
    Result := '''' + VarToStr(v) + ''''
  else if DataBaseName = 'DB2' then
    Result := '''' + VarToStr(v) + ''''
  else
    Result := '''' + VarToStr(v) + '''';
end;

procedure ApplyFilterSQLBasedDataSet(Grid: TCustomDBGridEh;
  DateValueToSQLString: TDateValueToSQLStringProcEh; IsReopen: Boolean;
  SQLPropName: String);
var
  i, OrderLine: Integer;
  s: String;
  SQL: TStrings;
  SQLPropValue: WideString;
begin
  if not IsDataSetHaveSQLLikeProp(Grid.DataSource.DataSet, SQLPropName, SQLPropValue) then
    raise Exception.Create(Grid.DataSource.DataSet.ClassName + ' is not SQL based dataset');

  SQL := TStringList.Create;
  try
    SQL.Text := SQLPropValue;

    OrderLine := -1;
    for i := 0 to SQL.Count - 1 do
      if UpperCase(Copy(SQL[i], 1, Length(SQLFilterMarker))) = UpperCase(SQLFilterMarker) then
      begin
        OrderLine := i;
        Break;
      end;
    s := GetExpressionAsFilterString(Grid, GetOneExpressionAsSQLWhereString, DateValueToSQLString, True);
    if s = '' then
      s := '1=1';
    if OrderLine = -1 then
      Exit;
    Grid.DataSource.DataSet.DisableControls;
    try
      if Grid.DataSource.DataSet.Active then
        Grid.DataSource.DataSet.Close;
      SQL.Strings[OrderLine] := SQLFilterMarker + ' (' + s + ')';
      SetDataSetSQLLikeProp(Grid.DataSource.DataSet, SQLPropName, SQL.Text);
      if IsReopen then
        Grid.DataSource.DataSet.Open;
    finally
      Grid.DataSource.DataSet.EnableControls;
    end;

  finally
    SQL.Free;
  end;
end;

{ Sorting }

function IsSQLBasedDataSet(DataSet: TDataSet; var SQL: TStrings): Boolean;
var
  FPropInfo: PPropInfo;
begin
  Result := False;
  SQL := nil;
  FPropInfo := GetPropInfo(DataSet.ClassInfo, 'SQL');
  if FPropInfo = nil then Exit;
  if PropType_getKind(PropInfo_getPropType(FPropInfo)) = tkClass then
  try
    SQL := (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings);
  except // if PropInfo is not TStrings or not inherited of
  end;

  if SQL <> nil then
    Result := True;
end;

function IsDataSetHaveSQLLikeProp(DataSet: TDataSet; SQLPropName: String; var SQLPropValue: WideString): Boolean;
var
  FPropInfo: PPropInfo;
begin
  Result := False;
  SQLPropValue := '';
  FPropInfo := GetPropInfo(DataSet.ClassInfo, SQLPropName);
  if FPropInfo = nil then Exit;
  if PropType_getKind(PropInfo_getPropType(FPropInfo)) = tkString then
    SQLPropValue := GetStrProp(DataSet, FPropInfo)
{$IFDEF EH_LIB_6}
  else if PropType_getKind(PropInfo_getPropType(FPropInfo)) = tkWString then
    SQLPropValue := GetWideStrProp(DataSet, FPropInfo)
{$ELSE}
  else if PropType_getKind(PropInfo_getPropType(FPropInfo)) = tkWString then
    SQLPropValue := GetStrProp(DataSet, FPropInfo)
{$ENDIF}
  else if PropType_getKind(PropInfo_getPropType(FPropInfo)) = tkClass then
    try
      //if (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings) <> nil then
      //  SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings).Text
      if TObject(GetOrdProp(DataSet, FPropInfo)) is TStrings then
        SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings).Text
      else if TObject(GetOrdProp(DataSet, FPropInfo)) is TWideStrings then
        SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TWideStrings).Text
      else
        Exit;
    except // if PropInfo is not TStrings or not inherited of
    end
  else Exit;
  Result := True;
end;

procedure ApplySortingForSQLBasedDataSet(Grid: TCustomDBGridEh; DataSet: TDataSet;
   UseFieldName: Boolean; IsReopen: Boolean; SQLPropName: String);

  function DeleteStr(str: String; sunstr: String): String;
  var
    i: Integer;
  begin
    i := Pos(sunstr, str);
    if i <> 0 then
      Delete(str, i, Length(sunstr));
    Result := str;
  end;

var
  i, OrderLine: Integer;
  s: String;
  SQL: TStrings;
  SQLPropValue: WideString;
begin
  if not IsDataSetHaveSQLLikeProp(DataSet, SQLPropName, SQLPropValue) then
    raise Exception.Create(DataSet.ClassName + ' is not SQL based dataset');

  SQL := TStringList.Create;
  try
    SQL.Text := SQLPropValue;

    s := '';
    for i := 0 to Grid.SortMarkedColumns.Count - 1 do
    begin
      if UseFieldName
        then s := s + Grid.SortMarkedColumns[i].FieldName
        else s := s + IntToStr(Grid.SortMarkedColumns[i].Field.FieldNo);
      if Grid.SortMarkedColumns[i].Title.SortMarker = smUpEh
        then s := s + ' DESC, '
        else s := s + ', ';
    end;

    if s <> '' then
      s := 'ORDER BY ' + Copy(s, 1, Length(s) - 2);

    OrderLine := -1;
    for i := 0 to SQL.Count - 1 do
      if UpperCase(Copy(SQL[i], 1, Length('ORDER BY'))) = 'ORDER BY' then
      begin
        OrderLine := i;
        Break;
      end;
    if OrderLine = -1 then
    begin
      SQL.Add('');
      OrderLine := SQL.Count-1;
    end;

    SQL.Strings[OrderLine] := s;

    DataSet.DisableControls;
    try

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲柠檬福利资源导航| 欧美日韩在线播放三区四区| 欧美电影免费观看高清完整版| 亚洲另类中文字| 色天天综合久久久久综合片| 亚洲精选一二三| 欧美亚洲综合另类| 日本最新不卡在线| 久久综合九色欧美综合狠狠| 国产成人丝袜美腿| 国产精品美女久久久久久久| 99riav一区二区三区| 亚洲愉拍自拍另类高清精品| 欧美日韩电影一区| 蜜桃av一区二区在线观看 | 日韩av中文字幕一区二区三区| 欧美体内she精高潮| 日本不卡1234视频| 欧美激情中文字幕一区二区| 色婷婷国产精品综合在线观看| 日日摸夜夜添夜夜添精品视频| 精品国产123| 99久久免费视频.com| 午夜精品视频一区| 国产三级一区二区| 欧美午夜不卡视频| 国产露脸91国语对白| 亚洲黄色小视频| 精品久久久久久无| 色婷婷精品久久二区二区蜜臂av | 蜜臀av一区二区| 国产婷婷色一区二区三区在线| 色婷婷综合久久久久中文一区二区 | 日韩一区二区麻豆国产| 国产v日产∨综合v精品视频| 亚洲国产三级在线| 国产精品日韩成人| 制服视频三区第一页精品| 成人永久aaa| 日韩专区一卡二卡| 国产精品第13页| 日韩欧美高清一区| 欧美制服丝袜第一页| 国产精品夜夜爽| 视频一区中文字幕国产| 中文字幕一区二区三区不卡| 日韩美女主播在线视频一区二区三区 | 国产精品视频看| 欧美一级高清片| 在线观看日韩毛片| 成人激情免费电影网址| 蜜桃视频在线观看一区| 亚洲一区二区三区三| 国产欧美日韩精品一区| 日韩视频免费观看高清完整版在线观看 | 美日韩一区二区| 亚洲曰韩产成在线| 亚洲精品亚洲人成人网在线播放| 国产三级欧美三级| 久久先锋影音av鲁色资源| 欧美日韩一区二区在线观看视频| 不卡电影一区二区三区| 国产精品白丝av| 久久超级碰视频| 日日夜夜精品免费视频| 午夜国产不卡在线观看视频| 亚洲乱码国产乱码精品精小说| 欧美高清在线一区二区| 久久久精品tv| 久久久91精品国产一区二区三区| 日韩欧美视频在线| 这里只有精品免费| 欧美一区二区三区免费大片| 欧美亚洲愉拍一区二区| 在线观看视频欧美| 欧美日韩一区二区在线观看视频 | 99久久婷婷国产综合精品电影| 粉嫩一区二区三区在线看| 激情欧美一区二区| 狠狠久久亚洲欧美| 国产一区二区导航在线播放| 老司机精品视频在线| 久久av中文字幕片| 国产综合色产在线精品| 国产精品一区二区三区乱码| 国产麻豆精品久久一二三| 国产99久久精品| 成人手机在线视频| 91丨九色丨蝌蚪富婆spa| 91福利国产成人精品照片| 在线观看日韩毛片| 91精品国产91久久综合桃花| 欧美一区二区三区免费在线看 | 久久精品一二三| 亚洲国产电影在线观看| 亚洲欧美日韩国产综合在线 | 男人的天堂亚洲一区| 精品一区二区三区不卡| 国产成人午夜视频| 91在线丨porny丨国产| 欧美午夜精品一区二区蜜桃| 91精品免费观看| 欧美精品一区二区三区蜜臀| 国产日韩v精品一区二区| 亚洲视频综合在线| 日韩精品视频网站| 精品写真视频在线观看| 不卡在线观看av| 欧美日韩亚洲综合一区二区三区| 日韩一区二区在线观看视频 | 亚洲视频一区二区在线观看| 亚洲一二三四区不卡| 免费在线观看视频一区| 丁香啪啪综合成人亚洲小说| 色狠狠综合天天综合综合| 日韩一级高清毛片| 国产精品久久久久久久久久久免费看 | 国产一区二区导航在线播放| 91福利国产成人精品照片| 日韩精品一区二区三区中文不卡| 国产精品嫩草影院com| 亚洲成人一区二区| 国产福利视频一区二区三区| 欧美性受xxxx黑人xyx性爽| 精品福利一区二区三区免费视频| 日韩一区中文字幕| 国内精品视频一区二区三区八戒| 97久久人人超碰| 欧美不卡一二三| 亚洲精品免费视频| 国产精品2024| 6080日韩午夜伦伦午夜伦| 国产精品久久久久久户外露出| 午夜不卡av免费| 99视频热这里只有精品免费| 91精品国产黑色紧身裤美女| 中文字幕视频一区| 国内成+人亚洲+欧美+综合在线| 日本韩国一区二区| 国产精品素人视频| 精品一二三四区| 欧美日韩综合在线| 亚洲色图在线视频| 国产91在线观看| 精品黑人一区二区三区久久| 亚洲一二三专区| 色婷婷亚洲婷婷| 国产精品天天看| 国产乱码精品一品二品| 日韩欧美国产系列| 日韩精品成人一区二区三区| 91国产精品成人| 综合亚洲深深色噜噜狠狠网站| 国产一区二区三区在线观看精品| 91精品国产综合久久福利软件| 一区二区在线免费观看| 99在线精品视频| 国产精品成人一区二区三区夜夜夜| 国产在线播放一区三区四| 日韩欧美国产综合一区| 青青草97国产精品免费观看 | 色悠悠久久综合| 中文字幕欧美一区| 成人免费视频app| 国产欧美一区二区精品忘忧草| 国内精品在线播放| 久久久综合九色合综国产精品| 久久99九九99精品| 久久只精品国产| 国产高清成人在线| 国产精品网曝门| 91在线视频官网| 亚洲午夜激情网站| 欧美久久久久久蜜桃| 日日夜夜精品视频免费| 日韩午夜电影在线观看| 毛片av一区二区| www一区二区| 高清成人在线观看| 1024成人网色www| 日本高清不卡一区| 亚洲国产精品欧美一二99| 欧美日韩免费一区二区三区视频 | 亚洲同性gay激情无套| 日本韩国欧美一区| 日本视频中文字幕一区二区三区| 日韩三级视频中文字幕| 国产一区美女在线| 国产精品久久久久久久久久久免费看 | 精品国产乱码久久久久久图片| 精品在线观看视频| 国产亚洲精久久久久久| 97se亚洲国产综合自在线不卡| 一区二区三区 在线观看视频| 欧美在线免费观看视频| 午夜一区二区三区视频| 精品捆绑美女sm三区| 91在线看国产| 日日夜夜精品视频免费| 久久精品一二三|