sql formatter |
|
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
原創的 sql formatter :
後學工作的主要工具是 delphi oracle, 有 sql 經驗的先進應該都有 將sql statement格式化的需要. 我自己常有四種情形需要將 sql statement 格式化(為了好看, 好 debug ): 1. delphi 程式中寫 query 的 sql.text : query1.sql.text :='select * from aaa where kfld=''' wkfld ''' and .......; 2. delphi 的 query 元件寫 sql : select * from aaa where kfld = :kfld and ...... 3. oracle 的 stored procedure, stored function, 或 trigger 寫 sql : select * from aaa where kfld = xkfld and ... 4. delphi 中用 showmessage(query1.sql.text) 時, 整個 sql statement 是一列文字 若該 sql 很複雜, 有 union, 或多層的 sub sql , 又要從中取部份 sql 以執行做 debug 時. 要 debug sql statement 時常用 plsql developer 或 韓國人寫的 sqltools : 1. plsql developer 在 oracle 的 ddl 操作, stored procedure 等的 debug 都很好, 但是沒有 sql format 功能, 而且執行 sql 時無法填入變數 2. sqltools 有 ddl 操作, 但是無 stored procedure 等的 debug, 雖有 sql format功能, 但是每碰到逗點就斷列, 使得 sql 變成太多列, 又, 雖可以在執行 sql 時填入變數, 但限於 :kfld 型. 我用起來不是很方便, 於是想自己寫一個, 先取代 sqltools, 如果能力可以, 最好能代替 plsql developer. 附檔 formatsql.exe 是執行檔, formatsql2.gif 是簡單的說明圖, 說明很簡單, 有興趣的先進們應該會看得懂. 這程式對我自己還满可以用的, 但不知道能否符合各位先進的需求, 所以, 有任何寶貴意見, 歡迎不吝指正. 謝謝. 另外, UI 也沒很漂亮, 海涵. =============================================================================================== 2008-10-03 新版 1. memo1 改成 synedit 的 synmemo 元件, 有列號及保留字以藍色顯示, 滑鼠 drag 列號可以 mark 部份 sql 語句, debug 時還满好用的 2. 按鈕改在右邊, 感覺比較順手, (因為用右手執滑鼠) 3. format 部份改寫, 先將 sql 語句 parse 後再組回來(舊法仍保留, 舊法中非常用的保留字可能無法改成全大寫或全小寫) 4. where 子句中 = < > in between 等對齊(舊法原無對齊, 後來改成 = < > in 能對齊, 但 between 無) 還要再加油: 目前想到的 to-do list 為 : 1. sql 語句區中的 find, replace 2. 若 exec 錯誤, 指出錯誤地及原因 ( oracle ) 歡迎提供意見, thank you in advance. ================================================================= 2008-10-04 : 加 format UPDATE 句子的功能 ================================================================= 2008-10-17 : (加) find 功能, (改)PRFX不處理保留字, 例: 以W為PRFX時, WHERE 不會被當成參數 (加) 指出 單引號 或 左右括號 不對稱的錯誤點 ================================================================= 2008-10-21 : (加) mysql (加) oracle : 指出錯誤點 ================================================================= 2008-10-28 : (加) 多個 SQL及DBGRID 窗, 各有各的 DB ================================================================= 2008-10-31: (改) 原本正常的指出 sql statement 錯誤點(oracle) 在改成 multi-page 時沒改好變成失效, 現已改好. compile 改成不選 build with runtime packages, 檔案變大, 但沒有 d6 的環境也可執行. ================================================================= 2009-05-06 有網友反應程式不能執行, 因故先把貼回舊版的.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. 編輯記錄
st33chen 重新編輯於 2008-09-28 20:01:31, 註解 無‧
st33chen 重新編輯於 2008-10-03 15:47:06, 註解 無‧ st33chen 重新編輯於 2008-10-03 15:55:33, 註解 無‧ st33chen 重新編輯於 2008-10-04 21:27:18, 註解 無‧ st33chen 重新編輯於 2008-10-05 14:11:14, 註解 無‧ st33chen 重新編輯於 2008-10-11 07:52:29, 註解 改正bug : 新法無法解析 or 保留字‧ st33chen 重新編輯於 2008-10-17 15:36:34, 註解 (加) find 功能, (改)PRFX不處理保留字, 例: 以W為PRFX時, WHERE 不會被當成參數‧ st33chen 重新編輯於 2008-10-17 20:38:40, 註解 (改)FIND功能的小BUG ‧ st33chen 重新編輯於 2008-10-17 22:43:27, 註解 (加) 指出 單引號 或 左右括號 不對稱的錯誤點‧ st33chen 重新編輯於 2008-10-21 10:50:15, 註解 (加) mysql (加) oracle 指出錯誤點‧ st33chen 重新編輯於 2008-10-21 11:00:15, 註解 無‧ st33chen 重新編輯於 2008-10-22 10:48:03, 註解 修 部份 bug‧ st33chen 重新編輯於 2008-10-22 12:35:41, 註解 some bugs‧ st33chen 重新編輯於 2008-10-23 14:10:56, 註解 無‧ st33chen 重新編輯於 2008-10-28 21:58:16, 註解 無‧ st33chen 重新編輯於 2008-10-30 22:10:07, 註解 bug fix‧ st33chen 重新編輯於 2008-10-31 16:37:21, 註解 buf fix (原本可以的, 改成 多頁 時沒改好, 現修正回來)‧ st33chen 重新編輯於 2008-10-31 16:45:33, 註解 無‧ st33chen 重新編輯於 2008-10-31 17:49:43, 註解 無‧ st33chen 重新編輯於 2009-05-06 19:22:45, 註解 無‧ st33chen 重新編輯於 2009-05-07 08:53:52, 註解 無‧ |
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
![]() 不知如何貼圖, 也不知如何同一時間上傳兩個檔, 回覆又沒法上傳檔案.... 會了... 教師節 加 颱風天 (又強又密的 薔蜜)
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
careychen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
HI, 大大,您可以先將您的作品或是要顯示的圖都先上傳至下面這兩區中,然後在您發表的文章裡使用超連結
連過來即可以同篇文章中發表多檔多圖的方式,詳情請看【幫助】 會員作品發表區(限本人創作發表) 發表文章中的圖檔存放區 ===================引 用 st33chen 文 章=================== 不知如何貼圖, 也不知如何同一時間上傳兩個檔, 回覆又沒法上傳檔案....
------
價值的展現,來自於你用哪一個角度來看待它!! |
careychen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
剛回覆完就看到您改好了,恭禧,不過~~~ 好大的圖呀,要考慮縮一下嗎?
另外,建議您可以將發表的文章,發表至 會員作品發表區(限本人創作發表) , 或是請 taishyang 副站大將您的文章移到裡面去可以~! 謝謝您的分享
------
價值的展現,來自於你用哪一個角度來看待它!! |
mayingjie313
一般會員 ![]() ![]() 發表:7 回覆:11 積分:3 註冊:2008-09-23 發送簡訊給我 |
我现在也在用DELPHI做一个C的编译器,他运行后会产生一个.lst的文件 错误都在上面显示了,可以把这个文件读出来就可以了,你这个EXEC后会不会也生成一个文件说明错误呢?
============引 用 st33chen 文 章=================== 還要再加油: 目前想到的 to-do list 為 : 1. sql 語句區中的 find, replace 2. 若 exec 錯誤, 指出錯誤地及原因 ( oracle ) 歡迎提供意見, thank you in advance. =================================================================
編輯記錄
mayingjie313 重新編輯於 2008-10-05 16:52:23, 註解 無‧
|
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
謝謝您的想法, 不過, 執行一段 sql 和 compile 一個 c 程式的需求可能不一樣, 所以我想做的是 執行一段 sql , 若有錯馬上指出錯處及原因, 有可能一段 sql 有許多錯處, 但先指出第一個錯即可. 整個 compile 並指出所有錯誤, 對我來說, 超出能力範圍了, 而且並非我工作所需. 倒是您寫 c compiler 可真是大工程啊. ===================引 用 mayingjie313 文 章=================== 我现在也在用DELPHI做一个C的编译器,他运行后会产生一个.lst的文件 错误都在上面显示了,可以把这个文件读出来就可以了,你这个EXEC后会不会也生成一个文件说明错误呢? ============引 用 st33chen 文 章=================== 還要再加油: 目前想到的 to-do list 為 : 1. sql 語句區中的 find, replace 2. 若 exec 錯誤, 指出錯誤地及原因 ( oracle ) 歡迎提供意見, thank you in advance. =================================================================
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
1. 完成 to-do list 的第一項 (sql 語句區中的 find, replace.)
2. 修改 bug : 使用 prfx 時, 保留字也會被當成參數 (例如 : 以 w 為prfx 時, 所有 w 開頭的單字皆會被當成參數, 在 exec 時會要求輸入值), 改成跳開所有保留字. 另, to-do list 第二項 ( 若 exec 錯誤, 指出錯誤地及原因 ( oracle )) 也完成了, 測試中 ... 新的 to-do list : 1. 多個 sql 語句區 2. 結果區可以修改資料
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
最近 威力彩 彩金高至 15E
又想把以前寫過的 分析軟体拿出來 review 一下, 那是用 mysql 的 發覺 常用的免費 mysql gui 都沒有動態輸入變數的功能, 而這功能又非常好用, 所以就先改寫 formatsql, 使能處理 mysql 功能, (BDE 好像不能設定 MYSQL, 至少我不會, 又不想透過 ODBC), 所以用MYSQL元件處理 MYSQL 又 ORACLE 指出錯誤點也測得差不多了, 登入時 ORACLE 仍是架在 BDE 上, 執行時, 程式會判斷當時使用的 DB 是否為 ORACLE, 若是, 則使用 改過的 DELPHIOCI 元件 若有錯誤傳回錯誤點, 然後在 SQL 語句區將 錯誤的TOKEN句 MARK 起來.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
對不起, 原來是因為加 mysql 功能時, 忘了把 mysqlserver1.connected 設回 false;
所以程式一開就檢查 mysql, 找不到就..... 已經重傳, 謝謝前輩的 feedback ===================引 用 chih 文 章=================== 經下載後執行,完全看不到畫面,可以請在檢查看看嗎??THANKS
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-23 14:16:28, 註解 無‧
|
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
終於完成 新 to-do list 的第一項, 多個 sql/dbgrid 窗,
各有各的 db, 也就是可以 page1 是 oracle, page2 是 mysql, page3 是 其他 bde 這功能請按新增的 新SQL 按鈕 . 因為工作上並無這種 mdi 需求, 所以這回是第一次寫這種程式, 也所以一波三折 1. 我是先用 delphi 的 mdi, 但測了許久, 都達不到所想要的畫面 2. 後來改試 pagecontrol/tabsheet 而用 一個 form 貼入 tabsheet 中, 雖然可行, 但每新增 一個頁面時, 整個畫面(包括 windows 的桌面)都會重刷, 造成短暫的視覺障礙 3. 後來再改試 pagecontrol/tabsheet 而用一個 frame 貼入 tabsheet 中, 雖仍有一點點重刷的感覺 但效果好很多, 應該是可以接受的程度了. 聽說還有一種 tnotebook 可以用, 以後有機會再試. 鄉親啊, 參考一下
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
Reiji
初階會員 ![]() ![]() 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
|
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
請問是什麼問題, 有 message 嗎 又, 說來汗顏, 這支程式後來自己用複雜一點的語句 或是一些比較新的語法 還是沒法 format 得很漂亮, 又沒時間改, -_- 記得這程式用二種方法做 1. 把整個 sql 當成一個字串, 然後用字串替代的方式做 折列(換行) 及 加領頭空格 2. 先 parse sql 語句成一個個 word, 然後再依某套規則組回來 用 recursive function 可能會節省一些時間 (但往往設計 recursive function 本身還頗花時間的) 參考一下
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
Reiji
初階會員 ![]() ![]() 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |