2012-09-25 263 views
1

我试图移动到具有特定ID的记录。通过ID查找记录

我试着对这个职位的解决方案:MS Access search for record by textbox instead of dropdown

,但没有成功

这里是我的代码

Private Sub btnShowPrevious_Click() 
    Dim rs As DAO.Recordset 
    Set rs = Me.RecordsetClone 
    rs.FindFirst "[ID]=" & ParentID 
    If rs.NoMatch Then 
     MsgBox "Sorry, no such record '" & ParentID & "' was found.", _ 
       vbOKOnly + vbInformation 
    Else 
     Me.Recordset.Bookmark = rs.Bookmark 
    End If 
    rs.Close 
End Sub 

它总是打不匹配,但的parentID = 1,并有一个记录与ID = 1 ..

任何人都有什么错误的想法?

谢谢

的记录源是此表:

CREATE TABLE [dbo].[ProposalFollowUp](
[ID] [int] IDENTITY(1,1) NOT NULL, 
[ProposalID] [int] NOT NULL, 
[MillID] [int] NULL, 
[ClientID] [int] NULL, 
[Comment] [nvarchar](max) NULL, 
[Method] [nvarchar](128) NULL, 
[Contact] [int] NULL, 
[ContactDate] [datetime] NULL, 
[Done] [bit] NOT NULL, 
[CreatedBy] [nvarchar](50) NULL, 
[CreatedDate] [datetime] NULL, 
[ModifiedBy] [nvarchar](50) NULL, 
[ModifiedDate] [datetime] NULL, 
[EAIEmployee] [nvarchar](50) NULL, 
[PersonInCharge] [nvarchar](50) NULL, 
[ParentID] [int] NULL, 

这里的表单属性的截图

enter image description here

Finaly,如果我表现出的导航栏,我可以看到有一个过滤器。 可能是因为我开这样的

DoCmd.OpenForm "ProposalsFollowUp", , , "[ID] = " & txtID, acFormEdit, acDialog 

形式。如果我删除的过滤器,它的工作原理。

好吧 下面是最终代码

Private Sub btnShowPrevious_Click() 
    Dim parent As Integer 
    parent = ParentID 
    Me.Filter = "" 
    Dim rs As DAO.Recordset 
    Set rs = Me.RecordsetClone 
    rs.FindFirst "[ID]=" & parent 
    If rs.NoMatch Then 
     MsgBox "Sorry, no such record '" & parent & "' was found.", _ 
       vbOKOnly + vbInformation 
    Else 
     Me.Recordset.Bookmark = rs.Bookmark 
    End If 
    rs.Close 
End Sub 
+1

什么是你的记录源? – Fionnuala

+0

谢谢,问题现在更新 – Marc

+1

您的示例代码适用于链接SQL Server表。你如何连接表以及表单的recordource属性是什么?你有没有过滤器? – Fionnuala

回答

1

检查一切显而易见的,例如确保记录包括您正在搜索,并且没有过滤器的数据后,可以考虑与形式的问题。一个过滤器,Access 2010中显示在表格的底部,并且可以在VBA被移除:

Me.FilterOn = False 

或通过点击过滤器按钮:

form filter access 2010

奇怪的事情在前面发生的事情往往是由于某种形式的腐败。在开发时,您需要定期备份,压缩并修复和反编译。如果您有链接表格,刷新链接通常是一个好主意。

如果您创建的表单不会丢失并且已损坏,则可以使用剪切和粘贴复制到新表单,也可以将其导出为文本并导入。

反编译:

"c:\Program Files\Microsoft office\office\msaccess.exe" /decompile "c:\My Documents\MyDatabase.mdb" 

- http://allenbrowne.com/ser-47.html

另存为文本:

Application.SaveAsText acForm, "FormName", "z:\docs\tmp.txt" 
Application.LoadFromText acForm, "restoredForm", "z:\docs\tmp.txt"