tvzml 发表于 2014-9-23 15:53:29

数据库跟踪工具

本帖最后由 tvzml 于 2014-9-27 09:00 编辑

买了一款不熟悉的行业软件,由于对软件的不熟悉以及软件一些功能的不足,想满足客户的要求,也不可能个个要求官方增加客户的功能,动不动就要加钱增加功能呢。为了增加功能以及快速批量设置软件,于是萌生了此款数据库跟踪软件。
    工作原理十分简单,第一次设置或者操作行业软件时,给数据库拍照一次,再次设置行业软件或者修改行业软件后,也就是行业软件发生了变化,如产生了新的数据或者删除了某项数据,再次点击“分析”,对比2次变化的结果,即可找出变化的字段,点击字段可以查看数据变化内容,这样就知道数据库哪些地方变化了,知道哪些关联字段的功能以后,即可随心所欲地的增加客户要求的功能了。





#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_UseUpx=n
#PRE_Res_Comment=QQ:6910930
#PRE_Res_Description=数据库跟踪工具
#PRE_Res_Fileversion=1.0.0.7
#PRE_Res_Fileversion_AutoIncrement=p
#PRE_Res_LegalCopyright=Soft By Tvzml
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <File.au3>
#include <Array.au3>
#include <GuiEdit.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GuiIPAddress.au3>
#include <GuiTab.au3>
#include <EditConstants.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GuiToolBar.au3>
#include <GuiButton.au3>
#include <GuiImageList.au3>
#include <Misc.au3>
Opt("GUICloseOnESC", 0)
Opt("TrayMenuMode", 3)
AutoItSetOption("MustDeclareVars", 1)
Opt('MustDeclareVars', 1)
If _Singleton("wbrun-" & FileGetVersion(@ScriptName), 1) = 0 Then
        Exit
EndIf
Local $TT_Main = "数据库跟踪工具", $Width = 620, $Height = 433, $ExitLoop = False, $HGUIFPS = 0
Local $hSocket_g = -1, $Isopen, $checkip = 0
Const $tagTIMEVAL = "long Seconds;long Microseconds"
Const $tagFD_SET = "long NumberofSockets;handle Socket"
Const $tagSOCKADDR = "word Family;word Port;long Address;ubyte Zero"
Const $tagMIB_IFROW = 'wchar Name;dword Index;dword Type;dword Mtu;dword Speed;dword PhysAddrLen;byte PhysAddr;dword AdminStatus;dword OperStatus;dword LastChange;dword InOctets;dword InUcastPkts;dword InNUcastPkts;dword InDiscards;dword InErrors;dword InUnknownProtos;dword OutOctets;dword OutUcastPkts;dword OutNUcastPkts;dword OutDiscards;dword OutErrors;dword OutQLen;dword DescrLen;char Descr'
Local $hGUI = GUICreate($TT_Main, $Width, $Height)
GUICtrlCreateLabel("第一步:按操作面板刷新,选择数据库鼠标左击数据库名。", 75, 10, $Width - 20, 23)
GUICtrlSetColor(-1, 0xff0000)
GUICtrlCreateLabel("第二步:执行快照通过点击快照图标创建一个快照", 75, 30, $Width - 20, 23)
GUICtrlSetColor(-1, 0xff0000)
GUICtrlCreateLabel("第三步:增加或者删除数据后,单击分析图标,分析出数据库变化结果", 75, 50, $Width - 20, 23)
GUICtrlSetColor(-1, 0xff0000)
Local $tabx = 171, $taby = 77, $tabw = 442, $tabh = 337, $ConnOpen = False, $ClickTab = 1
Local $file = @ScriptDir & "\query.ini"
Local $serverdns = IniRead($file, "query", "serverdns", "localhost")
Local $serverUrl = $serverdns
Local $serverport = IniRead($file, "query", "serverport", 1433)
If Not StringIsDigit(StringReplace($serverdns, ".", "")) Then
        TCPStartup()
        $serverdns = TCPNameToIP($serverdns)
        TCPShutdown()
EndIf
Local $SQLSERVER = $serverdns & "," & $serverport
Local $SqlDBName = IniRead($file, "query", "SqlDBName", "master")
Local $SQLUID = IniRead($file, "query", "SQLUID", "sa")
Local $SQLPWD = IniRead($file, "query", "SQLPWD", "")
Local $TCPTIMEOUT = IniRead($file, "query", "TCPTIMEOUT", 3000)
Local $SQLline = IniRead($file, "query", "SQLline", 300)
IniWrite($file, "query", "serverdns", $serverUrl)
IniWrite($file, "query", "serverport", $serverport)
IniWrite($file, "query", "SqlDBName", $SqlDBName)
IniWrite($file, "query", "SQLUID", $SQLUID)
IniWrite($file, "query", "SQLPWD", $SQLPWD)
IniWrite($file, "query", "SQLline", $SQLline)
GUICtrlCreateGroup("SQL数据库", $tabx - 166, $taby, 162, 190)
GUICtrlSetColor(-1, 0x0000ff)
GUICtrlCreateLabel("主机IP:", $tabx - 160, $taby + 25, 55, 15)
GUICtrlCreateLabel("端口Port:", $tabx - 160, $taby + 24 * 2, 55, 15)
GUICtrlCreateLabel("数据库名:", $tabx - 160, $taby + 24 * 3, 55, 15)
GUICtrlCreateLabel("用户名称:", $tabx - 160, $taby + 24 * 4, 55, 15)
GUICtrlCreateLabel("用户密码:", $tabx - 160, $taby + 24 * 5, 55, 15)
GUICtrlCreateLabel("连接超时:", $tabx - 160, $taby + 24 * 6, 55, 15)
GUICtrlCreateLabel("最大行数:", $tabx - 160, $taby + 24 * 7, 55, 15)
;GUICtrlSetBkColor(-1, 0xff0000)
Local $serverUrl_Input = GUICtrlCreateInput($serverUrl, $tabx - 105, $taby + 23, 95, 20)
Local $serverport_Input = GUICtrlCreateInput($serverport, $tabx - 105, $taby + 23 * 2, 95, 20)
Local $SqlDBName_Input = GUICtrlCreateInput($SqlDBName, $tabx - 105, $taby + 23 * 3, 95, 20)
Local $SQLUID_Input = GUICtrlCreateInput($SQLUID, $tabx - 105, $taby + 23 * 4, 95, 20)
Local $SQLPWD_Input = GUICtrlCreateInput($SQLPWD, $tabx - 105, $taby + 23 * 5, 95, 20, $ES_PASSWORD)
Local $TCPTIMEOUT_Input = GUICtrlCreateInput($TCPTIMEOUT, $tabx - 105, $taby + 23 * 6, 95, 20)
Local $SQLline_Input = GUICtrlCreateInput($SQLline, $tabx - 105, $taby + 23 * 7, 95, 20)

GUICtrlCreateGroup("操作面板 Control", $tabx - 166, $taby + 200, 162, 88)
GUICtrlSetColor(-1, 0x0000ff)
Local $Button1 = GUICtrlCreateButton("", 10, 10, 55, 55)
Local $Button2 = GUICtrlCreateButton("刷新", $tabx - 160, $taby + 25 * 9, 50, 23)
Local $OPENAll = GUICtrlCreateCheckbox("显示空数据行", $tabx - 107, $taby + 25 * 9, 100, 23)
Local $Button5 = GUICtrlCreateButton("复位", $tabx - 160, $taby + 25 * 10, 50, 23)
Local $Button6 = GUICtrlCreateButton("快照", $tabx - 110, $taby + 25 * 10, 50, 23)
Local $Button7 = GUICtrlCreateButton("分析", $tabx - 60, $taby + 25 * 10, 50, 23)
_GUICtrlButton_SetImageList($Button1, _GetImageListHandlebig("SHELL32.dll", 80, 0), 1)
_GUICtrlButton_SetImageList($Button2, _GetImageListHandle("SHELL32.dll", 209, 0), 0)
_GUICtrlButton_SetImageList($Button5, _GetImageListHandle("SHELL32.dll", 146, 0), 0)
_GUICtrlButton_SetImageList($Button6, _GetImageListHandle("SHELL32.dll", 139, 0), 0)
_GUICtrlButton_SetImageList($Button7, _GetImageListHandle("SHELL32.dll", 55, 0), 0)

GUICtrlSetState($Button1, $GUI_DISABLE)
;GUICtrlSetState($Button7, $GUI_DISABLE)
Local $TescSql = False, $ctxx_bh_chick, $ctxx_bh_chick_old, $SqlDBNameOLD
Local $ZDSQL_Db = [], $Select_Db = [], $Select_Db_mode = 0, $Count
Local $hTab = GUICtrlCreateTab($tabx, $taby, $tabw, $tabh, $TCS_MULTISELECT, $WS_EX_LAYERED)
Local $tab0 = GUICtrlCreateTabItem("日志信息")
Local $hGUIEdit = GUICtrlCreateEdit("", $tabx + 4, $taby + 23, $tabw - 8, $tabh - 30)
Local $tab1 = GUICtrlCreateTabItem("选择数据库")
Local $hListView = GUICtrlCreateListView("序号|数据库名", $tabx + 4, $taby + 23, $tabw - 8, $tabh - 30)
Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)
_GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle)
_GUICtrlListView_SetColumnWidth($hListView, 0, 40)
_GUICtrlListView_SetColumnWidth($hListView, 1, 170)
Local $FCO = GUICtrlCreateContextMenu($hListView)
Local $Run0 = GUICtrlCreateMenuItem("拍照", $FCO)
Local $Run1 = GUICtrlCreateMenuItem("对比", $FCO)
Local $tab2 = GUICtrlCreateTabItem("数据跟踪")
Local $hListView1 = GUICtrlCreateListView("编号|数据表|第一次|第二次|对比结果", $tabx + 4, $taby + 23, $tabw - 8, $tabh - 30)
_GUICtrlListView_SetExtendedListViewStyle($hListView1, $iExListViewStyle)
_GUICtrlListView_SetColumnWidth($hListView1, 0, 65)
_GUICtrlListView_SetColumnWidth($hListView1, 1, 160)
_GUICtrlListView_SetColumnWidth($hListView1, 2, 65)
_GUICtrlListView_SetColumnWidth($hListView1, 3, 65)
_GUICtrlListView_SetColumnWidth($hListView1, 4, 65)
Local $FCO1 = GUICtrlCreateContextMenu($hListView1)
Local $Run3 = GUICtrlCreateMenuItem("查询数据", $FCO1)

Local $tab3 = GUICtrlCreateTabItem("数据内容")
Local $hListView2 = GUICtrlCreateListView("||||||||||||||||||||||||||||||||||||||||||||||||||||||||", $tabx + 4, $taby + 23, $tabw - 8, $tabh - 30)


Local $exititem = TrayCreateItem("退出")
TraySetState()
TraySetClick(8)
TraySetToolTip($TT_Main)
GUISetState(@SW_SHOW, $hGUI)
TraySetIcon("Shell32.dll", -172)
GUISetIcon("Shell32.dll", -172, $hGUI)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

Local $Conn
TCPStartup()
If _TescSql() Then
        _ClickTab(1)
        _LoingSqlAllName()
EndIf

While 1
        Dim $nMsg = GUIGetMsg(1)
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Switch $nMsg
                                Case $hGUI
                                        TCPShutdown()
                                        Exit
                                        GUISetState(@SW_HIDE, $hGUI)
                        EndSwitch
                Case $GUI_EVENT_MINIMIZE
                        Switch $nMsg
                                Case $hGUI
                                        GUISetState(@SW_HIDE, $hGUI)
                        EndSwitch
                Case $Button2
                        $ClickTab = 1
                        _ClickTab(1)
                        _LoingSqlAllName()
                Case $Button5
                        $ClickTab = 2
                        _ClickTab(2)
                        $Select_Db_mode = 0
                        ReDim $Select_Db
                        _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView1))
                Case $Button6, $Run0
                        $ClickTab = 2
                        _ClickTab(2)
                        $Select_Db_mode = 1
                        $ctxx_bh_chick = ""
                        _sqlpz()
                Case $Button7, $Run1
                        $ClickTab = 2
                        _ClickTab(2)
                        $Select_Db_mode = 2
                        $ctxx_bh_chick = ""
                        _sqlpz()
                Case $Run3
                        $Select_Db_mode = 3
                        AdlibRegister("_sqlpz", 1)
        EndSwitch
        Switch TrayGetMsg()
                Case $exititem
                        TCPShutdown()
                        Exit
                Case $TRAY_EVENT_PRIMARYDOWN
                        GUISetState(@SW_SHOW, $hGUI)
                Case $TRAY_EVENT_SECONDARYDOWN
                        GUISetState(@SW_SHOW, $hGUI)
        EndSwitch
WEnd

Func _ClickTab($mode = 0)
        Dim $pos = MouseGetPos()
        Dim $posx = $pos
        Dim $posy = $pos
        _GUICtrlTab_ClickTab($hTab, $mode, "left", True, 1)
        MouseMove($posx, $posy, 1)
EndFunc   ;==>_ClickTab

Func Echo($line = "")
        Dim $time, $hGUIEdit_Str, $hGUIEdit_StrSp, $hGUIEdit_StrOK = "", $hGUIEdit_StrMax = 24, $hGUIEdit_StrEnd
        $hGUIEdit_Str = GUICtrlRead($hGUIEdit)
        If StringInStr($hGUIEdit_Str, @CRLF) Then
                $hGUIEdit_StrSp = StringSplit($hGUIEdit_Str, @CRLF, 1)
                If IsArray($hGUIEdit_StrSp) Then
                        Dim $hGUIEdit_Strout = UBound($hGUIEdit_StrSp) - 1
                        If $hGUIEdit_Strout > $hGUIEdit_StrMax Then
                                $hGUIEdit_StrMax = $hGUIEdit_Strout - $hGUIEdit_StrMax
                        Else
                                $hGUIEdit_StrMax = 1
                        EndIf
                        For $i = $hGUIEdit_StrMax To UBound($hGUIEdit_StrSp) - 1
                                $hGUIEdit_StrOK = StringReplace($hGUIEdit_StrOK, @CRLF, '^')
                                $hGUIEdit_StrOK = $hGUIEdit_StrOK & $hGUIEdit_StrSp[$i] & '^'
                                $hGUIEdit_StrOK = StringReplace($hGUIEdit_StrOK, '^^', '^')
                        Next
                EndIf
        EndIf
        If $hGUIEdit_StrOK <> "" Then
                $hGUIEdit_StrEnd = $hGUIEdit_StrOK & '^' & _Time() & " " & $line
        Else
                $hGUIEdit_StrEnd = _Time() & " " & $line
        EndIf
        $hGUIEdit_StrEnd = StringReplace($hGUIEdit_StrEnd, '^^', '^')
        $hGUIEdit_StrEnd = _TrimStr($hGUIEdit_StrEnd, "^")
        $hGUIEdit_StrEnd = StringReplace($hGUIEdit_StrEnd, '^', @CRLF)
        GUICtrlSetData($hGUIEdit, $hGUIEdit_StrEnd & @CRLF)
EndFunc   ;==>Echo
Func _Time()
        Return @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC
EndFunc   ;==>_Time
Func _TrimStr($str = "", $delstr = "\")
        If StringLeft($str, 1) = $delstr Then $str = StringTrimLeft($str, 1)
        If StringRight($str, 1) = $delstr Then $str = StringTrimRight($str, 1)
        Return $str
EndFunc   ;==>_TrimStr

Func _GetModuleFileNameEx($_Pid)
        Dim $_Hwnd = DllCall("Kernel32.dll", "hwnd", "OpenProcess", "dword", 0x0400 + 0x0010, "int", 0, "dword", $_Pid)
        Dim $_Return = DllCall("Psapi.dll", "long", "GetModuleFileNameEx", "hwnd", $_Hwnd, "long", 0, "str", 0, "long", 255)
        DllCall("Kernel32.dll", "int", "CloseHandle", "hwnd", $_Hwnd)
        If StringInStr($_Return, "\") Then Return $_Return
        Return ""
EndFunc   ;==>_GetModuleFileNameEx

Func _TescSql()
        If Not $TescSql Then
                $checkip = 0
                $TCPTIMEOUT = Int(GUICtrlRead($TCPTIMEOUT_Input))
                $checkip = _TCPConnectEx(GUICtrlRead($serverUrl_Input), GUICtrlRead($serverport_Input), $TCPTIMEOUT, 0)
                If $checkip <> 0 Then
                        echo("连接数据库成功..." & $checkip)
                        $TescSql = True
                Else
                        echo("无法连接数据库!!!" & $checkip)
                        $TescSql = False
                EndIf
        EndIf
        If $TescSql Then
                Return True
        Else
                Return False
        EndIf
EndFunc   ;==>_TescSql

Func Conn_open()
        If Not $ConnOpen Then
                $Conn = ObjCreate("ADODB.Connection")
                $Conn.open("DRIVER={SQL Server};SERVER=" & $SQLSERVER & ";UID=" & GUICtrlRead($SQLUID_Input) & ";PWD=" & GUICtrlRead($SQLPWD_Input) & ";")
                If @error Then
                        Return 0
                Else
                        Return 1
                EndIf
                $ConnOpen = True
        Else
                Return 1
        EndIf
EndFunc   ;==>Conn_open

Func _LoingSqlAllName()
        If Conn_open() Then
                Dim $RS = ObjCreate("ADODB.Recordset")
                $RS.ActiveConnection = $Conn
                $RS.Open("SELECT Name FROM Master..SysDatabases ORDER BY Name")
                $Count = 0;定义一个变量用来记录查询到的数据行数
                While Not $RS.eof And Not $RS.bof;当记录指针处于第一条记录和最后一条记录之间时,执行while循环
                        If @error = 1 Then ExitLoop
                        ReDim $ZDSQL_Db[$Count + 1][$RS.Fields.Count + 2];数组第一维大小加1,用于存放数据
                        $ZDSQL_Db[$Count] = $Count + 1
                        $ZDSQL_Db[$Count] = $RS.Fields(0).Value
                        $Count += 1
                        $RS.movenext
                WEnd
                $RS.Close
                $Conn.Close
                $ConnOpen = False
        EndIf
        _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView))
        _GUICtrlListView_AddArray($hListView, $ZDSQL_Db)
EndFunc   ;==>_LoingSqlAllName

Func _sqlpz()
        AdlibUnRegister("_sqlpz")
        If $ctxx_bh_chick = "" And $Select_Db_mode = 3 Then Return 0
        If Conn_open() Then
                $SqlDBName = GUICtrlRead($SqlDBName_Input)
                If $SqlDBNameOLD <> $SqlDBName Then
                        $SqlDBNameOLD = $SqlDBName
                        ReDim $Select_Db
                        $Select_Db = 0
                        _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView1))
                        _sqlpz()
                        Return 0
                EndIf
                $Conn.Execute("use " & $SqlDBName)
                ObjEvent("AutoIt.Error", "ODBCJET_ErroHandler")
                If $Select_Db_mode = 1 Or $Select_Db_mode = 3 Then
                        Dim $RS = ObjCreate("ADODB.Recordset");创建记录集对象
                        $RS.ActiveConnection = $Conn;设置记录集的激活链接属性来自$Conn
                        If $Select_Db_mode = 3 Then
                                ReDim $Select_Db
                                $Select_Db = 0
                                $RS.Open("Select top " & Int(GUICtrlRead($SQLline_Input)) & " * from " & $ctxx_bh_chick & " ")
                        Else
                                $RS.Open("Select Name FROM SysObjects Where XType='U' orDER BY Name")
                        EndIf
                        ;$RS.Open("select * from ctxx ORDER BY ctxx_bh");执行Sql语句,这个语句是查询数据库中所有的库属性,并且按Name字段的数据进行排序
                        $Count = 1;定义一个变量用来记录查询到的数据行数
                        While Not $RS.eof And Not $RS.bof;当记录指针处于第一条记录和最后一条记录之间时,执行while循环
                                If @error = 1 Then ExitLoop
                                If $Select_Db = 0 Then;当数组二维$Select_Db为0时,重定义数组的第二维大小等于记录集查询到的字段数
                                        ReDim $Select_Db[$RS.Fields.Count + 4];$RS.Fields.Count为记录集查询到的字段数
                                        For $i = 0 To $RS.Fields.Count - 1
                                                $Select_Db[$i + 1] = $RS.Fields($i).Name;$RS.Fields($i).Name为字段名,把字段名存入数组
                                        Next
                                EndIf
                                If $Select_Db_mode = 3 Then
                                        ;If $RS.Fields(0).Value <> "" Then
                                        ReDim $Select_Db[$Count + 1][$RS.Fields.Count + 4];数组第一维大小加1,用于存放数据
                                        $Select_Db = $Count;$Select_Db存放查询到的数据行数
                                        $Select_Db[$Count] = $Count;$Select_Db存放查询到的数据行数
                                        For $i = 0 To $RS.Fields.Count - 1
                                                $Select_Db[$Count][$i + 1] = $RS.Fields($i).Value;$RS.Fields($i).Value字段数据
                                        Next
                                        $Count += 1;行数加1
                                        ;EndIf
                                Else
                                        ReDim $Select_Db[$Count + 1][$RS.Fields.Count + 4];数组第一维大小加1,用于存放数据
                                        $Select_Db = $Count;$Select_Db存放查询到的数据行数
                                        $Select_Db[$Count] = $Count;$Select_Db存放查询到的数据行数
                                        For $i = 0 To $RS.Fields.Count - 1
                                                $Select_Db[$Count][$i + 1] = $RS.Fields($i).Value;$RS.Fields($i).Value字段数据
                                        Next
                                        $Count += 1;行数加1
                                EndIf

                                $RS.movenext;将记录指针从当前的位置向下移一行
                        WEnd
                        $RS.Close;关闭记录集对象
                EndIf
                If $Select_Db_mode = 3 Then
                        If UBound($Select_Db) > 1 Then
                                _ArrayDisplay($Select_Db, "详细信息")
                                _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView2))
                                _GUICtrlListView_AddArray($hListView2, $Select_Db)
                        EndIf
                Else
                        For $i = 1 To UBound($Select_Db) - 1
                                Dim $RS = ObjCreate("ADODB.Recordset");创建记录集对象
                                $RS.ActiveConnection = $Conn;设置记录集的激活链接属性来自$Conn
                                $RS.Open("Select count(*) FROM " & $Select_Db[$i] & " ")
                                Dim $ttt = Int($RS.Fields(0).Value)
                                If $Select_Db_mode = 1 Then
                                        $Select_Db[$i] = Int($ttt)
                                EndIf
                                If $Select_Db_mode = 2 Then
                                        If UBound($Select_Db) > 1 Then
                                                If $ttt > Int($Select_Db[$i]) Then $Select_Db[$i] = "↑"
                                                If $ttt < Int($Select_Db[$i]) Then $Select_Db[$i] = "↓"
                                                $Select_Db[$i] = Int($ttt)
                                        EndIf
                                EndIf
                                ;ClipPut($Select_Db[$i])
                                $RS.Close;关闭记录集对象
                        Next
                        _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView1))
                        If GUICtrlRead($OPENAll) = 1 Then
                                _GUICtrlListView_AddArray($hListView1, $Select_Db)
                        Else
                                If UBound($Select_Db) > 1 Then
                                        Dim $Select_Db1
                                        $Count = 1
                                        For $i = 0 To UBound($Select_Db) - 1
                                                If $Select_Db[$i] = 0 And $Select_Db[$i] = 0 Then
                                                Else
                                                        Dim $UBound = UBound($Select_Db1)
                                                        ReDim $Select_Db1[$UBound + 1]
                                                        $Select_Db1[$UBound - 1] = $Count
                                                        $Select_Db1[$UBound - 1] = $Select_Db[$i]
                                                        $Select_Db1[$UBound - 1] = $Select_Db[$i]
                                                        $Select_Db1[$UBound - 1] = $Select_Db[$i]
                                                        $Select_Db1[$UBound - 1] = $Select_Db[$i]
                                                        $Count += 1
                                                EndIf
                                        Next
                                        _GUICtrlListView_AddArray($hListView1, $Select_Db1)
                                EndIf
                        EndIf
                EndIf
                $Conn.Close
                $ConnOpen = False
        EndIf
EndFunc   ;==>_sqlpz
;完整源码请购买以下附件↓↓↓↓↓↓↓↓↓↓

http://www.autoitx.com/forum.php?mod=viewthread&tid=45408&page=1&extra=#pid596007

kk_lee69 发表于 2014-9-23 16:32:34

回复 1# tvzml

给数据库拍照一次

這句話的意思是創建另外一份資料庫 與 資料表嗎??

tvzml 发表于 2014-9-23 19:50:37

回复 2# kk_lee69

不是创建一个备份,而是创建一个数据表条目数等信息的简要索引记录,这样对于几百万的数据库扫描也不需要多少时间、

zhongzijie 发表于 2014-9-23 20:15:59

好工具,谢谢楼主

zhaoyun 发表于 2014-9-24 08:28:25

学习了。。。。。。。。。

kk_lee69 发表于 2014-9-24 09:09:21

回复 4# tvzml

好點子~~~

不知道 樓主 是否 願意開源讓小弟學習一下~~ 因為我是 繁體版的 所以 簡體版的 我大概都不能用
需要自己轉換一下

austere 发表于 2014-9-24 18:15:03

楼主发的都是精品~支持~

tvzml 发表于 2014-9-27 09:00:34

回复 7# kk_lee69

http://www.autoitx.com/forum.php?mod=viewthread&tid=45408&page=1&extra=#pid596007

kk_lee69 发表于 2014-9-27 09:12:00

回复 9# tvzml

感謝 樓主 開源 ~~ 學習一下思路 感謝

whrgxl8687 发表于 2014-9-30 10:48:50

适合sybase不???

cxm23 发表于 2014-9-30 16:15:09

很好的软件,请问支持哪些数据库呢? 支持oracle吗?

tvzml 发表于 2014-9-30 19:01:07

回复 12# cxm23
目前仅支持 MSSQL

cxm23 发表于 2014-9-30 23:13:48

{:1_309:} 好的

wbb870319 发表于 2015-5-20 18:54:20

看看有什么用。

忽然之间 发表于 2015-5-26 20:56:57

好东西,感谢楼主
页: [1] 2
查看完整版本: 数据库跟踪工具