作者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/cn.aspx?n=bbs/EzHotKey/M.1438325446.A.63E.html
1F:推 GodIsland: 不明觉厉,同是用AI给推,这个版都快变AH版了@@ 08/01 00:40
2F:推 WhiteComet: 真的 AI的讨论好少 比起来 按精还多一些 07/02 21:06