SQL/ACCESS数据转换错误3421

SQL/ACCESS数据转换错误3421,sql,database,ms-access,Sql,Database,Ms Access,列表框由单独表中的值填充。此列表框的值将作为新记录插入到事务表中。当我尝试将列表框的值分配给sql参数时,Access抛出错误“数据类型转换错误3421”。列表框是txtMealType,它作为MealID插入,MealID是一个短文本字段 Set dbs = CurrentDb Dim vblMealType As String txtMealType.SetFocus vblMealType = txtMealType.Value If (txtMealType & vbNullSt

列表框由单独表中的值填充。此列表框的值将作为新记录插入到事务表中。当我尝试将列表框的值分配给sql参数时,Access抛出错误“数据类型转换错误3421”。列表框是txtMealType,它作为MealID插入,MealID是一个短文本字段

Set dbs = CurrentDb
Dim vblMealType As String
txtMealType.SetFocus
vblMealType = txtMealType.Value
If (txtMealType & vbNullString) = vbNullString Then Exit Sub
Dim qdf As DAO.QueryDef
Set qdf = dbs.CreateQueryDef("", _
        "PARAMETERS prmCustomerID Long, prmMealID Long, prmTransactionAmount Currency, prmTransactionDate DateTime;" & _
        "INSERT INTO dbo_Transactions (CustomerID, MealID, TransactionAmount, TransactionDate) " & _
        "VALUES ([prmCustomerID], [prmMealID], [prmTransactionAmount], [prmTransactionDate]) ")
qdf!prmCustomerID = txtCustomerID.Value


qdf!prmTransactionAmount = txtCharge.Value
txtCharge.SetFocus
qdf!prmTransactionDate = Format(Date, "yyyy-mm-dd")
qdf!prmMealID = vblMealType
qdf.Execute
 MsgBox "Customer Charge Succesfull.", _
              vbOKOnly + vbInformation
Set qdf = Nothing
Set dbs = Nothing

您正在查询定义中将PRMMAlid定义为long


vblMealType是您所说的长文本字段还是短文本字段。使用CLNG()将字符串转换为长字符串,并修复数据类型转换错误。

您没有在原始SQL字符串中指定字段类型,因此我根据原始SQL字符串中(没有)引号进行了猜测。如果表中[MealID]为
短文本
,则在上述参数语句中会发生变化

prmMealID Long,

prmMealID Text(255),