DataCombo не получает обновления после возврата в форму - PullRequest
0 голосов
/ 30 октября 2018

У меня есть очень очень старое приложение VB6 WinForms. У него очень простое начальное окно, в котором отображается поле со списком, содержащее некоторые данные, полученные с MS SQL Server с использованием ADODB 2.8. Он имеет флажок, чтобы определить, как фильтровать полученные данные с сервера.

Содержимое комбинированного списка корректно добавляется при загрузке формы. Тем не менее, у меня есть кнопка, которая показывает новое окно с данными, относящимися к выбранному элементу в выпадающем списке. Когда я закрываю это другое окно, я снова открываю исходное окно, и поле со списком остается пустым, даже если выполняется метод Form_Load и, следовательно, также выполняется метод Check1_Click . Как бы то ни было, если я нажму на флажок, событие Check1_Click будет запущено и выполнено в порядке, а поле со списком заполнено.

Когда окно загружается в первый раз, выполняется Form_Load и комбо заполняется правильно. Каждый раз, когда Check1_Click , набор записей содержит правильную информацию, просто при возврате в окно он просто не будет отображаться в выпадающем списке.

Есть ли какие-либо шаги, которые я должен предпринять, чтобы обновить содержимое поля со списком после открытия окна?

Combobox имеет тип MSDataListLib.DataCombo

Метод щелчка подобен этому.

Private Sub Check1_Click()
    Dim SQL As String

    'If checked'
    If Me.Check1.Value = 1 Then
        SQL = "SELECT TABLE1.NAME, TABLE1.LASTNAME, TABLE1.NAME + TABLE1.LASTNAME AS FULLNAME " & _ 
              " WHERE TABLE1.ACTIF = 'Y' ORDER BY TABLE1.NAME, TABLE1.LASTNAME"
    'If not checked'
    Else
        SQL = "SELECT TABLE1.NAME, TABLE1.LASTNAME, TABLE1.NAME + TABLE1.LASTNAME AS FULLNAME " & _ 
              " ORDER BY TABLE1.NAME, TABLE1.LASTNAME"
    End If

    Disconnect
    Set Cn = Connect
    Set objRec = CloseRecordSet(objRec)
    Set objRec = New ADODB.Recordset
    With objRec
        .CursorLocation = adUseServer
        .Open SQL, Cn, adOpenStatic, adLockOptimistic, adCmdText
    End With
    With Me.FullName
        Set .RowSource = objRec
        .ListField = "FULLNAME"
        .DataField = "FULLNAME"
    End With
    Me.FullName.Refresh
    Me.Refresh
End Sub

Это реализация остальных методов

'Connexion ADODB'
Public adoDbConn As ADODB.Connection


Private Sub Form_Load()
    Check1_Click
    Me.Refresh
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set objRec = CloseRecordSet(objRec)
    Disconnect
    Set Cn = Nothing

    With Me.FullName
        Set .RowSource = Nothing
        .ListField = ""
        .DataField = ""
    End With
    Me.FullName.Refresh
    Me.Refresh
End Sub 


Sub Disconnect()
    If Not adoDbConn Is Nothing Then
        If adoDbConn.State = adStateOpen Then adoDbConn.Close
    End If
    Set adoDbConn = Nothing
End Sub

Public Function Connect() As ADODB.Connection
    If adoDbConn Is Nothing Then        
        Set adoDbConn = New ADODB.Connection        
        ' Specify the OLE DB provider.'
        adoDbConn.Provider = "sqloledb"
        adoDbConn.Mode = adModeReadWrite
        ' Specify connection string on Open method.'
        adoDbConn.Open ChaineConnexion      
    End If      
    Set Connect = adoDbConn     
End Function

Public Function CloseRecordSet(rs As ADODB.Recordset) As Object
    If Not rs Is Nothing Then
        If rs.State = adStateOpen Then rs.Close
    End If
    Set CloseRecordSet = Nothing
End Function    

UPDATE

Метод, который загружает подробное окно

    'Showing the Detail Window'
Private Sub OpenFormDetail_Click()

    'If none is selected'
    If Me.FullName = "" Then
        'Show warning'
        Ret = MsgBox("Select one element!", vbExclamation, "ATTENTION !")
        Me.FullName.SetFocus
    Else

        'Storing fullname to use in detail other window'
        Globale.FullName = Right(Me.FullName, 11)

        'Load Detail Window'
        Load frmDetailWindow
        frmDetailWindow.Show

        'Unloads this window'
        Unload Me

    End If
End Sub

Метод в подробном окне Окно, которое закрывает его и открывает исходное окно

    'Showing the original Window'
Private Sub Return_Click()

    'Open initial window'
    Load frmInitialWindow
    frmInitialWindow.Show

    'Closes Detail Window'
    Unload frmDetailWindow

End Sub
...