两个示例打包下载地址:
SQLiteDB数据库查看器代码片段:
; ====================================================================================================================== ;author: paomian ;Version: V1.0.0 ; ====================================================================================================================== ; ====================================================================================================================== ; 编译声明(勿删) ; ====================================================================================================================== ;@Ahk2Exe-AddResource *10 index.html ;@Ahk2Exe-AddResource *10 %A_ScriptDir%\assets\bootstrap\bootstrap.min.css ;@Ahk2Exe-AddResource *10 %A_ScriptDir%\assets\bootstrap\jquery.min.js ;@Ahk2Exe-AddResource *10 %A_ScriptDir%\assets\bootstrap\bootstrap.min.js ;@Ahk2Exe-AddResource *10 %A_ScriptDir%\assets\bootstrap\play-fill.svg ;@Ahk2Exe-AddResource *10 %A_ScriptDir%\assets\imgs\20231205093500.ico ; ====================================================================================================================== ; 依赖与变量声明 ; ====================================================================================================================== #Include lib/Class_SQLiteDB.ahk #Include lib/EasyIni.ahk #Include lib/Neutron.ahk ;数据库配置 全局变量 global DB := new SQLiteDB ;加载配置文件 vIni := class_EasyIni("config.ini") global appName := vIni.system.appName DBFileName := vIni.soft.sqlitePath if !FileExist(vIni.soft.sqlitePath) { FileSelectFile, 文件路径变量, , ,请选择数据库文件,*.db if (文件路径变量="") ExitApp DBFileName := vIni.soft.sqlitePath := 文件路径变量 vIni.Save() } ;默认表 全局变量 global defaultTable := vIni.soft.defaultTable ;html页面配置 global neutron := new NeutronWindow() neutron.Load("index.html") neutron.Gui("+LabelNeutron") ; ====================================================================================================================== ; 主要处理流程 ; ====================================================================================================================== ;打开数据库 If !DB.OpenDB(DBFileName) { MsgBox, 16, SQLite Error, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode ExitApp } ;获取总条数 totalCount := getTableTotalNum() ;数据量过大时,使用加载条 if (totalCount >= 1000) { Progress, ON , , , loading ..., neutron.Show("w800 h400") } ;查询表数据 dataIterators := getDbDataIterators() ;数据量过大时,使用加载条 if (totalCount >= 1000) { Progress, 90 } ;渲染thead buildThead(dataIterators) ;渲染tbody buildTbody(dataIterators) ;释放查询的结果 dataIterators.Free() neutron.Show("w800 h600") ;进度条关闭 Progress, OFF return ; ====================================================================================================================== ; 事件监听 ; ====================================================================================================================== ;关闭页面时,退出 NeutronClose: ExitApp return ; 按ESC键时, 退出脚本: #If isThisWinActive() Esc::ExitApp ;禁用 鼠标右键 #If isThisWinActive() RButton:: return ; ====================================================================================================================== ; 方法 ; ====================================================================================================================== ;构建数据库数据对象 取值dataList[i,j] buildDbDataList(Iterators) { dataList := Object() ArrayCount = 0 If (Iterators.HasRows) { If (Iterators.Next(Row) < 1) { MsgBox, 16, %A_ThisFunc%, % "Msg:`t" . Iterators.ErrorMsg . "`nCode:`t" . Iterators.ErrorCode Return } Loop { ;循环字段,给对象赋值 Loop, % Iterators.ColumnCount { ;二维数组 dataList[ArrayCount, A_Index] := Row[A_Index] } ArrayCount += 1 RC := Iterators.Next(Row) } Until (RC < 1) } Return dataList } ;构建HEAD ;neutron执行对象,Iterators迭代器对象 buildThead(Iterators) { titleList := Object() ;查出标题 Loop, % Iterators.ColumnCount { titleList[0, A_Index] := Iterators.ColumnNames[A_Index] } ;渲染thead for row, data in titleList { tr := neutron.doc.createElement("tr") for col, cell in data { th := neutron.doc.createElement("th") th.innerText := cell tr.appendChild(th) } neutron.qs("#db_table_body>thead").appendChild(tr) } } ;构建BODY ;neutron执行对象,Iterators迭代器对象 buildTbody(Iterators) { db_table_body := buildDbDataList(Iterators) html := "" for row, data in db_table_body { html .= "<tr>" for col, cell in data html .= neutron.FormatHTML("<td>{}</td>", cell) html .= "</tr>" } neutron.qs("#db_table_body>tbody").innerHTML := html } ;获取表总数 getTableTotalNum() { SQL := "SELECT COUNT(*) FROM " defaultTable ";" SB_SetText("SQLite_GetTable : " . SQL) If !DB.GetTable(SQL, Result) { MsgBox, 16, SQLite Error: GetTable, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode } If (Result.HasRows) { Result.Next(Row) Loop, % Result.ColumnCount { totalCount := Row[A_Index] } } Return totalCount } ;获取表数据迭代器 getDbDataIterators() { SQL := "SELECT * FROM " defaultTable ";" ;SB_SetText("Query : " . SQL) If !DB.Query(SQL, Iterators) { MsgBox, 16, SQLite Error: Query, % "Msg:`t" . Iterators.ErrorMsg . "`nCode:`t" . Iterators.ErrorCode } Return Iterators } ;重新加载Tbody reloadTbody(neutron) { dbDataList := getDbDataIterators() buildTbody(dbDataList) } ;判断是否当前窗口活动 isThisWinActive() { MouseGetPos, , , id WinGetTitle, title, ahk_id %id% if (appName = Title) { return 1 } else { return 0 } } ;数据库执行SQL execSqlWithDB(neutron, event, execSQL) { ;用户不输入时,直接返回 if (execSQL = null) { return } If !DB.Exec(execSQL) { MsgBox, 16, SQLite Error, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode } else { SQL := "SELECT * FROM " defaultTable ";" SB_SetText("Query : " . SQL) If !DB.Query(SQL, RecordSet) { MsgBox, 16, SQLite Error: Query, % "Msg:`t" . RecordSet.ErrorMsg . "`nCode:`t" . RecordSet.ErrorCode } reloadTbody(neutron) } }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)