在一个复杂的数据库结构的过程中,我需要提供与存储在一系列表的编辑数据的装置中的用户。 虽然所有的数据类型是相同的,他们不排队1:1在他们的名字。 为了缓解这个问题,我创建了一个映射原来的名称(来自外部的报告)的内部使用的名称的查询; 从这些疑问,一切都被送入一个巨大的UNION查询。
所有的数据类型和字段大小正确对齐。
这样做还有什么我需要做的,使这个UNION查询工作?
这是查询背后的当前SQL:
SELECT * FROM MappingQuery1 UNION SELECT * FROM MappingQuery2;
编辑:
以下的答案发布一个链接到一个知识库文章认为肯定地说,在一个数据状态UNION
查询无法进行更新。 有没有什么办法可以解决此问题? 例如:
SELECT * FROM MappingQuery1, MappingQuery2;
将这项工作? 请记住,所有的字段中的类型,大小,和名称一致。
当查询是联合查询,您将无法更新查询中的数据。
http://support.microsoft.com/kb/328828
当访问组合在一个联合查询不同的表行,各行失去了基础表的身份。 访问不知道你的意思是要更新的表,当你试图在联合查询到更改行,所以它不允许的所有更新。
以下问题编辑 :
你也许可以解决此使用VBA和ADO更新相应的表。 我会处理这个的办法是,以确保您的工会表中包含有从源表中的ID与另一列名称的源表沿列。
例如,在你的工会,你就会有这样的事情:
SELECT 'Table1', id, ... FROM Table1
UNION
SELECT 'Table2', id, ... FROM Table2
然后通过数据输入窗体和VBA你可以看看当前所选行的值,并更新相关表格。
编辑2:对于onedaywhen
这将值插入使用Access VBA表
Option Compare Database
Option Explicit
Public Sub InsertDataPunk(TargetTable As String, IdVal As Long, MyVal As String)
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
Dim sql As String
'You could build something fancier here
sql = "INSERT INTO " & TargetTable & " VALUES (" & IdVal & ",'" & MyVal & "')"
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = adCmdText
cmd.Execute
End Sub
InsertDataPunk "Table2", 7, "DooDar"
我更倾向于将那些单个表合并为一个主表。 在一个表中的所有数据,这可能是一个容易许多。
但是,假设你必须保持indiviual表分开,改变你的映射查询包括源表的名称字段表达式。 并且包括在联合查询表名称字段。
然后创建基于只读UNION查询连续形式。 添加基于另一个查询返回的相应表中的单个记录编辑子窗体。 在主窗体的在目前的情况下,改写为行来源子窗体的查询:
strSQL = "SELECT fields_to_edit FROM " & Me.txtTableSource & _
" WHERE pkfield =" & Me.txtPKeyField & ";"
Me.SubformName.Rowsource = strSQL
Me.SubformName.Requery
这是一个非常古老的线程,但我一直在寻找一个解决方案,同样的事情,碰到它。 我有一种是通过几个联合查询推一个复选框值,当我试图更新它,我当然不能。
但是,我没有找到一个解决方案,我想我会分享它。 在复选框的OnEnter事件,我只是跑了更新,我想修改基础表中的字段的SQL更新查询。 如果这是真的我更新为False,如果假我更新为true。 瞧!