【发布时间】:2014-05-08 19:51:21
【问题描述】:
我正在为本地租赁公司创建一个数据库。我现在要做的是创建一些可以定期运行以将账单添加到数据库的代码。
我在这里引用了两个表,第一个是 tblRental,它是一个出租单元表,其中包括作为主键的 rentID、出租状态和每月租金,每个单元都不同。另一个是 tblTransaction,其中包括作为一对多关系中的外键的 rentID,以及名为 UnitRate 的每张账单的金额。在数据库中,rentalID 和 UnitRate 都设置为数字。
我现在的代码是
Dim maxRentalID As Integer
Dim db As Database
Dim rentID As DAO.Recordset
Dim unit As DAO.Recordset
Set db = CurrentDb
maxRentalID = Combo4.Value
For i = 1 To maxRentalID
Set rentID = db.OpenRecordset("SELECT tblRental.RentalID, tblRental.Status FROM tblRental WHERE (((tblRental.Status)='3') AND ((tblRental.RentalID)=" & i & "));")
Set unit = db.OpenRecordset("SELECT tblRental.Rentalcharge FROM tblRental WHERE (((tblRental.RentalID)=" & i & "));")
If rentID Is Not Null Then
DoCmd.RunSQL "INSERT INTO tblTransction ([RentalID], [UnitRate]) VALUES (" & rentID, unit & ");"
End If
Next
maxRentalID 是从一个确定最后一条记录的 ID 的表单中获得的,以便 for 循环将一直执行到结束。
现在我收到一个类型不匹配错误,它告诉我问题出在 DoCmd.RunSQL 行中的rentID。
我正在尝试让循环运行一个查询,如果它是有效结果(存在的 RentalID 上的状态 = 3),则使用该 RentalID 和相应的计费费率将新记录插入 tblTransaction。
根据调试器所说的,我假设正在发生的事情是 SQL 没有被评估为一个将查询值分配给变量的语句,它试图将语句放入一个不起作用的数字字段中.但是,我不确定如何对其进行正确评估。我已经尝试使用 OpenRecordSet,但它不起作用。
【问题讨论】:
-
1)
rentID和unit是记录集,但不是值。 2) 将If rentID Is Not Null Then替换为If Not rentID.EOF Then3)VALUES (" & rentID, unit & ");"-->VALUES (" & rentID.Fileds("RentalID"), unit.Fileds("Rentalcharge") & ");"