Access2007窗体输条件查数据

如图:输入 学号 和 成绩 ,点 查看 按钮后即在下面显示出 学号表与成绩表匹配的记录;同理,如果输入 学号 和 班级也一样。请高人指教,谢谢!

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

首先我们来分析一下你贴出的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追问

老师 能否用我所说的做一下实例呢 谢了

温馨提示:答案为网友推荐,仅供参考
相似回答