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

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

?? updatesqlediteh.pas

?? 一個(gè)功能強(qiáng)大的DBGRID控件
?? PAS
?? 第 1 頁 / 共 3 頁
字號(hào):
{*******************************************************}
{                                                       }
{       Borland Delphi Visual Component Library         }
{       UpdateSQL Component Editor                      }
{                                                       }
{       Copyright (c) 1997,1999 Borland Software Corp.  }
{                                                       }
{       Changed by Dmitry V. Bolshakov                  }
{                                                       }
{*******************************************************}

unit UpdateSQLEditEh;

{$I EHLIB.INC}

interface

uses Forms, DB, ExtCtrls, StdCtrls, Controls, ComCtrls,
  Classes, SysUtils, Windows, Menus, DataDriverEh, MemTableEh, Graphics,
{$IFDEF EH_LIB_6}
  Variants,
{$ENDIF}
  Mask, DBCtrlsEh, MemTableDataEh;

type

  TWaitMethod = procedure of object;

  TUpdateSQLEditFormEh = class(TForm)
    OkButton: TButton;
    CancelButton: TButton;
    HelpButton: TButton;
    GenerateButton: TButton;
    PrimaryKeyButton: TButton;
    DefaultButton: TButton;
    UpdateTableName: TComboBox;
    FieldsPage: TTabSheet;
    SQLPage: TTabSheet;
    PageControl: TPageControl;
    KeyFieldList: TListBox;
    UpdateFieldList: TListBox;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    FTempTable: TMemTableEh;
    QuoteFields: TCheckBox;
    GetTableFieldsButton: TButton;
    FieldListPopup: TPopupMenu;
    miSelectAll: TMenuItem;
    miClearAll: TMenuItem;
    PageControl1: TPageControl;
    tsInsert: TTabSheet;
    tsModify: TTabSheet;
    tsDelete: TTabSheet;
    tsGetrec: TTabSheet;
    MemoInsert: TMemo;
    MemoModify: TMemo;
    MemoDelete: TMemo;
    MemoGetRec: TMemo;
    cbUpdate: TCheckBox;
    cbDelete: TCheckBox;
    cbGetRec: TCheckBox;
    cbInsert: TCheckBox;
    cbIncrementField: TComboBox;
    Label2: TLabel;
    cbIncrementObject: TComboBox;
    labelUpdateObjects: TLabel;
    tsSpecParams: TTabSheet;
    cbSpecParams: TCheckBox;
    Panel11: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    cbUpdateFields: TCheckBox;
    cbKeyFields: TCheckBox;
    cbTableName: TCheckBox;
    Label7: TLabel;
    Panel1: TPanel;
    Panel10: TPanel;
    Label8: TLabel;
    Bevel4: TBevel;
    bLoadSpecString: TButton;
    mSpecParams: TMemo;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Bevel3: TBevel;
    MemoUpdateFields: TMemo;
    MemoKeyFields: TMemo;
    dbeTableName: TDBEditEh;
    procedure FormCreate(Sender: TObject);
    procedure HelpButtonClick(Sender: TObject);
    procedure DefaultButtonClick(Sender: TObject);
    procedure GenerateButtonClick(Sender: TObject);
    procedure PrimaryKeyButtonClick(Sender: TObject);
    procedure PageControlChanging(Sender: TObject;
      var AllowChange: Boolean);
    procedure GetTableFieldsButtonClick(Sender: TObject);
    procedure SettingsChanged(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure UpdateTableNameChange(Sender: TObject);
    procedure UpdateTableNameClick(Sender: TObject);
    procedure SelectAllClick(Sender: TObject);
    procedure ClearAllClick(Sender: TObject);
    procedure cbInsertClick(Sender: TObject);
    procedure MemoModifyKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    DataDriver: TCustomSQLDataDriverEh;
    FSettingsChanged: Boolean;
    FDatasetDefaults: Boolean;
    function GetTableRef(const TabName, QuoteChar: string): string;
    function Edit: Boolean;
    procedure GenWhereClause(const TabAlias, QuoteChar: string; KeyFields, SQL: TStrings);
    procedure GenDeleteSQL(const TableName, QuoteChar: string; KeyFields, SQL: TStrings);
    procedure GenInsertSQL(const TableName, QuoteChar: string; UpdateFields, SQL: TStrings);
    procedure GenModifySQL(const TableName, QuoteChar: string; KeyFields, UpdateFields, SQL: TStrings);
    procedure GenGetRecSQL(SelectSQL, KeyFields, SQL: TStrings);
    procedure GenerateSQL;
    procedure FillMemoFromList(Memo: TMemo; List: TListBox);
    procedure GenerateSQLViaDBService;
    procedure GetDataSetFieldNames;
    procedure GetTableFieldNames;
    procedure InitGenerateOptions;
    procedure InitUpdateTableNames;
    procedure SetButtonStates;
    procedure SelectPrimaryKeyFields;
    procedure SetDefaultSelections;
    procedure ShowWait(WaitMethod: TWaitMethod);
//    function TempTable: TMemTableEh;
  end;

{ TSQLParser }

  TSQLToken = (stSymbol, stAlias, stNumber, stComma, stEQ, stOther, stLParen,
    stRParen, stEnd);

  TSQLParser = class
  private
    FText: string;
    FSourcePtr: Integer;
    FTokenPtr: Integer;
    FTokenString: string;
    FToken: TSQLToken;
    FSymbolQuoted: Boolean;
    function NextToken: TSQLToken;
    function TokenSymbolIs(const S: string): Boolean;
    procedure Reset;
  public
    constructor Create(const Text: string);
    procedure GetSelectTableNames(List: TStrings);
    procedure GetUpdateTableName(var TableName: string);
    procedure GetUpdateFields(List: TStrings);
    procedure GetWhereFields(List: TStrings);
  end;

function EditDataDriverUpdateSQL(ADataDriver: TCustomSQLDataDriverEh): Boolean;

implementation

{$R *.dfm}

uses Dialogs, TypInfo, SQLDriverEditEh;

{ Global Interface functions }

function EditDataDriverUpdateSQL(ADataDriver: TCustomSQLDataDriverEh): Boolean;
begin
  with TUpdateSQLEditFormEh.Create(Application) do
  try
    DataDriver := ADataDriver;
    Result := Edit;
  finally
    Free;
  end;
end;

{ Utility Routines }

procedure GetSelectedItems(ListBox: TListBox; List: TStrings);
var
  I: Integer;
begin
  List.Clear;
  for I := 0 to ListBox.Items.Count - 1 do
    if ListBox.Selected[I] then
      List.Add(ListBox.Items[I]);
end;

function SetSelectedItems(ListBox: TListBox; List: TStrings): Integer;
var
  I: Integer;
begin
  Result := 0;
  ListBox.Items.BeginUpdate;
  try
    for I := 0 to ListBox.Items.Count - 1 do
      if List.IndexOf(ListBox.Items[I]) > -1 then
      begin
        ListBox.Selected[I] := True;
        Inc(Result);
      end
      else
        ListBox.Selected[I] := False;
    if ListBox.Items.Count > 0 then
    begin
      ListBox.ItemIndex := 0;
      ListBox.TopIndex := 0;
    end;
  finally
    ListBox.Items.EndUpdate;
  end;
end;

procedure SelectAll(ListBox: TListBox);
var
  I: Integer;
begin
  ListBox.Items.BeginUpdate;
  try
    with ListBox do
      for I := 0 to Items.Count - 1 do
        Selected[I] := True;
    if ListBox.Items.Count > 0 then
    begin
      ListBox.ItemIndex := 0;
      ListBox.TopIndex := 0;
    end;
  finally
    ListBox.Items.EndUpdate;
  end;
end;

{procedure GetDataFieldNames(Dataset: TDataset; ErrorName: string; List: TStrings);
var
  I: Integer;
begin
  with Dataset do
  try
    FieldDefs.Update;
    List.BeginUpdate;
    try
      List.Clear;
      for I := 0 to FieldDefs.Count - 1 do
        List.Add(FieldDefs[I].Name);
    finally
      List.EndUpdate;
    end;
  except
    if ErrorName <> '' then
      MessageDlg(Format('SSQLDataSetOpen', [ErrorName]), mtError, [mbOK], 0);
  end;
end;
}

procedure GetSQLTableNames(const SQL: string; List: TStrings);
begin
  with TSQLParser.Create(SQL) do
  try
    GetSelectTableNames(List);
  finally
    Free;
  end;
end;

procedure ParseUpdateSQL(const SQL: string; var TableName: string;
  UpdateFields: TStrings; WhereFields: TStrings);
begin
  with TSQLParser.Create(SQL) do
  try
    GetUpdateTableName(TableName);
    if Assigned(UpdateFields) then
    begin
      Reset;
      GetUpdateFields(UpdateFields);
    end;
    if Assigned(WhereFields) then
    begin
      Reset;
      GetWhereFields(WhereFields);
    end;
  finally
    Free;
  end;
end;

{ TSQLParser }

constructor TSQLParser.Create(const Text: string);
begin
  inherited Create;
  FText := Text;
  FText := FText + #0;
  FSourcePtr := 1;
  NextToken;
end;

function TSQLParser.NextToken: TSQLToken;
var
  P, TokenStart: Integer;
  QuoteChar: Char;
  IsParam: Boolean;

{$IFDEF CIL}
{$ELSE}
  function IsKatakana(const Chr: Byte): Boolean;
  begin
    Result := (SysLocale.PriLangID = LANG_JAPANESE) and (Chr in [$A1..$DF]);
  end;
{$ENDIF}

begin
  if FToken = stEnd then SysUtils.Abort;
  FTokenString := '';
  FSymbolQuoted := False;
  P := FSourcePtr;
  while (FText[P] <> #0) and (FText[P] <= ' ') do Inc(P);
  FTokenPtr := P;
  case FText[P] of
    'A'..'Z', 'a'..'z', '_', '$', #127..#255:
      begin
        TokenStart := P;
        if not SysLocale.FarEast then
        begin
          Inc(P);
          while FText[P] in ['A'..'Z', 'a'..'z', '0'..'9', '_', '.', '"', '$', #127..#255] do Inc(P);
        end
        else
          begin
            while TRUE do
            begin
              if (FText[P] in ['A'..'Z', 'a'..'z', '0'..'9', '_', '.', '"', '$'])
{$IFDEF CIL}
{$ELSE}
                 or IsKatakana(Byte(FText[P]))
{$ENDIF}
              then
                Inc(P)
              else
                if FText[P] in LeadBytes then
                  Inc(P, 2)
                else
                  Break;
            end;
          end;
        FTokenString := Copy(FText, TokenStart, P - TokenStart);

//        SetString(FTokenString, TokenStart, P - TokenStart);
        FToken := stSymbol;
      end;
    '''', '"':
      begin
        QuoteChar := FText[P];
        Inc(P);
        IsParam := FText[P] = ':';
        if IsParam then Inc(P);
        TokenStart := P;
        while not (FText[P] in [QuoteChar]) and not (FText[P] = #0) do Inc(P);
        FTokenString := Copy(FText, TokenStart, P - TokenStart);
//        SetString(FTokenString, TokenStart, P - TokenStart);
        Inc(P);
        Trim(FTokenString);
        FToken := stSymbol;
        FSymbolQuoted := True;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产suv一区二区三区88区| 亚洲国产三级在线| 91精品1区2区| 国产精一区二区三区| 亚洲国产精品久久久久秋霞影院| 欧美精品一区二区三区蜜臀| 欧美中文字幕一区二区三区| 国产伦精一区二区三区| 亚洲第一主播视频| 1000部国产精品成人观看| 欧美成人a视频| 欧美日韩在线播| 99精品国产热久久91蜜凸| 精品一区二区三区在线视频| 亚洲一区在线观看免费观看电影高清| 久久网站热最新地址| 91精品国产色综合久久ai换脸| www.亚洲激情.com| 国产福利一区二区三区视频 | 欧美精品丝袜中出| 日本成人中文字幕在线视频| 自拍偷拍国产精品| 26uuu精品一区二区| 欧美一区二区三区四区五区| 一本大道av一区二区在线播放 | 麻豆精品久久久| 日韩视频永久免费| 国产99精品国产| 久久se精品一区二区| 日韩高清一区在线| 亚洲午夜一区二区三区| 成人免费在线视频| 国产精品视频第一区| 国产欧美日韩精品一区| 久久久99精品久久| 久久久精品综合| 久久久国产午夜精品| 国产欧美视频在线观看| 久久综合五月天婷婷伊人| 日韩精品专区在线影院重磅| 欧美剧情片在线观看| 欧美熟乱第一页| 欧美羞羞免费网站| 欧美性猛片aaaaaaa做受| 色狠狠一区二区三区香蕉| 成人午夜精品在线| jlzzjlzz欧美大全| 日本福利一区二区| 欧美午夜精品久久久久久超碰| 国产欧美一区二区精品性色| 亚洲免费av网站| 国产日产欧美一区| 国产午夜亚洲精品羞羞网站| 欧美国产精品一区| 国产精品区一区二区三| 亚洲欧美一区二区在线观看| 亚洲少妇30p| 亚洲尤物视频在线| 午夜精品免费在线| 捆绑紧缚一区二区三区视频 | 成人午夜在线免费| 91在线一区二区| 欧美三级午夜理伦三级中视频| 91精品国产入口| 久久精品欧美一区二区三区不卡| 欧美国产日韩在线观看| 亚洲免费观看视频| 日韩av一区二区三区四区| 韩国精品主播一区二区在线观看| 国产成人精品一区二区三区网站观看| 99精品视频一区二区三区| 91在线国产福利| 欧美日本在线视频| 久久久精品人体av艺术| 亚洲视频一区二区在线观看| 香蕉av福利精品导航| 成人免费毛片嘿嘿连载视频| 午夜精品成人在线视频| 在线不卡欧美精品一区二区三区| 7777精品久久久大香线蕉| 日韩欧美在线1卡| 久久亚洲欧美国产精品乐播| 亚洲乱码国产乱码精品精98午夜 | 精品国产污网站| 亚洲图片欧美激情| 日韩中文字幕1| 成人h版在线观看| 欧美一区二区在线观看| 亚洲视频网在线直播| 蜜桃传媒麻豆第一区在线观看| 不卡电影一区二区三区| 欧美一级艳片视频免费观看| 中文在线一区二区| 日本亚洲一区二区| 一本久久综合亚洲鲁鲁五月天 | 亚洲美女偷拍久久| 韩国av一区二区三区四区| 91久久免费观看| 久久嫩草精品久久久精品一| 午夜不卡在线视频| 成人国产一区二区三区精品| 精品免费99久久| 亚洲一区二区三区中文字幕| 成人涩涩免费视频| 日韩限制级电影在线观看| 亚洲人成在线观看一区二区| 国产精品99久久久久久有的能看| 欧美日本一区二区三区四区| 在线中文字幕一区二区| 精品国产乱码久久久久久牛牛| 夜夜嗨av一区二区三区| 白白色 亚洲乱淫| 精品久久久久久久久久久久久久久久久| 亚洲激情五月婷婷| 日韩美女天天操| 三级在线观看一区二区| 欧美中文字幕久久| 136国产福利精品导航| 国产91高潮流白浆在线麻豆| 亚洲精品在线免费观看视频| 午夜精品123| 欧美色电影在线| 亚洲日本在线天堂| 99久久久无码国产精品| 国产精品家庭影院| 成人性生交大片免费看中文 | 亚洲成av人片一区二区| 色综合 综合色| 综合激情网...| 成年人午夜久久久| 国产精品妹子av| 粉嫩在线一区二区三区视频| 久久日韩粉嫩一区二区三区| 国内欧美视频一区二区| 欧美精品一区二区三区很污很色的| 奇米影视一区二区三区| 日韩一区二区在线免费观看| 免费成人在线影院| 精品久久久久99| 国产专区欧美精品| 国产欧美一区二区精品性| 成人开心网精品视频| 国产精品午夜春色av| caoporn国产一区二区| 亚洲欧美激情视频在线观看一区二区三区 | 欧美电视剧在线看免费| 免费在线欧美视频| 精品女同一区二区| 国产成人精品亚洲日本在线桃色| 亚洲国产电影在线观看| va亚洲va日韩不卡在线观看| 亚洲精品视频在线观看网站| 欧美视频一二三区| 男女性色大片免费观看一区二区 | 韩国av一区二区| 国产欧美一区二区精品仙草咪| eeuss影院一区二区三区| 亚洲精品日日夜夜| 91麻豆精品国产91| 狠狠色丁香婷婷综合久久片| 中文字幕乱码日本亚洲一区二区 | 亚洲黄色免费网站| 欧美亚洲禁片免费| 看电视剧不卡顿的网站| 久久精品亚洲精品国产欧美| 91美女精品福利| 日日摸夜夜添夜夜添精品视频| 欧美精品一区二区三区蜜桃视频| 成年人午夜久久久| 亚洲成人av电影| 国产婷婷一区二区| 欧美性大战xxxxx久久久| 老司机精品视频一区二区三区| 中文字幕乱码亚洲精品一区| 欧美日韩中文另类| 国产综合成人久久大片91| 亚洲欧洲一区二区三区| 欧美精品久久天天躁| 国产一区二区成人久久免费影院| 亚洲手机成人高清视频| 欧美一个色资源| 99精品黄色片免费大全| 卡一卡二国产精品| 亚洲视频在线观看三级| 精品日韩99亚洲| 欧美主播一区二区三区美女| 国产裸体歌舞团一区二区| 亚洲一区二区三区四区在线观看 | 在线中文字幕一区二区| 国内偷窥港台综合视频在线播放| 亚洲欧洲另类国产综合| 欧美一区午夜精品| 99久久久无码国产精品| 狠狠狠色丁香婷婷综合激情| 亚洲图片欧美综合| 国产精品理论片在线观看| 日韩精品一区在线| 欧美午夜电影一区| 99这里只有精品| 国产一区二区三区免费观看|