取出SQL中使用的tables |
尚未結案
|
degr
一般會員 發表:22 回覆:36 積分:21 註冊:2002-03-25 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
degr 你好
參考以下連結,應該是你要的
http://delphi.ktop.com.tw/topic.php?topic_id=32752
但唯一的不幸是,除了自行分析SQL指令之外,目前好像沒有解決方案,至於要自行解析SQL指令,是滿麻煩的事,以下幾個元件有此功能但都不僅理想,你可參考看看或在本討論區下SQL Parser搜尋 http://delphi.ktop.com.tw/topic.php?topic_id=17472
http://delphi.ktop.com.tw/topic.php?topic_id=17469
http://delphi.ktop.com.tw/topic.php?topic_id=17629
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
degr 你好: 曾經改寫 DBCommon 的 GetTableNameFromSQL function, 參考看看.
uses DBCommon; procedure GetSQLTableNames(const SQL:string;var SQLTableList: TStrings); var TableStart,FSelect: boolean; Msg,TableName: string; CurSection: TSQLToken; pMsg: PChar; begin Msg := StringReplace(SQL, #10#10, #32, [rfReplaceAll]); Msg := StringReplace(Msg, #13#10, #32, [rfReplaceAll]); FSelect := (pos('select'#32,ansilowercase(Msg))=1) and (pos('into'#32,ansilowercase(Msg))=0); SQLTableList.Clear; if FSelect then begin pMsg := PChar(Msg); CurSection := stUnknown; TableStart := False; while (CurSection<>stEnd) do begin CurSection := NextSQLToken(pMsg , TableName, CurSection); if (CurSection=stFrom) then TableStart := True; if (CurSection in [stWhere,stUnion]) then TableStart := False; if (TableStart) and (CurSection in [stTableName,stFieldName]) and (SQLTableList.IndexOf(TableName)=-1) then SQLTableList.Add(TableName); end; end; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |