access2007从窗体向表中输入数据

INSERT INTO 购票信息登记表
values ( [forms]![购票登记信息界面]![Text0] ,
[forms]![购票登记信息界面]![Text2] ,
[forms]![购票登记信息界面]![Text4] ,
[forms]![购票登记信息界面]![Text6] ,
[forms]![购票登记信息界面]![Text8] ,
) ;

为什么说是语法错误?我想把在一个窗体输入的数据导入表中。。。

要将窗体中非绑定文本框输入的数据插入数据表中比绑定控件的方法要灵活得多,但是对于一个数据库及其应用程序编程初学者来说这绝非一件易事,因为其中涉及的相关知识和细节很多不太容易弄清楚,稍有不慎就会出错!这常常会让不少初学者们感到沮丧。现在手把手一一道来。

首先我们来分析一下你贴出的SQL代码,这是一个在INSERT INTO 语句中直接引用窗体控件的SQL代码,其思路是对的,但是有一点小毛病,结尾括号前多了一个逗号,应予以删除。另外,该语句未指定字段名称,这种情况下就必须在后面的values()内指定全部参数值,而且顺序不能搞错,否则语句运行时会报错。建议修改如下:
INSERT INTO 购票信息登记表 (字段1,字段2,字段3,字段4,字段5)
values ([forms]![购票登记信息界面]![Text0] ,
[forms]![购票登记信息界面]![Text2] ,
[forms]![购票登记信息界面]![Text4] ,
[forms]![购票登记信息界面]![Text6] ,
[forms]![购票登记信息界面]![Text8] )
特别说明一下,这种在SQL语句中直接引用窗体控件的写法只能应用于ACCESS窗体属性、控件属性和ACCESS查询对象中(用编程的方法设置为相应的控件值也行),其它情况下ACCESS数据库JET引擎无法识别。如果你要在ACCESS窗体点击某个按钮运行上述SQL代码,可以这样做,先将上述直接引用控件的SQL代码保存为一个操作查询,取名“插入购票信息”,在该按钮的单击事件过程里用DoCmd对象的OpenQuery方法运行该查询即可,
具体写法为:DoCmd.OpenQuery "插入购票信息"
这里强调一下,即使操作查询的SQL代码完全正确也不能保证其可以正确运行,我们还要充分考虑插入数据的类型、数据完整性、有效性规则、是否允许空值、不能向自动ID字段插入数据和是否唯一索引等诸多因素,否则出错在所难免。

为了便于理解,下面给出一个在ACCESS窗体中将非绑定文本框中输入数据插入数据表的实例供参考,请仔细阅读相关代码和注释,这对提高你的ACCESS水平非常有用。

编写实例前先假设购票信息登记表结构如下:
购票ID(文本,无重复,必填字段)
票名称(文本,允许重复,必填字段)
数量(长整型数字,允许重复,必填字段)
购票日期(时间日期,允许重复,必填字段)
备注(文本,允许重复,非必填字段)

在窗体中一般推荐使用非直接引用窗体控件(常规)的SQL代码,事实上JET引擎是无法直接识别窗体控件的。上列直接引用窗体控件的SQL代码之所以可以运行,其实ACCESS系统在背后进行自动转换将控件上的具体数值告诉了JET引擎所致,当然其能应用的场所是有限制的(具体见上面所述)。

由于实例中要使用常规的INSERT INTO语句,现就插入一条记录的语法作简要说明。
INSERT INTO 目标表(字段1,字段1,字段3,...) VALUES(数据值1,数据值1,数据值1,...)
说明:插入的字段和插入的数据值须一一对应,不能多也不能少,数据类型要匹配或者兼容;数据值为文本的须用单引号括住,数据值为日期时要用一对#号括住,这些数据值必须是一个个具体的值而不能是对控件的引用。

设计将Text0中的值插入“购票ID”字段、Text2中的值插入“票名称”字段、Text4中的值插入“数量”字段、Text6中的值插入“购票日期”字段、Text8中的值插入“备注”字段,添加一个命令按钮[Command1],当点击该按钮后对应控件中的资料随即写入购票信息登记表。

我们在向数据表插入记录时不能随意就将一些数据写入相应的字段里,而必须遵循一定的规则,不然表中的数据就不能被有效利用,甚至完全不可利用,数据库也就失去了存在的价值。例如在“数量”的对应控件[Text4]输入“7B”,又或者在“购票日期”的对应控件[Text6]输入“2011-13-21”那么将这样的数据写入数据表显然是不妥当,为了避免这种情况的发生,我们可以手动设置[Text4]的“格式”属性为“常规数字”,[Text4]的“格式”属性为“长日期”这样当不小心输入错误数据时系统就会拒绝并予以提示。

现在给出具体代码如下:
为COMMAND1添加下列单击事件过程

Private Sub Command1_Click()

Dim strSql as String ‘为合成INSERT INTO 语句声明一个字符串型变量
If IsNull(Me!Text0) Then '如果Text0为空
MsgBox "请输入购票ID", , "提示" '弹出提示框
Me!Text0.SetFocus '焦点移至Text0
Exit Sub '终止SUB过程
ElseIf DLookup("[购票ID]", "购票信息登记表", "[购票ID]=[Forms]![购票登记信息界面]![Text0]")= Me.Text0 Then
'利用DLookup函数查找[Text0]输入的值是否已存在于表中,以避免输入重复值
MsgBox "购票ID已用,请更换", , "提示"
Me!Text0.SetFocus
Exit Sub
ElseIf IsNull(Me!Text2) Then '如果Text2为空
MsgBox "请输入票名称", , "提示"
Me!Text2.SetFocus
Exit Sub
ElseIf IsNull(Me!Text4) Then '如果Text4为空
MsgBox "请输入数量", , "提示"
Me!Text4.SetFocus
Exit Sub
ElseIf IsNull(Me!Text6) Then '如果Text6为空
MsgBox "请输入购票日期", , "提示"
Me!Text6.SetFocus
Exit Sub
End If
'Text8允许留空故不作空白审核。上面一系列“IF THEN”语句判断不允许留空的控件是否已经填写了数据以及判断购票ID有否重复。事实上你可以用这种思路充分发挥想象力添加任意复杂的所谓 “企业规则”
'现在开始根据各个控件填写的值,合成数据库JET引擎能够识别的常规 INSERT INTO SQL 语句
strSql = "INSERT INTO 购票信息登记表(购票ID,票名称,数量, 购票日期,备注) "
strSql = strSql & "VALUES('"
strSql = strSql & [Forms]![购票登记信息界面]![Text0]
strSql = strSql & "','" & [Forms]![购票登记信息界面]![Text2]
strSql = strSql & "'," & [Forms]![购票登记信息界面]![Text4]
strSql = strSql & ",#" & [Forms]![购票登记信息界面]![Text6]
strSql = strSql & "#," & IIf(IsNull([Forms]![ 购票登记信息界面]![Text8]), "Null", "'" & [Forms]![购票登记信息界面]![Text8] & "'")
strSql = strSql & ")"
'注意:在上述SQL语句步骤中TEXT8使用了IIF函数,这也是因为TEXT8存在留空的可能,所以使用该函数在TEXT8为空白时为“备注”字段指定一个“NULL”值以免运行出错。而其它控件已经排除了空白的可能故直接引用就行了
'经过上述合成代码我们已经将窗体控件中输入的具体数值写入SQL语句的VALUE参数里面。
'假设我们分别向TEXT0,TEXT2,TEXT4,TEXT6,TEXT8填入 201112-001,午餐票,200,2011-12-07,空白
'那么字符串变量strSql的实际值等于:
'INSERT INTO 购票信息登记表(购票ID,票名称,数量, 购票日期,备注) VALUES(‘201112-001’,'午餐票',200,#2011-12-07#,Null)
'假设我们分别向TEXT0,TEXT2,TEXT4,TEXT6,TEXT8填入 201112-002,晚餐票,200,2011-12-07,三菜一汤
'那么字符串变量strSql的实际值等于:
'INSERT INTO 购票信息登记表(购票ID,票名称,数量, 购票日期,备注) VALUES(‘201112-002’,'晚餐票',200,#2011-12-07#,’三菜一汤')
'请留意对于字符串值加了单引号,日期被#号括住,留空的那个控件则填入NULL值

DoCmd.RunSQL strSql ‘此句代码使用DoCmd对象的RunSql方法运行合成出来的SQL操作查
'询语句,将窗体未绑定控件中输入的值写入购票信息登记表中。

'弹出提示框,告知插入新纪录成功
MsgBox "成功向购票信息登记表插入一条新纪录", , "提示"

End Sub
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-06
ACCES可以绑定表,为何不直接绑定呢?2007没用过,如果可以转成2003版本,可以发给我看看。

如何在Access2007表中同时显示明细、小计、总计
具体内容你可以参考帮助或者 NORTHWIND.MDB 示例数据库中的报表。其次,在 ADO 中专门有一部分,称为数据整形用来完成上述工作,但是它需要配合 VB 的 DATAGRID 等控件来完成显示。 部分 VB 控件也可以使用在 Access2007 的窗体中。最后,如果你实在想在 Access2007 的表格中完成,你可以使用组织 JET SQ...

ACCESS 2007的问题-4-窗体中的问题
三、建子窗体1,直接将客户资料表拖进主窗体,系统回自动向导生成客户资料的子窗体,设置子窗体属性,链接主字段→“客户编号”,链接子字段→“客户编号”。同样道理建立子窗体2,将客户销售记录也链接上。四、建立刷新按钮。用按钮向导生成刷新按钮。有的朋友的access是不完全版,如果没有按钮向导,就制...

access 2007 创建的生成表的查询,条件能否是变量或者从窗体中的文本框...
在数据库SQL语言中上这么书写,在VBA中用VB语句这么写:SELECT * FROM 表名 WHERE 字段>='"+窗体名称.控件名称+"'.And 字段<='"+窗体名称.控件名称+"'文本框获取日期很容易,直接在文本框的默认值里输入:=date()要精确到时间就输入:=date()+time()要固定日期区间,就要用DateDiff函数,固定...

如何解决运行查询、窗体或报表时出现键入参数值对话框问题
7. 打开 MicrosoftWord, 中导出文件并 进入参数值 对话框中请求参数然后搜索。�6�1 如果使用 Access 2007年, 请按照下列步骤:1. 在 数据库工具 选项卡, 单击 分析 组中 数据库文档管理器 。2. 单击选项卡对应于的, 您正在寻找, 和然后单击以选中复选框的查询、 窗体或, ...

access2007进销存教程
“创建”功能区:“创建”功能区中包括表,窗体,报表,其他和特殊符号5个菜单选项,窗体就是我们在使用表格时有时需添加窗格按钮时需要,报表是在我们做的统计表示会用到。“外部数据”功能区:“外部数据”功能区包括导入,导出,收集数据,SharePoint列表4个菜单,导入,导出则是对数据的导入,例如一些...

access数据库通过窗体输入下一条记录,我希望默认值等于上一条记录该...
Access2007以上非数字必需要加上引号 Me.Text1.DefaultValue="'" & CInt(DLast("字段1","表名")) + 1 & "'"用DefaultValue属性时,你不想录入直接点关闭时,系统不会写入到数据表中,其它方法可能会。完整过程:Private Sub Add_Click()Me.Text1.DefaultValue=CInt(DLast("字段1","表名")) ...

access 2007数据库软件 主窗体与子窗体 信息不同步的问题,详细说明见截 ...
你是要在子窗体向主窗体绑定的表录入或修改记录,只须将子窗体绑定的表与主窗体绑定的表是同一表(属性中设置),子窗体上添加按钮,上下左右选择按钮、添加记录按钮、保存记录按钮等,这样虽简单,但是是直接操作数据。另外你若会VB写代码,那就可以随心所欲,既保证简洁,又保证较高的智能化。你可以先...

如何在access中一个窗体显示出某个表的所有记录,然后单击某条记录可以进...
其实,在ACCESS中可以用“窗体向导”轻松创建一个绑定数据表的窗体,而且可以直接在窗体上的记录上进行修改。当然,如果你非要在单击后再出现修改窗体的话,可以在记录上设置“单击”事件触发新窗体,同时在“事件过程”中:第一先获得当前记录值,第二根据记录值在新窗体中显示记录。不过,这有点画蛇添...

ACCESS 2007 如何在窗体中将一个文本框的内容复制给另外一个文本框...
1、英文状态的小数点,标示其后面连接的是窗体或控件的属性。当然,数值中的小数点除外。比如:Forms.窗体2.Text2 是说 所有窗体Forms 中的 窗体2 里面的 Text2 控件。2、英文状态的双引号总是成对出现,一般用来表示引用文本。比如:Me.Text1 = "波涛工作室"上面这句代码是把文本字符串“波涛工作...

Access2007,怎么做到一打开就是主窗体,而看不到Access界面,然后在...
access2007,单击左上角的圆形图标,然后“access选项”,“当前数据库”,“显示窗体”,从中选择你一打开时要显示的窗体名称,当然你应该选择你要显示的主窗体,这样一打开就会出现你要的主窗体了。至于“在主窗体中操作之后,应该弹出其他的窗体但是没有出现”,这就是你在编程设置中有问题了,没看到...

相似回答