当前位置:编程学习 > VB >>

为什么用了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语句更新吧。还有什么方法啊? --------------------编程问答--------------------
引用 8 楼 asiawen 的回复:
我也不想这样建数据库,本来单表好好的。我用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!车牌 & "'"

虽然两个表都操作了,但不含所选车牌的那个表不会被更新。 --------------------编程问答-------------------- 试了,楼上的方法不行啊 --------------------编程问答-------------------- 关注...回复内容太短了! --------------------编程问答--------------------
引用 12 楼 asiawen 的回复:
试了,楼上的方法不行啊


我测试了,可以:

    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
--------------------编程问答-------------------- 有UNION / JOIN 等语句产生的结果集是不能直接更新的.
另外查看了楼主的SQL语句不需要Union也能办到的.直接JOIN不更好?


--------------------编程问答--------------------
引用 12 楼 asiawen 的回复:
试了,楼上的方法不行啊


直接贴过去一定不行的。那是给你一个思路,要根据你的数据库的情况改一下。
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,