【问题标题】:Access VBA type mismatch访问 VBA 类型不匹配
【发布时间】: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) rentIDunit记录集,但不是值。 2)If rentID Is Not Null Then 替换为If Not rentID.EOF Then 3) VALUES (" & rentID, unit & ");"-->VALUES (" & rentID.Fileds("RentalID"), unit.Fileds("Rentalcharge") & ");"

标签: sql ms-access vba


【解决方案1】:

我会在没有循环和打开记录集的情况下这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多