INSERT INTO - 错误,但允许输入到表中

问题描述 投票:0回答:1

由于我看不到的原因,我得到了以下错误信息。

编译错误,没有找到方法或数据成员。方法或数据成员未找到

当我使用下面的方法时。

Private Sub cmd_Add_Click()

Dim strSQL As String

strSQL = " INSERT INTO BERTHAGE " _
& "(BOAT, LOCATION, BERTH_WEEK, BERTH_YEAR, BERTHED) VALUES " _
    & Me.Add_Boat & "','" _
    & Me.LOCATION & "','" _
    & Me.txt_week & "','" _
    & Me.txt_year & "','" _
    & Me.In_Port & "');"

cmd_Clear_Click

End Sub

一旦我点击 "确定 "并使用 "刷新 "按钮 条目就会被输入到数据库中 但每次我做一个条目时 我都要进入同样的过程。

我想弄清楚是什么方法或数据缺失?

我应该补充的是,在这个表上有一个outnumber主键字段(Berth_ID),每次我使用cmd_Add按钮都会为新记录创建一个新的ID号。 这包括为触发错误的新记录创建一个新的ID号。

这里是所有与这个表格相关的VBA程序

Private Sub Form_Load()
DoCmd.RunCommand acCmdRecordsGoToLast
End Sub

Private Sub LOCATION_Change()
    Me.txt_Cur_Flo = Me.LOCATION.Column(1)
    Me.txt_Cur_Doc = Me.LOCATION.Column(2)
    Me.txt_Cur_Ori = Me.LOCATION.Column(3)
End Sub

Private Sub cmd_Add_Click()

Dim strSQL As String

strSQL = " INSERT INTO BERTHAGE " _
& "(BOAT, LOCATION, BERTH_WEEK, BERTH_YEAR, BERTHED) VALUES " _
    & Me.Add_Boat & "','" _
    & Me.LOCATION & "','" _
    & Me.txt_week & "','" _
    & Me.txt_year & "','" _
    & Me.In_Port & "');"

cmd_Clear_Click

End Sub

Private Sub cmd_Clear_Click()
Me.Add_Boat = ""
Me.LOCATION = ""
Me.txt_Cur_Flo = ""
Me.txt_Cur_Doc = ""
Me.txt_Cur_Ori = ""  
Me.Add_Boat.SetFocus
End Sub

Private Sub cmd_Close_Click()
DoCmd.Close
End Sub
vba ms-access ms-access-2010
1个回答
2
投票

考虑最好的做法是 参数化 而不是SQL与VBA变量混合的字符串连接。由于缺少引号,编译器试图引用列名而不是其字面值。取而代之的是,考虑使用定义的类型进行参数化,Access SQL支持使用 查询定义(QueryDefs). 下面注意,SQL和VBA是完全分开的。

SQL (保存为存储查询)

PARAMETERS prmBoat TEXT, prmLoc INT, prmBerthed INT;
INSERT INTO BERTHAGE (BOAT, LOCATION, BERTHED)
VALUES(prmBoat, prmLoc, prmBerthed)

VBA

Dim db As Database
Dim qdef As QueryDef
Dim strSQL As String

Set db = CurrentDb
Set qdef = db.QueryDefs("mySavedParamQuery")

' BIND PARAM VALUES
qdef!prmBoat = Me.Add_Boat
qdef!prmLoc = Me.LOCATION
qdef!prmBerthed = Me.In_Port

' EXECUTE ACTION QUERY
qdef.Execute

Set qdef = Nothing
Set db = Nothing

甚至更好的是,保存你的查询,并保留表单控件,只需调用 OpenQuery:

SQL (保存为存储查询)

INSERT INTO BERTHAGE(BOAT, LOCATION, BERTHED)
VALUES(Forms!myForm!Add_Boat, Forms!myForm!LOCATION, Forms!myForm!In_Port)

VBA

Private Sub cmd_Add_Click()
   Dim strSQL As String

   DoCmd.SetWarnings False                   ' TURN OFF APPEND PROMPTS
   DoCmd.OpenQuery "mySavedActionQuery"
   DoCmd.SetWarnings True                    ' RESET WARNINGS

   Call cmd_Clear_Click

End Sub

1
投票

缺少开头的括号 VALUES. 另外,在"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号。Me.Add_Boat. 这些特殊字符必须总是成对的,通过计算是偶数。

如果Berth_Week和Berth_Year是数字字段(应该是),不要使用省略号分隔符。

如果In_Port是一个YesNo字段,不要使用省略号分隔符。


0
投票

问题似乎是我把 "周 "和 "年 "字段的输入重复了,这是因为这些文本框字段已经直接从BERTHAGE表的默认值中获取了周和年的信息。 基本上,我通过每个输入,并单独运行它,等待错误发生。 一旦发生,我就把它从INSERT INFO语句中删除。去掉星期和年份后,一切都正常了。 这是一个痛苦的练习,仍然没有完成,但我又回到了函数formDB,所以当它们发生时,我会接受小胜利。

Private Sub cmd_Add_Click()

Dim strSQL As String
CurrentDb.Execute " INSERT INTO BERTHAGE " & "(BOAT, LOCATION, BERTHED) VALUES ('" &     Me.Add_Boat & "'," _
    & Me.New_Loc & "," _
    & Me.In_Port & ");"

cmd_Clear_Click

DoCmd.Requery

End Sub`
© www.soinside.com 2019 - 2024. All rights reserved.