由于我看不到的原因,我得到了以下错误信息。
编译错误,没有找到方法或数据成员。方法或数据成员未找到
当我使用下面的方法时。
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
考虑最好的做法是 参数化 而不是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
缺少开头的括号 VALUES
. 另外,在"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号,"...... "前还缺失了省略号。Me.Add_Boat
. 这些特殊字符必须总是成对的,通过计算是偶数。
如果Berth_Week和Berth_Year是数字字段(应该是),不要使用省略号分隔符。
如果In_Port是一个YesNo字段,不要使用省略号分隔符。
问题似乎是我把 "周 "和 "年 "字段的输入重复了,这是因为这些文本框字段已经直接从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`