Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 在VBA/Access中向表中添加记录而不使用内联查询_Ms Access_Vba - Fatal编程技术网

Ms access 在VBA/Access中向表中添加记录而不使用内联查询

Ms access 在VBA/Access中向表中添加记录而不使用内联查询,ms-access,vba,Ms Access,Vba,我对VBA完全陌生。我被告知使用表单和保存按钮向表中添加记录,并给出了一些非常基本的说明。虽然我通过内联查询实现了这一点,但有人告诉我要遵循一些严格的方法,比如使用querydf/querydfs和.Parameters 到目前为止,我正在尝试一个非常基本的项目,只是为了掌握概念,但我无法将任何记录添加到空表中。如果表不是空的,请手动输入一条记录,每当我单击保存按钮以保存较新的记录时,添加的记录数会随着每个实例的增加而增加一倍。例如,当我第一次保存时,添加1条记录,第二次添加2条相同类型的记录,

我对VBA完全陌生。我被告知使用表单和保存按钮向表中添加记录,并给出了一些非常基本的说明。虽然我通过内联查询实现了这一点,但有人告诉我要遵循一些严格的方法,比如使用querydf/querydfs和.Parameters

到目前为止,我正在尝试一个非常基本的项目,只是为了掌握概念,但我无法将任何记录添加到空表中。如果表不是空的,请手动输入一条记录,每当我单击保存按钮以保存较新的记录时,添加的记录数会随着每个实例的增加而增加一倍。例如,当我第一次保存时,添加1条记录,第二次添加2条相同类型的记录,第三次添加4条记录,依此类推

tabletbl_测试有两个字段->IDprimary key、SourceLong Text和注册号

queryqry_测试是使用Append特性进行的,我被告知要添加表达式,使代码像这样-

INSERT INTO tbl_test ( Source, [Reg No] )
SELECT [strSource] AS Expr1, [lngRegNo] AS Expr2
FROM tbl_test;
该表单有两个字段,分别是Sourcetxt_Source和Reg Notxt_RegNo,其中未绑定空白记录源。“保存”按钮具有以下事件过程-

Private Sub btn_save_Click()

Dim qdf As QueryDef

Set qdf = CurrentDb.QueryDefs("qry_test")

qdf.Parameters("strSource") = Me.txt_Source
qdf.Parameters("lngRegNo") = Me.txt_RegNo

qdf.Execute

End Sub

我对VBA一无所知,愿意接受任何帮助。如果我能得到任何类型的源代码来解释从表单保存记录以及使用这些查询、参数和记录集内容编辑记录的所有细节,那就太好了。

Access针对绑定表单进行了优化。未绑定表单仅适用于特殊情况

如果出于多种原因,您更喜欢未绑定的表单,那么访问就不值得费心了,您应该转向VisualStudio和WinForms

无论哪种情况,都可以浏览初学者教程

欢迎来到StackOverflow

如果您使用表单为存储在表中的记录收集数据,那么在我看来,通过querydfs运行保存的append查询来收集数据并不是最好的方法

虽然追加查询确实会将新记录添加到现有表中,但我倾向于使用追加查询,其中我有多个已建立的记录要添加到现有表中

如果我正在设置一个数据输入表单,该表单旨在一次一个地为新记录收集新数据,那么追加查询并不真正适合此目的

相反,MS Access表单的设计内置了许多功能,以帮助收集数据并将其保存到表中。这是因为表单在很大程度上旨在进行设置,以便用户能够以受控、用户友好的方式与表中的记录交互,而不是直接与表对象本身交互

在此上下文中,表单的第一个也是最重要的特性可能是表单的记录源属性。创建新表单时,请进入表单的“设计”视图并打开表单的属性页F4键。在表单属性表的“数据”选项卡中,可以找到“记录源”属性:

记录源实质上是将表单与一组记录连接起来,这些记录可以是表对象、查询对象或sql查询字符串中的记录

在您的情况下,我认为最好通过在表单的记录源中引用tbl_测试表来将其绑定到表单:

您的表单似乎什么也没有发生,但如果现在打开“添加现有字段”面板alt+F8,您会注意到与tbl_测试表关联的字段对您可用:

将它们拖到表单的详细信息部分

然后将表单放入表单视图:

基本上,您和您的用户看到的是tbl_测试中的第一条空白记录,但显示在表单上

在表单的这些字段中输入数据

…将把该数据放入我们在窗体的记录源中指定的表中

因此,希望您能看到,将表单的记录源属性设置为表的记录源属性,比尝试获取附加查询以从表单收集数据并将其传递到表中要干净得多

此时,您可能会问几个问题:

当我在表格中填写了记录的字段后,如何保存该记录

关于这一点可以说得更多,但为了简单起见,我建议使用命令按钮来运行一些vba来保存记录;与您所做的类似,但使用表单的Dirty属性,而不是使用append查询:

以下是“我的保存”按钮的单击事件VBA示例:

私有子CMDU保存\单击 如果是我,那就脏了 我,肮脏=虚假 如果结束 端接头 Dirty是窗体的布尔真或假设置;本质上,当用户更改表单上的某些内容时,它会自动设置为True。要保存这些更改,Me.Dirty设置必须设置为False

我。肮脏有点像羊圈上的旋转门。当牧羊人把羊的数据放在围栏里时,他们会打开围栏的大门。敞开的大门就像是一座城堡 是我,肮脏被设定为真。要锁定sheep数据,需要关闭门,或者对于表单,Me.Dirty属性需要设置为False。上面的VBA基本上检查闸门是否打开,是否关闭

保存当前记录后,如何移动到表单中的新记录

同样,我会给用户一个命令按钮来执行此操作,并在其单击事件上运行一些VBA:

以下是用于移动到新记录的VBA:

私有子CMDU新建\u单击 文件编号:GoToRecord,acNewRec 端接头 总结

比我在这里所概述的要考虑的更多,如:

在保存数据之前验证数据 检查其他表单事件,如关闭,以确保数据输入不会丢失 导航到现有记录
但希望我在这里给你们的是,至少为你们指明了一个更好的方向。祝你好运

如果要使用未绑定控件或未绑定控件,可以在以下过程中创建SQL字符串:

Dim mysql as String

mysql = "INSERT INTO tbl_test ( [source], [reg_No]) VALUES (Me.txt_Source, Me.txt_RegNo)

DoCmd.RunSQL mysql

这非常有帮助。非常感谢。这以及AllowEdit函数让我了解了如何使用表单维护基本表。然而,我被告知即使是在添加记录时也要处理查询,我希望我能改变我的指导老师的想法。正如我提到的,我不能在代码生成器中使用内联查询定义。但是,我可以使用QueryDef和参数进行数据绑定。无论查询是什么,都必须在Access中定义,而不是在VBA部件中定义。