Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何进行可编辑的联合查询?_Sql_Ms Access_Ms Access 2007_Ms Office - Fatal编程技术网

Sql 如何进行可编辑的联合查询?

Sql 如何进行可编辑的联合查询?,sql,ms-access,ms-access-2007,ms-office,Sql,Ms Access,Ms Access 2007,Ms Office,在复杂的数据库结构中,我需要为用户提供一种编辑存储在一系列表中的数据的方法。尽管所有数据类型都相同,但它们的名称并不是1:1。为了缓解这种情况,我创建了一个查询,将原始名称(来自外部报告)映射到内部使用的名称;从这些查询中,所有内容都被输入到一个巨大的联合查询中 所有数据类型和字段大小正确对齐 我还需要做什么才能使这个联合查询工作 这是查询背后的当前SQL: SELECT * FROM MappingQuery1 UNION SELECT * FROM MappingQuery2; 编辑: 下

在复杂的数据库结构中,我需要为用户提供一种编辑存储在一系列表中的数据的方法。尽管所有数据类型都相同,但它们的名称并不是1:1。为了缓解这种情况,我创建了一个查询,将原始名称(来自外部报告)映射到内部使用的名称;从这些查询中,所有内容都被输入到一个巨大的联合查询中

所有数据类型和字段大小正确对齐

我还需要做什么才能使这个联合查询工作

这是查询背后的当前SQL:

SELECT * FROM MappingQuery1 UNION SELECT * FROM MappingQuery2;
编辑:

下面的一个答案贴出了一个链接,该链接明确指出,
联合查询中的数据无法更新。我有办法解决这个问题吗?例如:

SELECT * FROM MappingQuery1, MappingQuery2;
这样行吗?请记住,所有字段的类型、大小和名称都是对齐的

当查询是联合查询时,您可以 无法更新查询中的数据

当Access在联合查询中组合来自不同表的行时,各行将丢失其基础表标识。当您尝试更改联合查询中的行时,Access无法知道要更新哪个表,因此它不允许所有更新

以下问题编辑


您可能可以使用VBAADO来更新相应的表。我的方法是确保您的联合表包含一个具有源表id的列以及另一个命名源表的列

e、 g.在你的工会里,你会有这样的事情:

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"

我倾向于将这些单独的表合并到主表中。由于所有数据都在一个表中,这可能会简单得多

但是,假设您有
将各个表分开,请更改映射查询以包含源表名称的字段表达式。并在联合查询中包含该表名字段

然后基于只读联合查询创建一个连续表单。基于另一个查询添加子窗体,该查询从相应的表中返回单个可编辑记录。在主窗体的On Current事件中,重写子窗体查询的行源:

strSQL = "SELECT fields_to_edit FROM " & Me.txtTableSource & _
    " WHERE pkfield =" & Me.txtPKeyField & ";"
Me.SubformName.Rowsource = strSQL
Me.SubformName.Requery

这是一个非常古老的线程,但我正在寻找解决同一问题的方法,并遇到了它。我有一个复选框值,它是通过几个联合查询推送的,当我试图更新它时,我当然不能


然而,我确实找到了一个解决方案,并想与大家分享。在复选框的OnEnter事件中,我只是运行了一个SQL更新查询,该查询更新了基础表中我想要修改的字段。如果是真的,我更新为假,如果是假,我更新为真。瞧

表中的记录具有唯一的主键(具体地说,每个表中的主键对于数据库是完全唯一的,并且是数据集的固有主键,而不仅仅是自动编号)。如果ID不重叠,则可以重新构造表,使其具有包含ID的父表和包含数据的子表。结果查询可能是可更新的(但您必须先对其进行测试)。从表1上的IdTable内部联接表1中选择*。Id=IdTable.Id表2上的IdTable内部联接表2.Id=IdTable.Id以上应使用左外部联接。。唯一的问题是这些值最终会出现在不同的列中。。。结果是可更新的。。也许最好还是坚持VBA解决方案VBA方法可行;然而,我只是一名暑期实习生,我将在一周半后完成这个项目,所以我正在努力使它尽可能容易维护;我想这样的解决方案在这个软件中是站不住脚的,我将不得不坚持使用单独编辑界面的当前模式。“您可能可以使用VBA和ADO来解决这个问题,以更新相应的表”——您尝试过吗?我不能让它工作。使用客户端游标和批处理乐观锁定,我会得到一个错误,“用于更新或刷新的基表信息不足”。使用服务器端游标和乐观锁定,我会得到一个无声的失败。您可以发布一个工作示例吗?您是否可以将您的各个表合并到一个主表中,该主表具有相同的结构,但每行的源表名称有一个额外的字段?请从MappingQuery1、MappingQuery2中选择*;将给您一个笛卡尔查询(一个包含每行所有可能组合的结果集)-它将不可编辑。我同意HansUp的观点。HansUp认为数据库结构不是最优的。作为一名经验丰富的诊断专家(坦白说,我主要是诊断我自己的问题),我认为这很可能是真的。如果是的话,这个挑战将被许多其他人所接受。我支持这个建议(事实上,这就是我要建议的)。事实上,我有一个标准做法,即我将所有连续/数据表表单设置为只读(除了一些显著的例外,例如发票明细项)。