我正在使用访问权限来演示数据库的功能,以便我的公司跟踪施工过程中出现的问题。我最终将使用SQL Server作为后端(在我们实际开始使用它之前),但是我需要能够向所有人展示这给我们带来的好处,然后IT专家才能为我(以及其他所有人)授予使用权限为此目的使用SQL Server数据库。
我有一个表单,该表单会将记录添加到我的一个表中,并且我计划使用QueryDef来执行此操作,例如,调用参数查询:
Dim qdfAddNewRecord As DAO.QueryDef
Set qdfAddNewRecord = dbs.QueryDefs("InsertObservation")
qdfAddNewRecord.Parameters("P_ReportID").Value = Me.ReportID
qdfAddNewRecord.Parameters("P_Description").Value = CStr(Me.Description)
qdfAddNewRecord.Parameters("P_Division").Value = CInt(Me.cmbDivision.Column(0))
qdfAddNewRecord.Parameters("P_ObservationNum").Value = CInt(Me.ObservationNum)
qdfAddNewRecord.Execute dbFailOnError
但是出现一个错误,我没有设置[Table] .Division字段(在表定义中按要求列出)。当我从sql视图运行查询时,它会提示我输入4个参数,然后成功执行。我很沮丧,所以我决定尝试使用记录集来做到这一点:
Set recset = dbs.OpenRecordset("Observations", dbOpenDynaset)
With recset
.AddNew
!ReportID = Me.ReportID
!Description = Me.Description
!Division = Me.cmbDivision.Column(0)
!ObservationNum = Me.ObservationNum
.Update
End With
此方法效果很好,因此查询或设置参数的方式一定存在问题。经过几天的研究,我不知所措,将查询简化为仅这4个字段(表中还有很多我想设置的字段)等。下面是我的查询,请注意,访问权限会自动转换为插入 。 。 。值模式进入“选择为expr”模式:
PARAMETERS P_ReportID Short, P_Description LongText, P_Division Short, P_ObservationNum Short;
INSERT INTO Observations ( ReportID, Description, Division, ObservationNum )
SELECT P_ReportID AS Expr1, P_Description AS Expr2, P_Division AS Expr3, P_ObservationNum AS Expr4;
更多细节:在按要求设置“分隔”字段之前,插入将起作用,但仅设置前2个字段(ReportID和Description)。在调试器中,使用匹配的有效值和类型设置QueryDef的参数。我尝试使用和不使用CInt()转换都得到相同的结果。我尝试使用索引参数调用(parameters(0).Value),并且尝试使用.Value和不使用.Value都具有相同的结果。
编辑:我也尝试使用:
Dim divno as Integer
divno = CInt(Me.cmbDivision.Column(0))
然后使用divno设置除法的qdf参数值。结果相同(只是在新记录中输入了前两个参数)。
我现在仅使用工作方法,当我将其移动到SQL Server时,将使用适当的WPF / MVVM前端,但是我为这种简单的操作无法按预期工作感到困扰。有什么想法吗?