为什么用了union查询后,对结果进行修改会报错
为对查询结果进行修改会报“缺少用于更新或刷新的基本表信息” 的错误。单表操作的时候没事啊。 --------------------编程问答-------------------- SQL语句贴出来看看 --------------------编程问答-------------------- union 需要连接的两个子表具有相同的字段数和数据类型才可以,你先检查一下! --------------------编程问答-------------------- s = "select * from (" & _"select * from 车辆排班 where instr(车牌,'" & a & "') and 日期 <>null and cdate('" & b & "')>=cdate(操作日期) " & _
"Union All " & _
"select * from 车辆排班二 where instr(车牌,'" & a & "') and 日期 <>null and cdate('" & b & "')>=cdate(操作日期)) A " & _
"order by cdate(A.操作日期) desc " --------------------编程问答-------------------- 查询
"select * from(select * from 车辆排班 where 车牌='" & a & "' and 日期<>null and cdate('" & b & "')>=cdate(操作日期) union all select * from 车辆排班二 where 车牌='" & a & "' and 日期<>null and cdate('" & b & "')>=cdate(操作日期)) order by cdate(操作日期) desc"
修改
If Adodc4.Recordset.Fields("打印结算") = "不打印" Then
Adodc4.Recordset.Fields("打印结算") = "打印"
Else
Adodc4.Recordset.Fields("打印结算") = "不打印"
End If
Adodc4.Recordset.Update
Adodc4.Refresh --------------------编程问答-------------------- 对多表查询的记录集不支持直接更新。
可以用 SQL 命令来进行单表更新。
也可以用非连接的记录直接更新,再重新连接。不过比较麻烦。
--------------------编程问答-------------------- 真的不建议如此操作数据库。 --------------------编程问答-------------------- 联表查询可以,不可以更新 --------------------编程问答-------------------- 我也不想这样建数据库,本来单表好好的。我用ADODC控件,应该不支持SQL语句更新吧。还有什么方法啊? --------------------编程问答--------------------
基本上不用ADODC控件,你可以尝试用Adodc1.Recordset.ActiveConnection.Execute SQL 来更新数据... --------------------编程问答-------------------- 楼上的能不能给个例子?把整个语句写出来 --------------------编程问答-------------------- Adodc1.Recordset.ActiveConnection.Execute 也是要对单一表处理的。
可以这样:
Adodc1.Recordset.ActiveConnection.Execute "Update Table 车辆排班 Set 日期 = #" & Format(你的日期输入控件, "yyyy-mm-dd") & "# Where 车牌='" & Adodc1.Recordset!车牌 & "'"
Adodc1.Recordset.ActiveConnection.Execute "Update Table 车辆排班二 Set 日期 = #" & Format(你的日期输入控件, "yyyy-mm-dd") & "# Where 车牌='" & Adodc1.Recordset!车牌 & "'"
虽然两个表都操作了,但不含所选车牌的那个表不会被更新。 --------------------编程问答-------------------- 试了,楼上的方法不行啊 --------------------编程问答-------------------- 关注...回复内容太短了! --------------------编程问答--------------------
我测试了,可以:
--------------------编程问答-------------------- 有UNION / JOIN 等语句产生的结果集是不能直接更新的.
Dim myAdodc As Adodc
Set myAdodc = Adodc1
With myAdodc
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " _
& "Data Source=" & App.Path & "\CropData1.mdb;Persist " _
& "Security Info=False;Jet OLEDB:Database Password=123"
.RecordSource = "select * from seed where 1=0"
.Refresh
.Recordset.ActiveConnection.Execute "Update seed set cropname='山楂' where itemid=8"
End With
Set myAdodc = Nothing
另外查看了楼主的SQL语句不需要Union也能办到的.直接JOIN不更好?
--------------------编程问答--------------------
直接贴过去一定不行的。那是给你一个思路,要根据你的数据库的情况改一下。
补充:VB , 数据库(包含打印,安装,报表)