msystools.bas

来自「这个是我以前做的一个客户管理系统.包内已经含有源码和所用到的控件.代码是用VB写」· BAS 代码 · 共 368 行

BAS
368
字号
Attribute VB_Name = "mSysTools"
Option Explicit

Public Cn       As New ADODB.Connection
Public Const strSysDBName = "Archives"    '系统数据库名
Public Const strSysLogin = "Archives"     '系统数据库操作员
Public Const strSysPsd = "GXliao"       '密码

Public saPassword       As String       '保存SA密码
Public gSchoolCode      As String

Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As Any, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString As String, _
    ByVal nSize As Long, _
    ByVal lpFileName As String) As Long

Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As Any, _
    ByVal lpString As Any, _
    ByVal lpFileName As String) As Long

Public Function gbGetNewConnect(sSvrName As String, sUsrName As String, sUsrPass As String) As Boolean
'**************************************************
'
'Purpose:
'       create new Connection and save to Cn
'
'Return:
'       if successful return True
'       else return False
'
'**************************************************
    
    Dim sSQL        As String
    
    On Error Resume Next
        
    Cn.Provider = "SQLOLEDB.1"
    sSQL = "Data Source= " & sSvrName & ";"
    sSQL = sSQL & "initial Catalog=;"
    sSQL = sSQL & "User id=" & sUsrName & ";"
    sSQL = sSQL & "password=" & sUsrPass
    
    saPassword = sUsrPass
    
    Screen.MousePointer = vbHourglass
    Cn.Open sSQL
    
    Screen.MousePointer = vbDefault
    
    If Err Then
        Err.Clear
        On Error GoTo ErrGetConnect
        sUsrPass = "GxLiao"
    
        Cn.Provider = "SQLOLEDB.1"
        sSQL = "Data Source= " & sSvrName & ";"
        sSQL = sSQL & "initial Catalog=;"
        sSQL = sSQL & "User id=" & sUsrName & ";"
        sSQL = sSQL & "password=" & sUsrPass
        
        saPassword = sUsrPass
        
        Screen.MousePointer = vbHourglass
        Cn.Open sSQL
        
        Screen.MousePointer = vbDefault
    End If
    
    If Cn Is Nothing Then
        Set Cn = Nothing
        MsgBox "无法连接SQL服务器,请检查服务器上的MSSQLServer服务是否启动。", vbInformation, "提示"
        gbGetNewConnect = False
    Else
        gbGetNewConnect = True
    End If
    Exit Function
ErrGetConnect:
    Err.Clear
    gbGetNewConnect = False
    Screen.MousePointer = vbDefault
'    gshowmsg "连接数据库错误: "
End Function


Public Function SQLGetConnectingUsers(Cn As ADODB.Connection) As Integer
'-  -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
' 得到当前使用本系统的用户数。
'
On Error GoTo ErrSQLGetConnectingUsers

Dim sSQL    As String
Dim RS      As New ADODB.Recordset
Dim Users   As Integer
'
    Screen.MousePointer = vbHourglass
    
    sSQL = "select distinct L.suid,L.name,P.hostname"
    sSQL = sSQL & vbCrLf & " from syslogins L,sysprocesses P"
    sSQL = sSQL & vbCrLf & " where L.suid=P.suid and L.name='QY2000'"
    RS.Open sSQL, Cn
    '
    Users = 0
    Do While Not RS.EOF()
        Users = Users + 1
        RS.MoveNext
    Loop
    RS.Close: Set RS = Nothing
    SQLGetConnectingUsers = Users
    Screen.MousePointer = vbDefault
    Exit Function
ErrSQLGetConnectingUsers:
    SQLGetConnectingUsers = 0
    Screen.MousePointer = vbDefault
    Exit Function
End Function


'Public Function SQLDropDatabase(Cn As ADODB.Connection, sDBName As String) As Boolean
'
'    Dim sSQL As String
'    On Error GoTo errSQLDropDatabase
'
'    Screen.MousePointer = vbHourglass
'
'    If Not SQLExistDatabase(Cn, sDBName) Then
'        SQLDropDatabase = True
'        Screen.MousePointer = vbDefault: Exit Function
'    End If
'
'    Dim sDb As String
'    sDb = SQLGetCurrentDatabaseName(Cn)
'
'    sSQL = "Use master"
'    Cn.Execute sSQL
'
'    sSQL = "DROP DATABASE " & sDBName
'    Cn.Execute sSQL
'
'    If sDBName <> sDb Then  ' 删除的不是当前数据库
'       sSQL = "USE " & sDb
'       Cn.Execute sSQL
'    End If
'
'    SQLDropDatabase = True
'    Screen.MousePointer = vbDefault
'    Exit Function
'
'errSQLDropDatabase:
'If sDBName <> sDb Then
'        sSQL = "USE " & sDb
'        Cn.Execute sSQL
'    End If
'
'    SQLDropDatabase = False
'    Screen.MousePointer = vbDefault
'
'End Function

Public Function SQLGetCurrentDatabaseName(Cn As ADODB.Connection) As String

    Dim sSQL As String
    Dim RS As New ADODB.Recordset
    
    On Error GoTo errSQLGetCurrentDatabaseName
    
    sSQL = "select CurrentDB = DB_NAME()"
    RS.Open sSQL, Cn
    SQLGetCurrentDatabaseName = Trim$(RS!CurrentDb)
    RS.Close
    Exit Function

errSQLGetCurrentDatabaseName:
    SQLGetCurrentDatabaseName = ""

End Function


'Public Function SQLSetOFISPWD(Cn As ADODB.Connection, Optional NewPassword) As Boolean
''-  -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
''   动态地生成OFIS2的用户口令,并保存到master..OFIS_PASSWORD中。
''
'    Dim PWD     As String
'    Dim NewPwd  As String
'    Dim sSQL    As String
'    Dim sDb     As String
'    '
'    On Error GoTo ErrSQLSetOFISPWD
'    sDb = SQLGetCurrentDatabaseName(Cn)
'    Cn.Execute "USE master"
'    '-  -   -   -   -   -   -   -   -   -   -
'    ' 动态生成password."OFIS + 随机数"
'    '
'    PWD = Left$("OFIS" & (CLng(Now)), 8)
'    If IsMissing(NewPassword) Then
'        NewPwd = PWD
'    Else
'        NewPwd = NewPassword
'        PWD = NewPwd
'    End If
'
'    '-  -   -   -   -   -   -   -   -   -
'    ' 在master数据库上创建OFIS_PWD Table.
'    '
'    sSQL = "if exists (select * from master..sysobjects where id = object_id('master..OFIS_PWD') and sysstat & 0xf = 3)"
'    sSQL = sSQL & vbCrLf & "drop table master..OFIS_PWD"
'    Cn.Execute sSQL
'    '
'    sSQL = "CREATE TABLE master..OFIS_PWD ("
'    sSQL = sSQL & vbCrLf & "ofis_login varchar (20)  NOT NULL,"
'    sSQL = sSQL & vbCrLf & "ofis_password VarBinary(20)  NULL"
'    sSQL = sSQL & vbCrLf & ")"
'    Cn.Execute sSQL
'    sSQL = "grant select on OFIS_PWD to public"
'    Cn.Execute sSQL
'
'    '-  -   -   -   -   -   -   -   -   -   -
'    ' 将口令加密后保存到OFIS_PWD中去。
'    PWD = ConvertHexString((Encrypt(PWD)))
'
'    sSQL = "insert master..OFIS_PWD(ofis_login,ofis_password)"
'    sSQL = sSQL & vbCrLf & "VALUES('OFIS2',null)"
'    Cn.Execute sSQL
'    '
'    sSQL = "update master..OFIS_PWD set ofis_password=" & PWD & " where ofis_login='OFIS2'"
'    If PWD = "" Then
'        sSQL = "update master..OFIS_PWD set ofis_password=NULL where ofis_login='OFIS2'"
'    End If
'    Cn.Execute sSQL
'
'    ' 创建Guest 用户用来读取OFIS_PWD
'    SQLDropLoginID Cn, "OFISGUEST"
'    Cn.Execute "exec sp_addlogin 'OFISGUEST'"
'
'    ' 设置OFIS2的口令
'    If Not SQLSetPWD(Cn, "'OFIS2'", "NULL", NewPwd) Then
'        SQLSetOFISPWD = False
'    Else
'        SQLSetOFISPWD = True
'    End If
'
'    Cn.Execute "USE " & sDb
'    Exit Function
'ErrSQLSetOFISPWD:
'    MsgBox "设置系统内部专用口令时出错。" & vbCrLf & "代号:" & Err & vbCrLf & Error, vbInformation, "错误"
'    On Error Resume Next
'    Cn.Execute "USE " & sDb
'    SQLSetOFISPWD = False
'
'End Function

Public Function SQLExistLoginID(Cn As ADODB.Connection, sLoginID As String) As Boolean

    Dim intNum As Integer
    Dim sSQL As String
    Dim RS As New ADODB.Recordset
    
    On Error Resume Next
    sSQL = "select intNum=Count(*) from master..syslogins where name='" & sLoginID & "'"
    RS.Open sSQL, Cn
    intNum = RS(0)
    If intNum > 0 Then
        SQLExistLoginID = True
    Else
        SQLExistLoginID = False
    End If
End Function

Public Function SQLDropLoginID(Cn As ADODB.Connection, sLoginID As String) As Boolean

    On Error Resume Next
    Dim sSQL As String
    Dim intSUID As Integer
    Dim RS As New ADODB.Recordset
    Dim rsUser As New ADODB.Recordset
    
    Dim sDb As String
    
    If Not SQLExistLoginID(Cn, sLoginID) Then
        SQLDropLoginID = True
        Exit Function
    End If
    On Error GoTo errSQLDropLoginID
    sDb = SQLGetCurrentDatabaseName(Cn)
    
    sSQL = "select suid from master..syslogins where name ='" & sLoginID & "'"
    RS.Open sSQL, Cn
    intSUID = RS(0)
    RS.Close: Set RS = Nothing
    
    sSQL = "select name from master..sysdatabases"
    
    RS.Open sSQL, Cn
    Do Until RS.EOF

       sSQL = "USE " & RS(0)
       sSQL = sSQL & vbCrLf & "if exists(select * from sysalternates where suid=" & intSUID & ")"
       sSQL = sSQL & vbCrLf & "exec sp_dropalias " & sLoginID
       Cn.Execute sSQL
       
       sSQL = "USE " & RS(0)
       sSQL = sSQL & vbCrLf & "if exists(select * from sysusers where suid=" & intSUID & ")"
       sSQL = sSQL & vbCrLf & "exec sp_dropuser " & sLoginID
       Cn.Execute sSQL
        
       RS.MoveNext
    Loop
    RS.Close: Set RS = Nothing
    Cn.Execute "USE master"
    Cn.Execute "EXEC sp_droplogin " & sLoginID
    Cn.Execute "USE " & sDb
    SQLDropLoginID = Not SQLExistLoginID(Cn, sLoginID)
    Exit Function

errSQLDropLoginID:
    On Error Resume Next
    Cn.Execute "USE " & sDb

End Function


Public Sub gShowMsg(Msg As String, Optional iFlag As Byte)
'**************************************************
'
'Purpose:
'       简化弹出Message box
'
'**************************************************
    If IsMissing(iFlag) Or iFlag = 0 Then
        Msg = Msg & vbCrLf & "错误代码: " & Err.Number & vbCrLf & "错误来源: " & Err.Source & vbCrLf
        MsgBox Msg & Err.Description, vbInformation, "警告"
    Else
        Msg = Msg & vbCrLf & "错误代码: " & Err.Number & vbCrLf & "错误来源: " & Err.Source & vbCrLf
        MsgBox Msg & Err.Description, vbInformation, "提示"
    End If
    
End Sub

Public Function ExistFile(ByVal PathName As String) As Boolean
'
' Check if a file exists
'
Dim sDb         As String
Dim RS          As New ADODB.Recordset
Dim sSQL        As String
Dim sTmp        As String
'
    On Error GoTo NoFile
    
    sTmp = Dir(PathName, 32 + 16 + 2 + 0 + 1 + 4)
    If Len(Trim(sTmp)) = 0 Then
        ExistFile = False
    Else
        ExistFile = True
    End If
    
    Exit Function

NoFile:
    ExistFile = False
    Exit Function

End Function

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?