足球小将世界杯国语版1:【新提醒】[原创]ADO+SQL(非ADP方式链接),解决“组合框的行来源”的方法 - A...
来源:百度文库 编辑:九乡新闻网 时间:2024/05/17 08:57:35
[ADO/DAO] [原创]ADO+SQL(非ADP方式链接),解决“组合框的行来源”的方法 [复制链接]
鱼儿游游- 发短消息
- 加为好友
- 威望
- 0 点
- 金钱
- 595 ¥
- 最后登录
- 2011-5-8
- 注册时间
- 2008-8-10
- 帖子
- 477
- 精华
- 0
- 积分
- 1050
- 阅读权限
- 70
- UID
- 137067
金牌会员
金牌会员, 积分 1050, 距离下一级还需 1950 积分 1# 发表于 2011-1-3 03:50 |只看该作者 |倒序浏览 |打印 本帖最后由 鱼儿游游 于 2011-1-5 18:35 编辑[原创]ADO链接SQL Server 数据库(非ADP方式),解决“组合框和列表框的行来源”的方法。
编写程序时,直接用ADO的方式链接SQL Server 数据库(非ADP方式),这样数据库就完全不存在表了,对于窗体直接把ADO记录集绑定到窗体,安全性自然大大加强,如此就只需要启动之后创建一个全局ADO.Connection变量,其它记录集就直接引用它就行了。但这样带来一个问题,就是用了这种方式之后,窗体的组合框和列表框的行来源就没有办法像平时那样设为SQL语句,系统会自动使用记录集进行填充。
用以下方法,当记录集改变后,调用以下的过程(相当于动态使用),能很好地解决以上问题。
本帖隐藏的内容
'======================================================================' 模块功能:设置组合框的行记录源
'
' 调用参数:objComboBox --- 组合框名称
' strSQL ------------- SQL语句
' 注意事项:1、调用前先创建一个全局变量 adoCn 用于建立与SQL Server 的链接,并建立链接。
' 2、在窗体上设好组合框的有关参数。
' 调用示例:
' strSQL_1 = "SELECT UserId, UserName, Password,IsEnabled FROM USysUsers"
' strSQL_2 = "SELECT * FROM USysUsers"
' SetComboBox_RowSource Me.Combo_1, strSQL_1
' SetComboBox_RowSource Me.Controls("Combo_2"), strSQL_2
'
' 作 者: 鱼儿游游
' 创建时间: 2010.11.5
'=======================================================================
Public Sub SetComboBox_RowSource(objComboBox As Object, ByVal strSQL As String)
On Error GoTo Err_SetComboBox_RowSource
Dim Rs As New ADODB.Recordset '临时记录集
Dim arrField() As String '只能是字符串类型
Dim strFieldList As String
Dim strValueList As String
Dim iPos1 As Integer
Dim iPos2 As Integer
Dim i As Integer
Rs.Open strSQL, adoCn, 1, 1
'取字段
If InStr(1, strSQL, "*") = 0 Then
'指定了字段表
iPos1 = InStr(1, strSQL, "SELECT") + Len("SELECT")
iPos2 = InStr(1, strSQL, "FROM")
strFieldList = Mid(strSQL, iPos1 + 1, iPos2 - iPos1 - 1)
arrField = Split(strFieldList, ",")
For i = LBound(arrField) To UBound(arrField)
arrField(i) = Trim(arrField(i))
Next i
Else
'没有指定字段表,列出所有字段
ReDim arrField(Rs.Fields.Count - 1)
For i = 0 To Rs.Fields.Count - 1
arrField(i) = Rs.Fields(i).Name
Next
End If
'设置值列表
With objComboBox
.RowSource = ""
.RowSourceType = "Value List"
.ColumnCount = UBound(arrField) - LBound(arrField) + 1
Do While Not Rs.EOF
strValueList = ""
For i = LBound(arrField) To UBound(arrField)
strValueList = strValueList & Nz(Rs.Fields(arrField(i)).Value) & ";"
Next i
strValueList = Left(strValueList, Len(strValueList) - 1) '此句好象不需要,效果一样
.AddItem strValueList
Rs.MoveNext
Loop
End With
Exit_SetComboBox_RowSource:
'关闭记录集,并释放变量
If rs.State <> adStateClosed Then rs.Close
Set rs = Nothing
Exit Sub
Err_SetComboBox_RowSource:
'与数据库断开连接,则重新连接
If cn.State = adStateClosed Then
If SQLConnectToServer Then Resume
End If
Resume Exit_SetComboBox_RowSource
End Sub
【新提醒】[原创]ADO+SQL(非ADP方式链接),解决“组合框的行来源”的方法 - A...
【新提醒】文字趣味对话( 我的原创)
【新提醒】原创 沂南论坛的生日(诗歌)
最伤感的告白——无标题(非原创,无来源)
【新提醒】非看不可的主力出货套路
【新提醒】精听的方法
【新提醒】织双边领的方法
【新提醒】手机套编织的基本方法
【新提醒】非常细致的玉石鉴别知识a
VB+ADO:介绍的Connection对象的应用方法
【新提醒】sql语句学习 细点
关于存储过程的ADO调用的一些心得(输出参数,返回值)-数据库专栏,SQL Server-...
中使用ADO连接的一种方法 - [VC++]
SQL Server 2008的新压缩特性
【新提醒】用意识控制物理世界的准确方法
【新提醒】让宝宝从小自信的方法
【新提醒】DM500网线直连电脑的方法说明
转载:ADO连接SQL数据库
解决SQL数据库日志已满的问题
ADO.Net都有哪些从数据库获取数据的方式
法律效力的一般解决方式
一个人的漫步(非原创)
解决便秘的小方法(很实用)a
解决掉头发和生发的方法A