2012-01-30 38 views
0

我得到了这个问题。我有一个表单使用表单的记录源属性检索表数据。当窗体打开时,我将其记录源属性设置为模块的公共方法RetrieveMembers。以下是代码。试图麻烦VBA中的对象所需的错误

Private Sub Form_Open(Cancel As Integer) 
'set Form's record source property to retrieve a Members table 
Me.RecordSource = mod_JoinMember.RetrieveMembers 

End Sub 

'mod_JoinMember Class 
Public Function RetrieveMembers() As String 

Dim strSQL As String 
Set strSQL = "SELECT tbl_Member.Title, tbl_Member.Gender, tbl_Member.LastName, 
tbl_Member.DateofBirth, tbl_Member.Occupation, tbl_Member.PhoneNoWork, 
tbl_Member.PhoneNoHome, tbl_Member.MobileNo, tbl_Member.Email, 
tbl_Member.Address, tbl_Member.State, tbl_Member.Postcode FROM tbl_Member;" 
RetrieveMembers = strSQL 

End Function 

所需的对象引发错误。

我无法理解这个编译错误。我看到我的代码没有错,因为recordsource是一个String类型的属性。而我的模块的函数Retrievemembers返回一个字符串值。

为什么它不满意呢?

+0

什么行是抛出的错误? (我怀疑在代码中没有显示...) – 2012-01-30 04:49:01

+0

它被作为字符串行引发到Public Function RetrieveMembers。只是一些信息 - 而数据库应用程序是一个MS Access 2003,我在我的笔记本电脑上运行MS Access 2007软件。 FYI – awongCM 2012-01-30 12:23:42

回答

2

感谢您的帮助。

我修好了。原因是因为字符串不是真正的开始对象。所以'Set'关键字是不需要的 - 因为你不需要显式声明String类型的对象!

现在一切都好!

+0

+1好了,我完全错过了:)值得一提的是,您可以通过删除strSQL并立即将RetrieveMembers设置为SQL来缩短代码。 – 2012-01-30 14:07:37

+0

@MattDonnan:是的,我可以这么做。稍后再为我排忧解难。此外,我不知道在这个问题第一次发生时Record Source是一个字符串类型的属性,因此不得不编写长代码,认为它可能需要一个记录集对象......谢谢。 – awongCM 2012-02-02 11:49:57

0

由于您使用的是类模块的工作我想你会需要使用:

Public Property Get RetrieveMembers() As String 

不是:

Public Function RetrieveMembers() As String 
+0

Matt。我试过了。但它不起作用。错误不断抛出函数方法行,即Public Function RetrieveMembers()as String。 – awongCM 2012-01-30 12:22:14

+0

@ AW-GWTF899您是否尝试过使用Access 03运行时而不是07运行它,存在兼容性问题。 – 2012-01-30 13:15:14