access2003多表传值的问题。

我有两张表,1和2。1中有字段11,12,2中有字段21,22。字段中11完全等于21。
我根据1做了窗体1。
如何使我在窗体1输入字段11的值时,表2中的字段21的值也同时更新。
也就是说如何做到,一个窗体同时为两张表传值。
做到同步传值应该怎么办,要和绑定的效果一样。
不同步传值应该怎么办,如给你一个按钮事件完成此工作。
高手指点。

关于更新嘛,这个很简单,主要使用Access的更新查询来处理,反映在窗体上,就是在某一特定时刻,运行SQL语句(更新查询).语法为:

Docmd.RunSQL "更新查询语句"

至于是否同步传值,就是上面说过的(某一特定时刻)啦.
同步时,就在窗体1的 AfterUpdate 事件时,来那个 Docmd.RunSQL 语句.
不同步时,就在一个按钮的 Click 事件时,来那个 Docmd.RunSQL 语句.
下面说说关于 SQL 语句:
如果觉得SQL学得慢,可以利用Access的查询 设计视图 来设计好 更新查询 设计好之后,在该查询的 SQL视图 中,就可以看到Access为您写的SQL语句啦.复制下来,贴到事件的Docmd.RunSQL 的后面就好啦.
还有一种方法,就是自定义一个函数,通过参数来选择表、字段、新值及更新的条件.通用过程如下:
Sub MDBUpDate(theTable As String, theFields As Variant, theNewValue As Variant, Optional theWhere As String = "", Optional theLeiBie As Byte = 0)
'作 用: 利用theFields参数和theNewValue参数,及theTable参数构造SQL更新查询(或追加查询)来更新记录,(或在表中追加一条记录)
'参 数: theTable 表名;
' theFields 字段名,读取多个字段时,字段间使用逗号(,)间隔
' theWhere 条件
' theNewValue 字段的新值,数量应于参数theFields的个数对应,各个值之间使用逗号(,)间隔
' theLeiBie 类型(0,更新;1,新记录)
'
'返回值: 子过程非函数,无返回值
'注 意:theNewValue 参数有以下2点要求:

'1.日期间隔用“/”,例如:2010/9/8

'2.文本类型值不能含有逗号(,)
Dim dimFields As Variant, dimvalue As Variant, thenum As Variant, i As Long
'1为字段;2为新值;3为临时变量;4为计数器变量
On Error GoTo thErr
dimFields = Split(theFields, ",")
dimvalue = Split(theNewValue, ",")
'循环检查 新值变量内容 ,如果是 日期型 ,前后加 "#" , 否则 前后加 "'"
For i = 0 To UBound(dimFields)
If IsDate(dimvalue(i)) And InStr(dimvalue(i), "/") > 0 Then
dimvalue(i) = "#" & dimvalue(i) & "#"
ElseIf Not IsNumeric(dimvalue(i)) Then
dimvalue(i) = "'" & dimvalue(i) & "'"
End If
Next i
If theLeiBie = 0 Then
For i = 0 To UBound(dimFields)
If i = 0 Then
thenum = dimFields(i) & " = " & dimvalue(i)
Else
thenum = thenum & " ," & dimFields(i) & " = " & dimvalue(i)
End If
Next i
'运行SQL语句
DoCmd.RunSQL "UPDATE " & theTable & " SET " & thenum & IIf(theWhere = "", "", " WHERE " & theWhere)
Else
For i = 0 To UBound(dimFields)
If i = 0 Then
thenum = dimvalue(i)
Else
thenum = thenum & ", " & dimvalue(i)
End If
Next i
'运行SQL语句
DoCmd.RunSQL "INSERT INTO " & theTable & " ( " & theFields & " ) VALUES (" & thenum & " )"
End If
bye:
Exit Sub
thErr:
MsgBox err.Number & " " & err.Description & vbCrLf _
& "错误在: MDBUpDate " & IIf(theLeiBie = 0, "UPDATE " & theTable & " SET " & thenum & " WHERE " & theWhere, "INSERT INTO " & theTable & " ( " & theFields & " ) VALUES (" & thenum & ")")
GoTo bye
End Sub
上述过程,也要放到标准模块中,之后,就可以在程序的任何地方调用它了,示例一下:
你提的问题:在窗体1的字段[11]更新时,让[表2].[21]完全等于[11],示例在窗体的 AfterUpdate事件中,调用MDBUpdate过程如下:
MDBUpdate "表2","21",me![11],"[表2].[ID]=[表1].[ID]"
不知道你的[表1].[11]中的记录如何与[表2].[21]关联,所以上述语句条件定义的可能不正确,呵呵.追问

我说大神,整个简单的就行了。
sql我基本是0的水平,而vba大概是1吧。(百分制)
所希望大神,整个完整的语句吧,没有什么高要求,两表的字段一模一样就成。
Docmd.RunSQL语句苦爪啊,您老给补完一下。

试了一下下,上代码。
Private Sub Form_Open(Cancel As Integer)
DoCmd.RunSQL "UPDATE 2 SET 2.21 = [1]![11]"
End Sub
提示要更新了但是,神啊表2的21里屁也没有啊。是否更新点否会报错,怎么跳过。我加分。

追答

你的表1和表2里的记录是如何关联呢??
如果每个表里只有一条记录,那好办了.可是现实中,怎么会2和1里都是一条记录呢??
因此,我现在要问你,表1中第一条记录的字段11,对应表2中字段21的哪条记录呢??
换句话说,表1和表2之间的关系是什么??

追问

没有关系,没想太多,就没有什么关系。
记录数当然是复数。
你说的大概明白了点。你的是说赋值时要有一定的顺序或是标准。
不然记录如何对应和排序。
这个我真没有想。
那就假设,两张表有序号字段是主键,关系是一对一。
难到可以用dlookup()。
大神,你说我开了点窍没有?

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
相似回答