Option Explicit
Private strServerName As String
Private conCheckbook As Connection
Private rsCheckbook As Recordset
Private strSql As String
Dim i As Integer
Dim blnValid As Boolean
Dim strTemp As String
Dim strChecknumber As StringPrivate Sub getSQLServerName()
    If GetSetting("OnlineBankingDB", "SQL Server Name", "ServerName") = "" Then
        strServerName = InputBox("请输入数据库服务器名称")
        SaveSetting "OnlineBankingDB", "SQL Server Name", "ServerName", strServerName
    Else
        strServerName = GetSetting("OnlineBankingDB", "SQL Server Name", "ServerName")
    End If
End SubPrivate Sub connectionSQLServer()
    Set conCheckbook = New Connection
    Set rsCheckbook = New Recordset
    
    On Error GoTo errorhandler
    Call getSQLServerName
    
    With conCheckbook
        .Provider = "sqloledb"
        .ConnectionString = "user id=sa;" & _
        "password=;" & _
        "data source=" & strServerName & _
        ";initial catalog=OnlineBankingDB"
        .Open
    End With
    
    Exit Sub
errorhandler:
   MsgBox Err.Number & Err.Source & Err.Description
End SubPrivate Sub Form_Load()
 If strServerName = "" Then getSQLServerName
 Call connectionSQLServer
 If rsCheckbook.State = 1 Then rsCheckbook.Close
 rsCheckbook.CursorLocation = adUseClient
 strSql = "select * from Customer where vCheckBookNumber is not null"
 rsCheckbook.Open strSql, conCheckbook, adOpenDynamic, adLockOptimistic
 If rsCheckbook.RecordCount > 0 Then
    rsCheckbook.MoveFirst
    Do While Not rsCheckbook.EOF
        TreeView1.Nodes.Add , , "key" & Trim(rsCheckbook.Fields("cAccountNumber")), rsCheckbook.Fields("cAccountNumber")
        If IsNull(rsCheckbook.Fields("vCheckBookNumber")) = False Then
            TreeView1.Nodes.Add "key" & Trim(rsCheckbook.Fields("cAccountNumber")), tvwChild, "key" & Trim(rsCheckbook.Fields("vCheckBookNumber")), rsCheckbook.Fields("vCheckBookNumber")
            findCheckbookDetail "key" & Trim(rsCheckbook.Fields("vCheckBookNumber")), rsCheckbook.Fields("vCheckBookNumber")
        End If
        rsCheckbook.MoveNext
    Loop
    For i = 1 To TreeView1.Nodes.Count
        TreeView1.Nodes(i).Expanded = True
    Next
 End If
End SubPrivate Sub findCheckbookDetail(key As String, checkbook As String)
Dim rsCheckbookDetail As Recordset
Set rsCheckbookDetail = New Recordset
If rsCheckbookDetail.State = 1 Then rsCheckbookDetail.Close
 rsCheckbookDetail.CursorLocation = adUseClient
 strSql = "select * from TransactionOfCheckBook where vInstructions='未兑' and vCheckBookNumber='" & checkbook & "'"
 rsCheckbookDetail.Open strSql, conCheckbook, adOpenDynamic, adLockOptimistic
 If rsCheckbookDetail.RecordCount > 0 Then
    rsCheckbookDetail.MoveFirst
    Do While Not rsCheckbookDetail.EOF
        TreeView1.Nodes.Add key, tvwChild, "key" & Trim(rsCheckbookDetail.Fields("vCheckNumber")), rsCheckbookDetail.Fields("vCheckNumber")
        rsCheckbookDetail.MoveNext
    Loop
 End If
 Set rsCheckbookDetail = Nothing
End SubPrivate Sub Form_Resize()
Me.Top = (frmMian.Height - Me.Height) / 10
Me.Left = (frmMian.Width - Me.Width) / 2
End SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.key
Case "ok"
    If blnValid = False Then
        MsgBox "请选择支票", vbInformation, "支票选择"
    Else
////////////////////////////////////////////////////////////////
        frmAccountDeposit.txtCheckNumber = strChecknumber
        'frmAccountDeposit为帐户存款窗口,本窗口为支票选取窗口,当选择工具栏的确定按钮返回所选择的支票,即在frmAccountDeposit帐户存款窗口的txtCheckNumber支票文本框设置为此窗体选择的支票,但因为本窗口想作为公用窗口,即模块化,其他窗体都可能反复调用,返回时将所选择的支票返回,请问如何实现,因为此时实现的只是一个窗体,请问如何多个窗体都能调用
////////////////////////////////////////////////////////////////
        Unload Me
    End If
Case "cancel"
    Unload Me
End Select
End SubPrivate Sub TreeView1_NodeClick(ByVal node As MSComctlLib.node)
    Dim i As Long
    If (node.Child Is Nothing) Then
        strTemp = Trim(node.Text)
        i = getlayer(node, TreeView1)
        If i = 3 Then
            blnValid = True
            strChecknumber = strTemp
        End If
    Else
        blnValid = False
    End If
End SubPrivate Function getlayer(node As node, treeview As treeview) As Long
    Dim pnode As node
    Dim num As Long
        num = 1
    Set pnode = node
    Do While Not pnode.Parent Is Nothing
    Set pnode = pnode.Parent
        num = num + 1
    Loop
    getlayer = num
End Function

解决方案 »

  1.   

    试试怎么样?
    dim kk as new yourform
      

  2.   

    ①删除  frmAccountDeposit.txtCheckNumber = strChecknumber////////////////////////////////////////////////////////////////
            frmAccountDeposit.txtCheckNumber = strChecknumber
            'frmAccountDeposit为帐户存款窗口,本窗口为支票选取窗口,当选择工具栏的确定按钮返回所选择的支票,即在frmAccountDeposit帐户存款窗口的txtCheckNumber支票文本框设置为此窗体选择的支票,但因为本窗口想作为公用窗口,即模块化,其他窗体都可能反复调用,返回时将所选择的支票返回,请问如何实现,因为此时实现的只是一个窗体,请问如何多个窗体都能调用
    ////////////////////////////////////////////////////////////////2 修改为公有类型以便其他窗体访问 Public strChecknumber As String3 在其他窗体的示犯代码
        Dim frmTemp As New frmSelectCheckbookDialog
        frmTemp.Show 1
        Me.txtCheckNumber.Text = frmTemp.strChecknumber