作者yohoboy (小寶包是天使與惡魔)
看板EzHotKey
標題[-AI-] 豬頭記帳本資料庫整理
時間Fri Jul 31 14:50:44 2015
----- 我是分隔線------
有在使用豬頭記帳本的記錄很多筆後,資料庫會因增減而肥大
並使資料蒐尋緩慢,透過這程式來瘦身及資料排序以提高效率
----- 我是分隔線------
#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://webptt.com/m.aspx?n=bbs/EzHotKey/M.1438325446.A.63E.html
1F:推 GodIsland: 不明覺厲,同是用AI給推,這個版都快變AH版了@@ 08/01 00:40
2F:推 WhiteComet: 真的 AI的討論好少 比起來 按精還多一些 07/02 21:06