MS_Access中如何比较Integer类型记录和String类型记录?
How to compare Integer type record with String Type Record in MS_Access?
我的数据库中有两个 table。
Table Other
有 RMA_no
作为 'Number'
& table Material_Require_Master
有 RMA_No
作为 TEXT
.
我想执行一个可以输出匹配 RMA_No
?
的元组的查询
到目前为止我已经做到了。
String sql="Select RMA_Master.RMA_No,Call_Date,Source,Item_name,
Booking_Desc,Customer_name,Customer_contact,
AssignedTo,Part_No,Part_Name,Part_Quantity,
Part_Price,Total
From RMA_Master,Material_Require_Master
WHERE RMA_Master.RMA_No=Material_Require_Master.RMA_No AND
RMA_Master.MaterialRequireStatus='"+materialStatus+"'
UNION
Select Other.RMA_No,Call_Date,Source,Item_name,
Booking_Desc,Customer_name,Customer_contact,
AssignedTo,Part_No,Part_Name,Part_Quantity,
Part_Price,Total
From Other,Material_Require_Master
WHERE String.valueOf(Other.RMA_No)= Material_Require_Master.RMA_No AND
Other.MaterialRequireStatus='"+materialStatus+"'";
PreparedStatement pst=con.prepareStatement(sql);
ResultSet rs=pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(rs));
rs.close();
pst.close();
我的 StackTrace 是:
Exception: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'String.valueOf' in expression.
还有当我不使用时 String.valueOf
:
String sql="Select RMA_Master.RMA_No,Call_Date,Source,Item_name,Booking_Desc,Customer_name,Customer_contact,AssignedTo,Part_No,Part_Name,Part_Quantity,Part_Price,Total From RMA_Master,Material_Require_Master WHERE RMA_Master.RMA_No=Material_Require_Master.RMA_No AND RMA_Master.MaterialRequireStatus='"+materialStatus+"' UNION Select Other.RMA_No,Call_Date,Source,Item_name,Booking_Desc,Customer_name,Customer_contact,AssignedTo,Part_No,Part_Name,Part_Quantity,Part_Price,Total From Other,Material_Require_Master WHERE Other.RMA_No= Material_Require_Master.RMA_No AND Other.MaterialRequireStatus='"+materialStatus+"'";
发生以下 Exception
:
Exception: [Microsoft][ODBC Microsoft Access Driver] Type mismatch in expression.
有两个测试表
[Material_Require_Master]
RMA_No - 文字
mrmText - 文本
[其他]
RMA_no - 数字(长整型)
otherText - 文本
以下查询...
SELECT Other.RMA_no, Other.otherText, Material_Require_Master.mrmText
FROM Material_Require_Master INNER JOIN Other
ON Material_Require_Master.RMA_No = Other.RMA_no;
...确实会产生错误
Type mismatch in expression.
如果我们将 CLng()
函数添加到连接的 ON 子句中,将 Material_Require_Master.RMA_No 从文本转换为长整数 ...
SELECT Other.RMA_no, Other.otherText, Material_Require_Master.mrmText
FROM Material_Require_Master INNER JOIN Other
ON CLng(Material_Require_Master.RMA_No) = Other.RMA_no;
...然后查询运行没有错误。
我认为你在 SQL 和 Java 之间搞砸了。
String.valueOf()
是一种不能在 SQL 语句中使用的 Java 方法。在 SQL 中有 STR()
可以用来将数字转换为字符串。将它与 LTRIM()
结合使用以删除空格填充,例如LTRIM(STR(Other.RMA_no))
.
但无论如何,@Gord 提出的另一种方法更好。
我的数据库中有两个 table。
Table Other
有 RMA_no
作为 'Number'
& table Material_Require_Master
有 RMA_No
作为 TEXT
.
我想执行一个可以输出匹配 RMA_No
?
到目前为止我已经做到了。
String sql="Select RMA_Master.RMA_No,Call_Date,Source,Item_name,
Booking_Desc,Customer_name,Customer_contact,
AssignedTo,Part_No,Part_Name,Part_Quantity,
Part_Price,Total
From RMA_Master,Material_Require_Master
WHERE RMA_Master.RMA_No=Material_Require_Master.RMA_No AND
RMA_Master.MaterialRequireStatus='"+materialStatus+"'
UNION
Select Other.RMA_No,Call_Date,Source,Item_name,
Booking_Desc,Customer_name,Customer_contact,
AssignedTo,Part_No,Part_Name,Part_Quantity,
Part_Price,Total
From Other,Material_Require_Master
WHERE String.valueOf(Other.RMA_No)= Material_Require_Master.RMA_No AND
Other.MaterialRequireStatus='"+materialStatus+"'";
PreparedStatement pst=con.prepareStatement(sql);
ResultSet rs=pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(rs));
rs.close();
pst.close();
我的 StackTrace 是:
Exception: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'String.valueOf' in expression.
还有当我不使用时 String.valueOf
:
String sql="Select RMA_Master.RMA_No,Call_Date,Source,Item_name,Booking_Desc,Customer_name,Customer_contact,AssignedTo,Part_No,Part_Name,Part_Quantity,Part_Price,Total From RMA_Master,Material_Require_Master WHERE RMA_Master.RMA_No=Material_Require_Master.RMA_No AND RMA_Master.MaterialRequireStatus='"+materialStatus+"' UNION Select Other.RMA_No,Call_Date,Source,Item_name,Booking_Desc,Customer_name,Customer_contact,AssignedTo,Part_No,Part_Name,Part_Quantity,Part_Price,Total From Other,Material_Require_Master WHERE Other.RMA_No= Material_Require_Master.RMA_No AND Other.MaterialRequireStatus='"+materialStatus+"'";
发生以下 Exception
:
Exception: [Microsoft][ODBC Microsoft Access Driver] Type mismatch in expression.
有两个测试表
[Material_Require_Master]
RMA_No - 文字
mrmText - 文本
[其他]
RMA_no - 数字(长整型)
otherText - 文本
以下查询...
SELECT Other.RMA_no, Other.otherText, Material_Require_Master.mrmText
FROM Material_Require_Master INNER JOIN Other
ON Material_Require_Master.RMA_No = Other.RMA_no;
...确实会产生错误
Type mismatch in expression.
如果我们将 CLng()
函数添加到连接的 ON 子句中,将 Material_Require_Master.RMA_No 从文本转换为长整数 ...
SELECT Other.RMA_no, Other.otherText, Material_Require_Master.mrmText
FROM Material_Require_Master INNER JOIN Other
ON CLng(Material_Require_Master.RMA_No) = Other.RMA_no;
...然后查询运行没有错误。
我认为你在 SQL 和 Java 之间搞砸了。
String.valueOf()
是一种不能在 SQL 语句中使用的 Java 方法。在 SQL 中有 STR()
可以用来将数字转换为字符串。将它与 LTRIM()
结合使用以删除空格填充,例如LTRIM(STR(Other.RMA_no))
.
但无论如何,@Gord 提出的另一种方法更好。