DB信息:就是手动记录历史DB用的按钮,开始是想打开一个新的数据库就自动记录,后来发现更多的都是临时操作一下,不值得记录,所以干脆做成一个按钮来记录。
这个功能相对比较简单,就是执行相应的sql语句。
保存DBPath:
'保存当前打开的DBPath到DBOperate.sqlite
Sub rbSaveDBPath(control As IRibbonControl)
If VBA.Len(MPublic.scbInput) Then
If VBA.MsgBox("DB描述:" & MPublic.scbInput & vbNewLine & "DBPath:" & DB_Info.Path & vbNewLine & "确认按此添加?", vbYesNo) = vbYes Then
If MPublic.dbinfo.ExecuteNonQuery("insert into dbpath(描述, path, SType) values('" + MPublic.scbInput + "','" + DB_Info.Path + "', '" + VBA.CStr(MPublic.dbinfo.GetDBType) + "')") Then
MsgBox MPublic.dbinfo.GetErr
End If
End If
Else
MsgBox "请在Input中输入DB的描述。"
End If
End Sub
这里做了一个这样的处理:因为直接记录数据库的文件名或者udl文件名,可能不大好记忆,所以需要在customUI的comboBox(scbInput)里先输入一个描述。 保存SQL:
'保存Input中的sql到DBOperate.sqlite
Sub rbSaveSQL(control As IRibbonControl)
If VBA.Len(MPublic.scbInput) = 0 Then
MsgBox "请在Input中输入sql语句。"
Exit Sub
End If
Dim s描述 As String
s描述 = Application.InputBox("SQL:" & VBA.Left$(MPublic.scbInput, 255 - 4 - 2 * 2 - 30) & vbNewLine & vbNewLine & "输入此sql的描述,保存到DBOperate.sqlite。", Type:=2)
If s描述 = "False" Then Exit Sub
Dim strsql As String
'如果里面有“'”,需要替换一下
strsql = MPublic.scbInput
If VBA.InStr(strsql, "'") Then strsql = VBA.Replace(strsql, "'", "''")
If MPublic.dbinfo.ExecuteNonQuery("insert into commonSQL(描述, dbpathID, strsql) values('" + s描述 + "',(select ID from dbpath where path='" + DB_Info.Path + "'), '" + strsql + "')") Then
MsgBox MPublic.dbinfo.GetErr
End If
End Sub
保存sql语句也是一样,先在scbInput输入sql语句,再保存,使用InputBox来输入sql的描述,这里做了一个不超过255个字符的处理,InputBox不能显示超过255个字符,报类型不匹配错误。 删除DBPath:删除当前连接的数据库信息
Sub rbDelDBPath(control As IRibbonControl)
If DB_Info.db Is Nothing Then
MsgBox "请选择数据库。"
Exit Sub
End If
If VBA.MsgBox("DBPath:" & DB_Info.Path & vbNewLine & "确定从BOperate.sqlite中删除?", vbYesNo) = vbYes Then
If MPublic.dbinfo.ExecuteNonQuery("delete from dbpath where path='" + DB_Info.Path + "'") Then
MsgBox MPublic.dbinfo.GetErr
End If
End If
End Sub
删除sql:删除当前连接的数据库的常用sql语句
Sub rbDelSQL(control As IRibbonControl)
If DB_Info.db Is Nothing Then
MsgBox "请选择数据库。"
Exit Sub
End If
If VBA.Len(MPublic.scbInput) = 0 Then
MsgBox "请在Input中选择sql语句。"
Exit Sub
End If
If VBA.MsgBox("DBPath:" & DB_Info.Path & vbNewLine & "SQL:" & MPublic.scbInput & vbNewLine & "确定从BOperate.sqlite中删除sql语句?", vbYesNo) = vbYes Then
' TODO 没效果
If MPublic.dbinfo.ExecuteNonQuery("delete from commonSQL where strsql||' -- '||描述='" + MPublic.scbInput + "' and dbpathID=(select ID from dbpath where path='" + DB_Info.Path + "')") Then
MsgBox MPublic.dbinfo.GetErr
End If
End If
End Sub