And*_*lli 6 sql ms-access ms-access-2007 ms-office
在复杂的数据库结构过程中,我需要为用户提供一种编辑存储在一系列表中的数据的方法.尽管所有数据类型都相同,但它们的名称中不会按1:1排列.为了缓解这种情况,我创建了一个查询,将原始名称(来自外部报告)映射到内部使用的名称; 从这些查询中,所有内容都被输入到一个巨大的UNION查询中.
所有数据类型和字段大小都正确排列.
我还需要做些什么来使这个UNION查询工作?
这是查询背后的当前SQL:
SELECT * FROM MappingQuery1 UNION SELECT * FROM MappingQuery2;
Run Code Online (Sandbox Code Playgroud)
编辑:
下面的答案发布了一篇知识库文章的链接,该文章肯定地说明了UNION
查询中的数据无法更新.有什么方法可以解决这个问题吗?例如:
SELECT * FROM MappingQuery1, MappingQuery2;
Run Code Online (Sandbox Code Playgroud)
这会有用吗?请记住,所有字段都在类型,大小和名称中对齐.
我倾向于将这些单独的表合并到主表中.将所有数据放在一个表中,这可能会轻松得多.
但是,假设您必须将各个表分开,请更改映射查询以包含源表名的字段表达式.并在UNION查询中包含该表名字段.
然后基于只读UNION查询创建连续表单.根据另一个查询添加子表单,该查询从相应的表中返回单个可编辑记录.在主窗体的On Current事件中,为子窗体的查询重写RowSource:
strSQL = "SELECT fields_to_edit FROM " & Me.txtTableSource & _
" WHERE pkfield =" & Me.txtPKeyField & ";"
Me.SubformName.Rowsource = strSQL
Me.SubformName.Requery
Run Code Online (Sandbox Code Playgroud)
当查询是Union查询时,您无法更新查询中的数据.
http://support.microsoft.com/kb/328828
当Access在联合查询中组合来自不同表的行时,各个行将丢失其基础表标识.当您尝试更改联合查询中的行时,Access无法知道您要更新的表,因此它不允许所有更新.
以下问题编辑:
您可以使用VBA和ADO来更新相应的表.我接近这个的方法是确保你的union表包含一个列,该列具有源表中的id以及另一个命名源表的列.
例如,在你的工会你会有这样的事情:
SELECT 'Table1', id, ... FROM Table1
UNION
SELECT 'Table2', id, ... FROM Table2
Run Code Online (Sandbox Code Playgroud)
然后通过数据输入表单和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"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10881 次 |
最近记录: |