2011-03-21 22 views
0

使用MS Access创建一个简单的用户界面,希望实现最少的实际编码(实际上帮助不是编码人员的朋友)。MS Access 2007 - 尝试插入重复记录后控制用户界面行为

简化要求:单表,主键是电话号码,还有很多其他非必填字段。显示一个只允许输入电话号码的表格,如果带有该键的记录存在,则显示完整记录,如果带有该键的记录不存在,则会显示一个表格,允许为该电话号码输入其他字段,因此创建一个新的记录。

Q1:任何简单的方法来实现这种功能?例?

我们已经得到了一些符合标准格式的内容,如果插入失败,可以执行代码,但会显示一个标准对话框,警告关于双重键违规。问题2:我们如何捕获试图插入的内容,避免让对话出现?

+0

输入数据的人有一堆电话号码,有些已经在系统中,有些则不是。他们输入一个数字,它可能已经在那里,在这种情况下提出记录,否则创建一个新数据并捕获其他数据。 (我知道这听起来有点奇怪,但这种情况确实有道理。) – djna 2011-03-22 08:13:24

回答

0

凯文罗斯使用VB代码的建议显然是一种方法,我认为如果我们预计未来不那么微不足道的要求,它就是合适的。然而,我正处于一种情况,我正在帮助一个零编码背景的人,因此如果可能的话,我宁愿让他们使用简单的宏而不是全尺寸的VB。

碰巧我需要的功能可以用宏来实现,它取决于iDevelop的建议。

我所使用的溶液的轮廓:

创建InitialEntry形式没有关联到任何特定的表,它具有:

  • 的电话号码
  • 一个数据输入字段一个只读的文本框,我可以在其中显示一条消息
  • 一个按钮标记为添加
  • 按钮标记显示

我写了三个宏:

  1. AlreadyExists显示一个消息说: “我们已经是一个”
  2. NewEntry那打开我的表的数据输入表单,在添加模式下,以及从InitialEntry复制电话号码!电话号码
  3. TestForExisting此使用条件

    DCount("*","MyTable","[PhoneNumber] = [FormPhoneNumber] ") > 0 
    

来控制是否执行AlreadyExists,和类似的试验,以控制是否调用NewEntry。

尽管这并不像VB那么高效,但它似乎可以被非编码者理解,所以至少我们可以实现我们的应用程序。

+0

宏吸。这从来不是一个好主意。但是,在最近的Access版本中,宏已经被赋予错误处理和一些非常有用的功能,所以值得考虑。不过,Pre-Access 2007应该避免像鼠疫这样的宏。它们是维护和文档噩梦,并且根本没有错误恢复。 – 2011-05-06 03:54:55

1

你将不得不弄脏你的手并写一些代码来获得这个结果。一个起点将是这样的presto代码。如果你卡在任何部件上,请回邮。

If fCheckIfRecordExists(lYourKey)=True then 
    Docmd.OpenForm “frmEditExistingRecord” 
Else 
    Docmd.OpenForm “frmEnterNewRecord” 
End if 

Public function fCheckIfRecordExists (lYourKey as Long) as Boolean 
‘Code to check if a record exists, simple method is to use dLookup or a count SQL statement with the criteria as the key you are trying to find 
End function 

编辑:

首先第一件事情做与1个名为txtPhone_number文本框,并呼吁cmdSearch一个命令按钮的形式。

下一页把这段代码模块中的形式

Public Function fDoes_record_exist(strPhone_number As String) As Boolean 
If DCount("Phone_number", "tblYour_table", "Phone_number=" & strPhone_number) > 0 Then 
    fDoes_record_exist = True 
Else 
    fDoes_record_exist = False 
End If 
End Function 

接下来,你需要把一些代码的命令按钮的单击事件的背后。此代码可扩展上后,检查是否有有效的电话号码,如果你想

If fDoes_record_exist(Me.txtPhone_number) = True Then 
    DoCmd.OpenForm "frmShow_existing_record" 
Else 
    DoCmd.OpenForm "frmEnter_new_record" 
End If 

这应该设置你的方式很好,但回来后,如果您遇到问题

+0

谢谢,我曾预料过,像这样的代码可能就是这样,想要确保没有任何事情可以做到。现在去找出我们把代码放在哪里:-) – djna 2011-03-22 18:35:27

+0

作为Access的新手我不理解如何应用这个解决方案 - 当我将一个宏与一个表单动作关联时,我会看到一个电子表格样式数据条目面板与行动和条件分开columnes。使用Dcount()我已经取得了一些进展(请参阅http://stackoverflow.com/questions/5519063/microsoft-access-2007-macro-issue-form-and-database-with-phone-numbers)但也许你是建议采用不同的方法? – djna 2011-04-01 21:30:39

+0

@djna抱紧我今天晚些时候会酝酿一个更完整的例子,并编辑我的答案。 – 2011-04-04 07:03:33

1

这里的概述使用访问逻辑处理:

您需要一个unboud控件在表头中标记为Phone,其中用户将能够输入要搜索的电话号码。您需要使用该控件的After_Update事件来触发您的搜索。此时将会有第二个电话控件,绑定,位于表单的详细信息部分中,以便进行有效的数据录入/更新。

使用Form_Error事件来截取错误消息,当用户尝试保存重复键时,为了显示一个很好的消息,并最终取消他的更改。