全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3776
推到 Plurk!
推到 Facebook!

sql formatter

 
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-28 15:14:40 IP:122.116.xxx.xxx 訂閱
原創的 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-28 15:34:40 IP:122.116.xxx.xxx 訂閱


不知如何貼圖, 也不知如何同一時間上傳兩個檔, 回覆又沒法上傳檔案....

會了...

教師節 加 颱風天 (又強又密的 薔蜜)
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-09-28 15:39:03, 註解 無‧
st33chen 重新編輯於 2008-09-28 16:11:23, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-28 15:41:19 IP:59.126.xxx.xxx 訂閱
HI, 大大,您可以先將您的作品或是要顯示的圖都先上傳至下面這兩區中,然後在您發表的文章裡使用超連結
連過來即可以同篇文章中發表多檔多圖的方式,詳情請看【幫助

會員作品發表區(限本人創作發表)
發表文章中的圖檔存放區


===================引 用 st33chen 文 章===================


不知如何貼圖, 也不知如何同一時間上傳兩個檔, 回覆又沒法上傳檔案....
------
價值的展現,來自於你用哪一個角度來看待它!!
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-09-28 15:44:19 IP:59.126.xxx.xxx 訂閱
剛回覆完就看到您改好了,恭禧,不過~~~ 好大的圖呀,要考慮縮一下嗎?

另外,建議您可以將發表的文章,發表至 會員作品發表區(限本人創作發表)
或是請 taishyang 副站大將您的文章移到裡面去可以~! 謝謝您的分享
------
價值的展現,來自於你用哪一個角度來看待它!!
mayingjie313
一般會員


發表:7
回覆:11
積分:3
註冊:2008-09-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-05 16:49:47 IP:222.247.xxx.xxx 訂閱
我现在也在用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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-06 15:43:31 IP:122.116.xxx.xxx 訂閱
您好,

謝謝您的想法, 不過, 執行一段 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-17 15:43:39 IP:122.116.xxx.xxx 訂閱
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 重新編輯於 2008-10-17 15:46:21, 註解 無‧
st33chen 重新編輯於 2008-10-17 15:47:13, 註解 無‧
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-21 10:55:26 IP:122.116.xxx.xxx 訂閱
最近 威力彩 彩金高至 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 (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-21 11:02:23, 註解 無‧
st33chen 重新編輯於 2008-10-21 11:08:12, 註解 無‧
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-10-23 10:46:18 IP:59.125.xxx.xxx 訂閱
經下載後執行,完全看不到畫面,可以請在檢查看看嗎??THANKS
編輯記錄
chih 重新編輯於 2008-10-23 10:47:59, 註解 無‧
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-10-23 14:15:15 IP:122.116.xxx.xxx 訂閱
對不起, 原來是因為加 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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-10-28 22:13:37 IP:122.116.xxx.xxx 訂閱
終於完成 新 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-05-05 13:53:53 IP:61.219.xxx.xxx 訂閱
這個程式還可以用嗎?小弟下載下來總是出現錯誤??
另外,可以請大大教一下小弟,格式化語句的觀念想法該從哪裡開始?
小弟正想要寫一個這樣的功能出來@@"
------
永遠都是新手
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-05-05 18:24:34 IP:122.116.xxx.xxx 訂閱
您好,

請問是什麼問題, 有 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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-05-06 09:10:04 IP:61.219.xxx.xxx 訂閱
首先,小弟要開啟的時候會先開一陣子,可能是電腦等級不佳,在開啟時出現暫時lag現象了>"<
然後開啟後會出現這個錯誤訊息

接著出現的畫面沒有地方可以貼上sql

如果要關掉程式則會出現這個訊息,和第一個訊息應該是一樣的

確定後並沒有關閉,所以再按一下關閉,結果就出現這個訊息

------
永遠都是新手
系統時間:2024-05-15 12:28:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!