sql-server - 返回表单后 DataCombo 未刷新
问题描述
我有这个非常古老的 VB6 WinForms 应用程序。它有一个非常简单的初始窗口,显示一个组合框,其中包含使用 ADODB 2.8 从 MS SQL Server 检索的一些数据。它有一个复选框来定义如何过滤从服务器检索到的数据。
加载表单时正确添加了组合框的内容。不过,我有一个按钮,它显示一个新窗口,其中包含与组合框中所选项目相关的数据。关闭其他窗口后,我重新打开原始窗口并且组合框为空,即使执行了Form_Load方法,因此也会执行Check1_Click方法。但是,如果我单击复选框,则会触发Check1_Click事件并执行 OK 并填充组合框。
第一次加载窗口时,执行Form_Load并正确填充组合。每次Check1_Click,记录集都包含正确的信息,只是返回窗口时,它不会在组合框上显示。
重新打开窗口后,我应该采取任何步骤来刷新组合框的内容吗?
组合框的类型为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
更新
加载详细信息窗口的方法
'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
解决方案
推荐阅读
- node.js - 有没有办法通过 R10 错误访问部署在 Heroku 上的 nestJS 应用程序?
- wordpress - 在元素或表单中单击按钮时隐藏/取消隐藏部分
- multithreading - mce_loop 之后的线程创建
- javascript - 为 ajax 内容和未来的 dom 更改设置事件侦听器
- flutter - 用文字替换倒计时
- php - 使用通配符替换字符串 php
- sql - 如何在不使用循环的情况下更新另一个表中的两列
- c++ - 如何从控制台(c++)读取字符?(不是通过输入/getche() 或 getch())
- javascript - 未捕获的类型错误:无法读取未定义的属性“包含”-ReactJS
- html - 引导微调器覆盖表单(不是整个页面)