访问VBA类型不匹配

时间:2014-05-08 19:51:21

标签: sql vba access-vba

我为本地租赁公司创建数据库。我现在要做的就是创建一些可以定期运行的代码,以便向数据库添加账单。

我在这里引用了两个表,第一个是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,但它不起作用。

1 个答案:

答案 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