У меня есть очень очень старое приложение 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