Как сравнить запись целочисленного типа с записью строкового типа в MS_Access?

1

У меня две таблицы в моей БД. Таблица 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.
Теги:
database
odbc
ms-access
jdbc

2 ответа

2
Лучший ответ

Я думаю, вы перепутались между SQL и Java. String.valueOf() - это метод Java, который нельзя использовать в инструкции SQL. В SQL есть STR() который вы можете использовать для преобразования числа в строку. Используйте его в соединении с LTRIM(), чтобы удалить пробельные пробелы, например LTRIM(STR(Other.RMA_no)).

Но в любом случае, наоборот, лучше, чем предлагал @Gord.

  • 0
    Это сработало. Спасибо
0

С двумя тестовыми таблицами

[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;

... действительно вызывает ошибку

Тип несоответствия в выражении.

Если мы добавим 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;

... тогда запрос выполняется без ошибок.

  • 0
    Безуспешно .. Это выдает ту же ошибку.
  • 0
    Я использовал: SELECT Другое
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню