sql - 从 sql 模块将 SQL 查询结果放入活动用户窗体上的对象中
问题描述
我在一个项目中有几个用户窗体,每个用户窗体都有不同的用户窗体名称,但我为对象使用统一的名称。例如,每个需要使用 SQL 查询的表单都有一个名为“团队”的对象,并使用相同的查询来拉取团队列表。每个表单在其代码中也有相同的查询,“with”语句更改为反映表单名称。我想做的只是在一个名为 SQL 或类似的模块中只有一个查询实例。这是我当前使用的查询类型的示例。
Sub GetTeams()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Server_Name = "SDL02-VM25"
Database_Name = "PIA"
SQLStr = "select distinct[team] from dbo.[Master Staffing List] ORDER BY [team]"
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & vbNullString
rs.Open SQLStr, Cn, adOpenStatic
With MasterStaffing.Team
.Clear
Do
.AddItem rs![Team]
rs.MoveNext
Loop Until rs.EOF
End With
rs.Close
Cn.Close
Set rs = Nothing
Set Cn = Nothing
Exit Sub
End Sub
我可以将“With MasterStaffing.Team”替换为引用当前处于活动状态的任何形式的内容吗?每个使用该查询的表单都会有一个名为 Team 的对象,因此唯一真正需要更改的是表单引用。这可以做到吗?
解决方案
将要加载的控件作为参数传递给常规模块中的子组件:
例如:
LoadTeams Me.Team
子被调用:
Sub LoadTeams(ctrl as Object)
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Server_Name = "SDL02-VM25"
Database_Name = "PIA"
SQLStr = "select distinct[team] from dbo.[Master Staffing List] ORDER BY [team]"
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & _
Database_Name & vbNullString
rs.Open SQLStr, Cn, adOpenStatic
With ctrl
.Clear
Do
.AddItem rs![Team]
rs.MoveNext
Loop Until rs.EOF
End With
rs.Close
Cn.Close
Set rs = Nothing
Set Cn = Nothing
End Sub
如果您想进一步改进您的代码,请将数据库连接和查询分解为一个单独的函数,该函数接受 SQL 字符串并返回一个打开的记录集。
推荐阅读
- node.js - Mongoose:在 post find/findOne 钩子中编辑查询结果
- postgresql - How to force COMMIT inside function so other sessions can see updated row?
- css - Primefaces v10 按钮,带有字体真棒图标
- unit-testing - Gradle 配置是否会根据是否从 IntelliJ IDEA 运行而有所不同?
- c# - 在 Azure 上编译时导致 CS1546 异常的 CsvHelper PrepareHeaderForMatch
- python - TypeError: 无法将 re.compile('[AZ]+') (re.Pattern) 转换为 Union[str, tokenizers.Regex]
- flutter - 导航器过渡灰色背景问题
- swift - 如何在单个失败时中止整个调度组操作而不返回多个失败完成处理程序?
- r - 在 R 库中时,获取调用库的原始文件的路径?
- c# - 如何在 Windows 中更改鼠标指针大小?