Office中国论坛/Access中国论坛

标题: 求助! 报错: "." "!" "()" 的非法使用 ?? [打印本页]

作者: 紫风    时间: 2011-11-3 16:50
标题: 求助! 报错: "." "!" "()" 的非法使用 ??
今天新做了个主-子窗体,出现了个怪问题:

主窗体:未绑定窗体,子窗体源:tbl配件清单temp
主窗体里有字段 维修id 和 Cmd查询。
意图:
输入 维修id,点击查询,子窗体刷新后只显示该维修id的配件清单记录。
我的代码(红色字体就是系统提示报错的部分):
Private Sub Cmd查询_Click()
    Dim Stemp As String
    Dim rs As New ADODB.Recordset
   
    Stemp = "SELECT [tbl维修].* FROM [tbl维修] WHERE 维修ID LIKE '" & Me.维修ID & "'"
    rs.Open Stemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        With rs
            Me.维修ID = ![维修ID]
            Me.日期 = ![日期]
            Me.维修类型 = ![维修类型]            
        End With
    rs.Close
    Set rs = Nothing
   
    DoCmd.SetWarnings False
    DoCmd.RunSQL " Insert Into tbl配件清单temp Select tbl配件清单.* Where 维修id Like ' " & 维修ID & " ' "
    DoCmd.SetWarnings True
    Me.frm配件清单child.Form.Refresh
   
End Sub

我之前做的也是这样,怎么就没这个报错呢?我把另外一个不报错的窗体代码看了过百次了,还是没发现区别……
各位兄弟姐妹帮看一下问题出在哪里了呀????拜谢!!!!
作者: tz-chf    时间: 2011-11-3 22:54
select不用from啊?
作者: 紫风    时间: 2011-11-4 09:31
本帖最后由 紫风 于 2011-11-4 09:31 编辑

回楼上,我有试过用FROM,但是由于以下原因,所以就不用FROM了:
数据库里有2个表:
1. tbl配件清单
2. tbl配件清单temp
从表名上就能看出来tbl配件清单temp是做给tbl配件清单的临时表,但是temp表比原表少一个字段"ID",所以当我用from时系统报错提示:insert into 包含以下未知字段语句:"id"。
这样,我把库上传上来,麻烦帮我看一下如何解决好么?谢谢!
问题就在frm维修的Cmd查询里。
作者: yehf    时间: 2011-11-4 10:00
"INSERT INTO tbl配件清单temp ( 维修ID, 配件ID, 配件名称, 单位, 规格, 供应商, 生产厂家, 生产日期, 产地, 单价, 数量, 金额 )
SELECT 维修ID, 配件ID, 配件名称, 单位, 规格, 供应商, 生产厂家, 生产日期, 产地, 单价, 数量, 金额
FROM tbl配件清单
WHERE 维修ID=" & me.维修id
作者: tz-chf    时间: 2011-11-4 10:02
你那样的我没写过,我都写全的。
insert into 那个表 (字段1, 字段2,....) select 字段1, 字段2,.... from 这个表 where......
作者: 紫风    时间: 2011-11-4 10:48
感谢楼上两位的帮助!问题解决了!就是因为temp表里少了个ID字段的问题,所以要一个个字段来!
作者: yehf    时间: 2011-11-4 15:27
Function InsertSQL(TargetTbl As String, SourceTbl As String, WhereCondition As String)
    Dim tbl    As DAO.TableDef
    Dim str    As String
    Dim i      As Byte
    Set tbl = CurrentDb.TableDefs(TargetTbl)
    For i = 0 To tbl.Fields.Count - 1
        str = str & tbl.Fields(i).Name & ","
    Next
    str = Left(str, Len(str) - 1)
    str = "INSERT INTO " & TargetTbl & "(" & str & " ) SELECT " & str & " FROM " & SourceTbl & WhereCondition
    DoCmd.RunSQL str
End Function

Call InsertSQL("tbl配件清单temp", "tbl配件清单", "WHERE 维修ID=" & Me.维修id)

循环目标表字段,可以保证不会出现字段不匹配情况,而且以后增减字段,也不用从写代码
作者: 紫风    时间: 2011-11-4 15:35
谢谢楼上!!!{:soso_e113:}




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3