Office中国论坛/Access中国论坛

标题: 大家来看看我这段代码,我都快疯了。 [打印本页]

作者: fengyunhun    时间: 2006-4-9 23:17
标题: 大家来看看我这段代码,我都快疯了。
出错提示:除非获得焦点,否则你不能引用该控件的属性和方法。

Private Sub Form_Open(Cancel As Integer)
jinping = ""
xiadan = ""
renwu = ""
Form!精品任务单_子表.LinkChildFields = ""
Form!精品任务单_子表.LinkMasterFields = ""
DoCmd.GoToRecord , , acNewRec
End Sub

‘上面是设置变量,设置连接字段(我想通过链接字段在输入过程中自动筛选),当打开表单的时候,转到添加新记录上面(也就是指针转到最后面去)。

Private Sub 精品任务编号_Enter()
Me.精品任务编号.BackColor = RGB(200, 200, 200)
If (Me.精品任务编号.Text = "") Then
jinping = ""
Else
End If
End Sub
Private Sub 精品任务编号_Exit(Cancel As Integer)
Me.精品任务编号.BackColor = RGB(255, 255, 255)
If (Me.精品任务编号.Text = "") Then
jinping = ""
Else
jinping = "精品任务编号"
End If
Form!精品任务单_子表.LinkMasterFields = jinping & xiadan & renwu
Form!精品任务单_子表.LinkChildFields = jinping & xiadan & renwu
End Sub
Private Sub 下单日期_Enter()
Me.下单日期.BackColor = RGB(200, 200, 200)
If (Me.下单日期.Text = "") Then
xiadan = ""
Else
End If
End Sub

Private Sub 下单日期_Exit(Cancel As Integer)
Me.下单日期.BackColor = RGB(255, 255, 255)
If (Me.下单日期.Text = "") Then
xiadan = ""
ElseIf (Me.精品任务编号.Text = "") Then
xiadan = "下单日期"
Else
xiadan = ";下单日期"
End If
Form!精品任务单_子表.LinkMasterFields = jinping & xiadan & renwu
Form!精品任务单_子表.LinkChildFields = jinping & xiadan & renwu
End Sub
Private Sub 任务日期_Enter()
Me.任务日期.BackColor = RGB(200, 200, 200)
If (Me.任务日期.Text = "") Then
renwu = ""
Else
End If
End Sub
Private Sub 任务日期_Exit(Cancel As Integer)
Me.任务日期.BackColor = RGB(255, 255, 255)
If (Me.任务日期.Text = "") Then
renwu = ""
ElseIf (Me.精品任务编号.Text = "" And Me.下单日期.Text = "") Then
renwu = "任务日期"
Else
renwu = ";任务日期"
End If
Form!精品任务单_子表.LinkMasterFields = jinping & xiadan & renwu
Form!精品任务单_子表.LinkChildFields = jinping & xiadan & renwu
End Sub

[此贴子已经被作者于2006-4-9 15:25:17编辑过]


作者: fengyunhun    时间: 2006-4-9 23:40
是不是ACCESS不支持elseif

我在没有用elseif之前有点错,但是不是这么错的离谱。

没有用elseif之前我发现错误是由多个字段之间的间隔符号引起,于是我就想到了VB上面有ELSEIF,用了之后就错的一发不可收拾。



[此贴子已经被作者于2006-4-9 15:46:00编辑过]


作者: fengyunhun    时间: 2006-4-9 23:53
今天没有人值班啦?以前我问一个问题马上就看到高手回答了。
作者: sgrshh29    时间: 2006-4-10 00:05
出错提示:除非获得焦点,否则你不能引用该控件的属性和方法.

Private Sub 精品任务编号_Exit(Cancel As Integer)
If (Me.精品任务编号.Text = "") Then
这里,精品任务编号_Exit,该控件已经失去焦点,不能用 .Text ,只能 Me.精品任务编号="",其它语句检查一下,可能有类似的.
作者: fan0217    时间: 2006-4-10 00:35
请将问题示例放上来,结合例子好分析。
作者: fengyunhun    时间: 2006-4-10 00:57
只需要看窗体,我想在窗体上面实现:在子表中点击,主表上面的当前对象自动对应子表。因为没有能力实现这个功能就只好折中一下。通过在主表中输入数据,判断是否有数据,有数据就进行筛选。在筛选的时候出错了。[attach]17007[/attach]

作者: fengyunhun    时间: 2006-4-10 00:59
啊,蜘蛛侠,真谢谢你。我马上就去查看原因。弄了一天了,都没有找到原因。
作者: fengyunhun    时间: 2006-4-10 01:32
好象变量没有传递到三个设置的参数中去?错误还是没有解决完。刚刚哪个问题解决了。怎么设置公共变量,要能回传的。可以把全部的Private改成Public吗?

[此贴子已经被作者于2006-4-9 17:39:02编辑过]


作者: fan0217    时间: 2006-4-10 03:11
没有看明白你的代码要实现什么.

LinkChildFieldsLinkMasterFields 属性:当为这两个属性的设置指定多个字段或控件的名称时,则必须为每一属性设置输入相同数目的字段或控件名称,并在名称之间使用分号 (;) 进行[url=mkMSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\2052\vbaac10.chm::/html/acproLinkMasterFields.htm#]分隔[/url]

如果要在主窗体设置条件在子窗体中筛选,可在SQL语句的Where子句中设置条件,然后为子窗体的RecordSource 属性赋值

例如:Sub cmboCompanyName_AfterUpdate()
    Dim strNewRecord As String
    strNewRecord = "SELECT * FROM Customers " _
        & " WHERE CustomerID = '" _
        & Me!cmboCompanyName.Value & "'"
    Me.RecordSource = strNewRecord
End Sub

作者: fengyunhun    时间: 2006-4-10 03:28
其实我的“主窗体”和“子窗体”都是来自同一个“表单”,主要是为了输入方便。

在“主窗体”中有三个输入框,包含“表单”中重复输入的字段,“子窗体”包含所有的“表单”内容。

主窗体中输入一条记录(实际上只有三个字段,并不算完整的记录),所以想实现主窗体和子窗体的记录在“表单”的同一个当前记录上。

LinkChildFieldsLinkMasterFields 属性不知道能不能关联成功(锁定到同一当前记录上,可能还需要一些程序控制)。



看来这个方法是行不通了!再换一种方法
作者: fan0217    时间: 2006-4-10 03:30
LinkChildFieldsLinkMasterFields 属性:当为这两个属性的设置指定多个字段或控件的名称时,则必须为每一属性设置输入相同数目的字段或控件名称,并在名称之间使用分号 (;) 进行[url=mkMSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\2052\vbaac10.chm::/html/acproLinkMasterFields.htm#]分隔[/url]
作者: fan0217    时间: 2006-4-10 03:34
不是不能实现,你的方法没有对

在子窗体中手工设置好LinkChildFieldsLinkMasterFields 属性,凡是全部满足条件的记录都会在子窗体中显示.
作者: fengyunhun    时间: 2006-4-10 04:19
程序又改进了,不过没有反映。这次没有错误提示,就是没有效果。把“Me.lianjie”改成“Forms!窗体1.lianjie”也没有反映。

Private Sub 下单日期_Exit(Cancel As Integer)
Me.下单日期.BackColor = RGB(255, 255, 255)
Me.lianjie
Me.精品任务单_子表.Requery
End Sub

Public Function lianjie()
If ((Me.精品任务编号 = "") And (Me.下单日期 = "") And (Me.任务日期 = "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = ""
Me.Form!精品任务单_子表.LinkChildFields = ""
ElseIf ((Me.精品任务编号 <> "") And (Me.下单日期 = "") And (Me.任务日期 = "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = "精品任务编号"
Me.Form!精品任务单_子表.LinkChildFields = "精品任务编号"
ElseIf ((Me.精品任务编号 = "") And (Me.下单日期 <> "") And (Me.任务日期 = "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = "下单日期"
Me.Form!精品任务单_子表.LinkChildFields = "下单日期"
ElseIf ((Me.精品任务编号 = "") And (Me.下单日期 = "") And (Me.任务日期 <> "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = "任务日期"
Me.Form!精品任务单_子表.LinkChildFields = "任务日期"
ElseIf ((Me.精品任务编号 <> "") And (Me.下单日期 <> "") And (Me.任务日期 = "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = "精品任务编号;下单日期"
Me.Form!精品任务单_子表.LinkChildFields = "精品任务编号;下单日期"
ElseIf ((Me.精品任务编号 = "") And (Me.下单日期 <> "") And (Me.任务日期 <> "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = "下单日期;任务日期"
Me.Form!精品任务单_子表.LinkChildFields = "下单日期;任务日期"
ElseIf ((Me.精品任务编号 <> "") And (Me.下单日期 = "") And (Me.任务日期 <> "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = "精品任务编号;任务日期"
Me.Form!精品任务单_子表.LinkChildFields = "精品任务编号;任务日期"
ElseIf ((Me.精品任务编号 <> "") And (Me.下单日期 <> "") And (Me.任务日期 <> "")) Then
Me.Form!精品任务单_子表.LinkMasterFields = "精品任务编号;下单日期;任务日期"
Me.Form!精品任务单_子表.LinkChildFields = "精品任务编号;下单日期;任务日期"
End If
End Function

[此贴子已经被作者于2006-4-9 20:23:56编辑过]


作者: fan0217    时间: 2006-4-10 04:27
Private Sub 下单日期_Exit(Cancel As Integer)
Me.下单日期.BackColor = RGB(255, 255, 255)
Me.lianjie
Me.精品任务单_子表.Requery
End Sub

红色部分是什么意思,调用函数?

用call lianjie试试

使用LinkChildFieldsLinkMasterFields 属性,可以不要Me.精品任务单_子表.Requery这句.



[此贴子已经被作者于2006-4-9 20:34:11编辑过]


作者: fengyunhun    时间: 2006-4-10 04:33
call lianjie试了一下,没有反映。我觉得这两个方法没有区别。
作者: fengyunhun    时间: 2006-4-10 04:36
我大概已经发现原因了。因为我修改的数据在退出之后也会自动在刷新(可能会独占),因为我用的是同一张表单,所以刷新的时候可能有点问题。

如果我用另一张表,可能就不会有问题了,我把子“表单”换成“查询”再试一试,完后上报一下。

[此贴子已经被作者于2006-4-9 20:37:33编辑过]


作者: fan0217    时间: 2006-4-10 04:47
用这种方法最方便.

在SQL语句的Where子句中设置条件,然后为子窗体的RecordSource 属性赋值

例如:Sub cmboCompanyName_AfterUpdate()
    Dim strNewRecord As String
    strNewRecord = "SELECT * FROM Customers " _
        & " WHERE CustomerID = '" _
        & Me!cmboCompanyName.Value & "'"
    Me.RecordSource = strNewRecord
End Sub





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3