|
很多网友碰到动态改变窗体的记录集时,如何进行窗体字段的显示问题。
试了一下,ACCESS 2003中,窗体运行时无法动态的添加控件。只好用另外一个方法来变通地来实现这个功能。
思路:
在窗体上一次性添加 256 个 textbox控件 T0,T1,T3,...,T255(因为ACCESS2003中一个查询或表最多255个字段)
然后根据窗体绑定的数据源的记录集,动态地对T0,T1,T3...来进行字段绑定,并设置列是否显示。
步骤:
1. 生成这个窗体 flexForm ,你可以一个一个来复制这些个textbox,也可以用如下代码生成。
Public Sub createFlexFrom()
Dim sOldFrmName As String
Dim frm As Form
Set frm = CreateForm
sOldFrmName = frm.Name
Dim ctlLabel As Control, ctlText As Control
Dim i As Integer
For i = 0 To 255
Set ctlText = CreateControl(frm.Name, acTextBox)
ctlText.Name = "T" & i
Set ctlLabel = CreateControl(frm.Name, acLabel, , ctlText.Name)
ctlLabel.Name = "L" & i
Next i
frm.DefaultView = 2
frm.NavigationButtons = False
DoCmd.Close acForm, frm.Name, acSaveYes
DoCmd.Rename "flexForm", acForm, sOldFrmName
End Sub
运行上述代码,可得到一个名为 flexForm 的窗体,窗体默认显示方式为"数据表",无记录导航按钮。当然你可以按需要改成你希望的窗体名。
2. 打开这个 flexForm 的设计模式,按ALT+F11 进入VBE环境,在flexForm窗体模块上添加一个过程 bindRecordset,代码如下。
3. 在你自己的主窗体中可以应用这个窗体做为子窗体,并可以动态的改变这个窗体的记录集。
例如,主窗体中可以执行 Me.Child3.Form.bindRecordset "select * from crossQuery"
示例:
打开form1,输入 t ,点击按钮,查看子窗体的变化。 然后输入 query1,点击按钮。
createFlexForm在 模块中。
提醒: 具体使用中,你可以添加必要的容错代码。
******************
* 一切皆有可能 *
******************
.
ACMAIN - Access论坛回贴准则(个人).
.
同一贴子不回复第二次
.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|