access数据库SQL中insert语句中value某个参数用select获得,如何实现?

insert的数据有多个参数,其中有几个参数想通过查询语句查出来,但把select写入value语句中,运行时会说“查询输入必须包含至少一个表或查询”
代码如下
-------------------------------------------------------------------------------------------------------------------------
INSERT INTO 房屋报修维修表 ( 报修时间, 小区名, 楼层数, 报修房间, 报修房主姓名, 报修房主联系方式, 报修项目1, 报修项目2, 报修项目3, 维修费用, 是否交款 )
VALUES (FormatDateTime(now(),0), forms![住户报修登记]!combo1, forms![住户报修登记]!楼层, forms![住户报修登记]!房间号,
//就这里会出错,单独拿出来没问题的
(select 住户表.住户姓名 from 住户表 where( 住户表.住户所在小区=forms![住户报修登记]!combo3 and 住户所在楼层=forms![住户报修登记]!楼层 and 住户表.住户所在房间号=forms![住户报修登记]!房间号 and 住户表.是否为户主=true)),
(select 住户表.住户联系方式 from 住户表 where (住户表.住户所在小区=forms![住户报修登记]!combo3 and 住户表.住户所在楼层=forms![住户报修登记]!楼层 and 住户表.住户所在房间号=forms![住户报修登记]!房间号 and 住户表.是否为户主=true)),
forms![住户报修登记]!combo9,
forms![住户报修登记]!combo11,
forms![住户报修登记]!combo13,
(select sum(收费表.收费价格) from 收费表 where( 收费表.报修项目=forms![住户报修登记]!combo9 or 收费表.报修项目=forms![住户报修登记]!combo11 or 收费表.报修项目=forms![住户报修登记]!combo13)),
false);

按如下方式获得:

如,access库中有以下两张表:

现要将测试表1的数据追加到测试表中,其中测试表1的NAME列为参数,AGE为固定值20,需要select获得。

可用如下语句:

insert into æµ‹è¯•è¡¨(name,age) select name,20 from  æµ‹è¯•è¡¨1

追加后的结果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-29
给你个思路 将你所需要得到的参数写一个方法 你看看那个报修时间还不一样是用方法得到的 很傻很简单的方法就是将你所需要的每一个参数都写一个方法 然后方法的返回值就是你所需要的参数
比如function string a(int id)
{
stirng sql="select name from user where id="+id;
DataTable dt=...; 这里将查询的结果放入表中

return dt.Rows[0];

}
然后在插入语句中的报修房主姓名的参数写a(id)
如果你所需要的参数在同一张表 你可以查询你所需要的所有参数 然后放入一张内存表中 自己编辑列名 这样就可以只需写一个方法本回答被提问者和网友采纳
第2个回答  2013-11-29
多写一点语句,
先执行查询,将查询得到的字体结果读入到到变量,然后用AddNew方法,
with 房屋报修维修表
.AddNew
.Fields("报修时间")=...
.Fields("报修房主姓名")=读出姓名的变量名
....
.Update追问

是写查询还是直接加到事件里面呢,写到查询里面是错的呀

追答

你是ACCESS,可以写到事件里
Dim xRst As New ADODB.Recordset
Dim pName As String
dim xPhone as String '假定联系方式是字符型的字段
dim xExpense as Double
xRst.Open "select 住户表.住户姓名,住户表.住户联系方式 from 住户表 where( 住户表.住户所在小区=forms![住户报修登记]!combo3 and 住户所在楼层=forms![住户报修登记]!楼层 and 住户表.住户所在房间号=forms![住户报修登记]!房间号 and 住户表.是否为户主=true)" , CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If xRst.RecordCount > 0 Then
'没有这个住户
Msgbox "没有这个住户 "
else
pname=xrst.fields("住户姓名")
xPhone=xrst.fields("住户联系方式")
endif
xRst.Open "select sum(收费表.收费价格) from 收费表 where( 收费表.报修项目=forms![住户报修登记]!combo9 or 收费表.报修项目=forms![住户报修登记]!combo11 or 收费表.报修项目=forms![住户报修登记]!combo13)", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If xRst.RecordCount > 0 Then
'没有这个住户
Msgbox "没有查找到收费 "
else
xExpense=xrst.fields(0)
endif
with 房屋报修维修表
.AddNew
.Fields("报修时间")=...
.Fields("报修房主姓名")=pName
.Fields("维修费用")= xExpense
....
.Update
end with

第3个回答  2013-11-29
这个可以处理追问

具体一点,谢谢了