jef*_*ter 2 ms-access ms-access-2007
我正在使用Access 2007并拥有这样的数据模型......
乘客 - 预订 - 目的地
因此,1名乘客可以进行多次预订,每次预订1个目的地.
我的问题...
我可以创建一个表单以允许输入乘客详细信息,但是我想添加一个下一个按钮来带我到表单输入预订的详细信息(即只是一个简单的目的地下拉列表).我添加了NEXT按钮,它有事件
RunCommand SaveRecord
OpenForm Destination_form
Run Code Online (Sandbox Code Playgroud)
但是,我无法确定如何将新表格传递给刚刚输入的乘客的主要钥匙(PassengerID).
我真的只想要一个表格,并允许输入乘客的详细信息和目的地的选择,然后在2个表格(乘客和预订)中创建条目,但我不能得到工作要么.
有人可以帮帮我吗?
谢谢Jeff Porter
实际上我在这里给出的最好的建议是不实际传递参数.在表单的on-open事件中简单,或者更好的是使用稍后的on-load事件只是为了在代码中选择一个PREVIOUS调用表单的引用.这种方法的优点在于,如果超时从一个参数转到10个参数,那么您不必修改参数解析代码,甚至不必修改调用代码.实际上,如果您决定检查调用表单中的先前值,则无法修改AT ALL.
因此,请记住使用开放式args只是一种单向事件.您不能使用它将值返回给调用表单.此外,所有的开放式参数都必须是弦乐.所以,你失去了任何约会打字的能力,比如真正的整数,甚至是日期和时间格式,这可能是解析出来的问题.正如你可以看到这里的例子,解析字符串的代码无论如何都会变得有点混乱.
简单的解决方案是,在需要来自PREVIOUS的值的每种形式中,只需声明模块级变量,如下所示
Dim frmPrevous as form.
Run Code Online (Sandbox Code Playgroud)
然后在加载事件的表单中,只需选择上一个表单的名称,如下所示:
Set frmPrevious = screen.ActiveForm
Run Code Online (Sandbox Code Playgroud)
这就对了.我们完了!
我们这里只写了一行代码.(如果包含声明声明,请确定两个).此时,在表单的当前代码中的任何位置,您可以通过执行以下操作引用事件属性以及上一表单中的任何字段或值
Msgbox "PK id of previous form = " & frmPrevious.ID
Run Code Online (Sandbox Code Playgroud)
让我们说出于某种原因,您希望以前的表单以连续的形式重新加载记录.然后我们可以去:
frmPrevious.Requery
Run Code Online (Sandbox Code Playgroud)
或者,强制记录保存:
frmPrevious.Dirty = false
Run Code Online (Sandbox Code Playgroud)
因此,上面的内容几乎与在当前代码中使用"ME"一样自然和方便.我发现这很简单容易,我认为这应该是首先访问的一部分.
如上所述,使用是无止境的,我可以从调用表单中检查任何列或值.您甚至可以将变量和函数声明为public,然后可以使用它们.
并且,请注意,这两种方式都有效.我可以在调用表单中填充和更改值.所以我可以从调用表单更新或更改任何值/列/控件的值.
并且绝对不需要解析.此外,如果通过不同的形式调用相同的现有表单,则上述代码步骤甚至可以工作.在所有情况下,可以在不修改代码的情况下拾取表单调用ID.
即使在这种情况下,我有许多不同的表单启动并调用这个特定的表单,你仍然可以拉出ID列.并且,在列可能与不同形式不同的情况下,您可以简单地在SAME名称的调用形式中声明公共变量或公共函数.因此,如果我想调用需要DateCreate的表单,但每个表单都没有DateCreate的一致列名(可能是invoiceDateCreate和inventory Date Create),那么您只需在调用表单中使用常量名称声明一个公共函数.然后我们可以去:
Msgbox "Date created of calling form record = " & frmPrevious.DateCreated
Run Code Online (Sandbox Code Playgroud)
因此,创建的日期可以是以前形式的公共变量或公共函数,可以是数据库中的任何可想到的列.
所以不要在表单之间传递值,只需传递对调用表单的引用,这不仅比这里显示的其他方法更灵活,它也是一种面向对象的方法,在这种方法中你不仅限于传递值.
您只需设置所需的任何控件的值(frmPrevous.SomeContorlName),也可以在调用表单中返回值.
如上所述,您不仅限于传递值,而是完全使用代码,诸如脏的属性以及调用表单中存在的任何其他内容.
我有一个标准的编码实践,几乎每种形式都采用上述方法.我只是声明并设置前一个引用的表单.这导致一个方便的先前表单引用在编写代码时与"ME"引用一样有用.
使用这种编码标准,我还可以在不同形式的不同名称之间剪切和粘贴代码,作为一般规则,我的代码将继续运行而无需修改.
另外一个例子我的所有表单都有一个名为MyDelete的公共函数,它当然会删除表单中的记录,因此如果我想出于某种原因删除前一个调用表单中的记录,那么执行以下操作就是一件简单的事情.
frmPrevious.MyDelete
Run Code Online (Sandbox Code Playgroud)
所以我可以在以前的表格中保存数据.我可以重新查询前一个表单,我可以在前一个表单中运行代码,我可以将值返回到上一个表单,我可以检查值和所有列,只需要一行代码来设置对调用的引用形成.
| 归档时间: |
|
| 查看次数: |
6144 次 |
| 最近记录: |