我为本地租赁公司创建数据库。我现在要做的就是创建一些可以定期运行的代码,以便向数据库添加账单。
我在这里引用了两个表,第一个是tblRental,这是一个租赁单位表,其中包括rentID作为主键,租赁状态和月租,这是不同的每个单位。另一个是tblTransaction,其中包括rentID作为1对多关系中的外键,以及每个Bill的名称为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,但它不起作用。
答案 0 :(得分:2)
我会在没有循环和打开记录集的情况下执行此操作:
Dim maxRentalID As Integer
maxRentalID = Combo4.Value
CurrentDb.Execute "INSERT INTO [tblTransction] ([RentalID], [UnitRate]) " & _
"SELECT [tblRental].[RentalID], [tblRental].[Rentalcharge] " & _
"FROM [tblRental] " & _
"WHERE [tblRental].[Status]='3' AND " & _
"[tblRental].[RentalID] BETWEEN 1 AND " & maxRentalID