[-AI-] 豬頭記帳本資料庫整理

看板EzHotKey作者 (小寶包是天使與惡魔)時間10年前 (2015/07/31 14:50), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
----- 我是分隔線------ 有在使用豬頭記帳本的記錄很多筆後,資料庫會因增減而肥大 並使資料蒐尋緩慢,透過這程式來瘦身及資料排序以提高效率 ----- 我是分隔線------ #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <SQLite.au3> #include <SQLite.dll.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <Debug.au3> Global $SQLite_Data_path Example() redata() Func Example() ; 創建一個局部恒定變量, 保存 FileOpenDialog() 的消息顯示文本. Local Const $sMessage = "選擇豬頭記帳本資料庫" ; 顯示"打開對話框",顯示可供選擇的文件列表. Local $sFileOpenDialog = FileOpenDialog($sMessage, @MyDocumentsDir & "\", "資料庫 (*.sqlite)", $FD_FILEMUSTEXIST + $FD_MULTISELECT) If @error Then ; 顯示發生錯誤消息. MsgBox($MB_SYSTEMMODAL, "", "沒有選擇文件.") ; 更改工作目錄 (@WorkingDir) 到腳本目錄的位置, 并設置為 FileOpenDialog() 最后訪問的文件夾. FileChangeDir(@ScriptDir) Else ; 更改工作目錄 (@WorkingDir) 到腳本目錄的位置, 并設置為 FileOpenDialog() 最后訪問的文件夾. FileChangeDir(@ScriptDir) ; 替換 FileOpenDialog() 返回字符串的分隔符 "|" 為 @CRLF. $sFileOpenDialog = StringReplace($sFileOpenDialog, "|", @CRLF) ; 顯示多選擇的文件列表. ;MsgBox($MB_SYSTEMMODAL, "", "您選擇了以下文件:" & @CRLF & $sFileOpenDialog) $SQLite_Data_Path = $sFileOpenDialog EndIf EndFunc ;==>Example Func redata() Global $hQuery, $aRow, $tempmno2, $i=1, $j=0, $number, $hGUI Global $k Global $mno2, $uno2, $cno2, $sno2, $spend2, $date2, $note2, $mode2 ;建立顯示視窗 $hGUI=GUICreate("重整進度", 220, 100, 100, 200) Local $idProgressbar1 = GUICtrlCreateProgress(10, 50, 200, 20) GUICtrlSetColor(-1, 32250); 不支持 Windows XP 樣式 ;$SQLite_Data_Path = "money_5.1.0.sqlite" ;$SQLite_Data_Path = "money.sqlite" _SQLite_Startup () _SQLite_Open ($SQLite_Data_Path);開啟資料庫檔案 ;資料總筆數 _SQLite_Query(-1, "SELECT COUNT(mno) FROM money ;",$hQuery) ;查詢資料,來源為 money - mno,並存入$hQuery 變數 While _SQLite_FetchData ($hQuery, $aRow,False,False) = $SQLITE_OK $tempmno2 = $aRow[0] WEnd ;MsgBox (0,"總數","總數:" & $tempmno2) GUICtrlCreateLabel("資料總筆數:" & $tempmno2 , 20, 10) GUICtrlCreateLabel("資料更新筆數:", 20, 75) Local $k=GUICtrlCreateLabel($i,105,75,100,20) GUISetState(@SW_SHOW) ;建立money2 資料表 _SQLite_Exec(-1,"CREATE TABLE `money2` (`mno` INTEGER PRIMARY KEY NOT NULL DEFAULT '', `uno` INTEGER NOT NULL DEFAULT '', `cno` INTEGER NOT NULL DEFAULT '', `sno` INTEGER NOT NULL DEFAULT '', `spend` INTEGER NOT NULL DEFAULT '', `date` DATETIME NOT NULL DEFAULT '', `note` TEXT DEFAULT '', `mode` TEXT NOT NULL DEFAULT '現金支出');") ;查詢資料按日期排列 _SQLite_Query(-1, "SELECT * FROM money ORDER BY date ASC" ,$hQuery) While _SQLite_FetchData ($hQuery, $aRow,False,False) = $SQLITE_OK $mno2 = $aRow[0] $uno2 = $aRow[1] $cno2 = $aRow[2] $sno2 = $aRow[3] $spend2 = $aRow[4] $date2 = $aRow[5] $note2 = $aRow[6] $mode2 = $aRow[7] $mno2=$i ;將讀取的資料逐一寫入 money2 資料表內 _SQLite_Exec(-1, "Insert into money2 values ('" & $mno2 & "','" & $uno2 & "','" & $cno2 & "','" & $sno2 & "','" & $spend2 & "','" & $date2 & "','" & $note2 & "','" & $mode2 & "');") $j = ($i / $tempmno2) *100 GUICtrlSetData($idProgressbar1, $j) GUICtrlSetData($k, $i) $i = $i + 1 WEnd ;整理後將 money 資料表刪除 _SQLite_Exec(-1,"DROP TABLE money ;") ;將money2 更名成 money _SQLite_Exec(-1,"ALTER TABLE money2 RENAME TO money ;") ;將資料庫空值資料釋放 _SQLite_Exec(-1, "vacuum" ) ;完成資料整理 MsgBox(0,"資料重整","資料已重整完畢") GUIDelete($hGUI) ;釋放資料庫 _SQLite_Close () _SQLite_Shutdown () EndFunc -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.154.130 ※ 文章網址: https://www.ptt.cc/bbs/EzHotKey/M.1438325446.A.63E.html

08/01 00:40, , 1F
不明覺厲,同是用AI給推,這個版都快變AH版了@@
08/01 00:40, 1F

07/02 21:06, , 2F
真的 AI的討論好少 比起來 按精還多一些
07/02 21:06, 2F
文章代碼(AID): #1Lknh6O- (EzHotKey)