2012-05-20 3 views
1

Я использую MySql, Delphi. Какая у меня ошибка при использовании кода ниже?Неизвестная колонка 'x' in 'where clause'

я получаю «Неизвестный столбец„х“в том, где пункт» Error -> Неизвестный столбец «_code_ehda_konandeh» в «где предложение» я так нужен. я должен сделать это PROJ в течение 2 дней позже пожалуйста ........


DELIMITER $$ 

USE `bimarestan`$$ 

DROP PROCEDURE IF EXISTS `Save_Ehda_Konande`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `Save_Ehda_Konande`(
IN _code_ehda_konandeh VARCHAR(50), 
IN _tarikh_moarefi VARCHAR(50), 
IN _tarikh_tashkil_parvandeh VARCHAR(50), 
IN _name VARCHAR(50), 
IN _name_khanevadegi VARCHAR(50), 
IN _name_pedar VARCHAR(50), 
IN _tarikh_tavalod VARCHAR(20), 
IN _tahsilat VARCHAR(50), 
IN _vaziyat_taahol VARCHAR(50), 
IN _noe_bimeh VARCHAR(50), 
IN _gorooh_khoon VARCHAR(50), 
IN _rezayat_dahandeh VARCHAR(50), 
IN _shoghl VARCHAR(50), 
IN _address VARCHAR(50), 
IN _telphone VARCHAR(50), 
OUT _out INT) 
BEGIN 
IF LTRIM(RTRIM(_code_ehda_konandeh))<>'' THEN 
BEGIN 
SET _out = 0; 
    IF NOT EXISTS(SELECT * FROM bimar WHERE `_code_ehda_konandeh` = `code_ehda_konandeh`) THEN 
    INSERT INTO `ehda_konandeh` (
code_ehda_konandeh, 
tarikh_moarefi, 
tarikh_tashkil_parvandeh, 
NAME, 
name_khanevadegi, 
name_pedar, 
tarikh_tavalod, 
tahsilat, 
vaziyat_taahol, 
noe_bimeh, 
gorooh_khoon, 
rezayat_dahandeh, 
shoghl, 
address, 
telphone) 
    VALUES(
_code_ehda_konandeh, 
_tarikh_moarefi, 
_tarikh_tashkil_parvandeh, 
_name, 
_name_khanevadegi, 
_name_pedar, 
_tarikh_tavalod, 
_tahsilat, 
_vaziyat_taahol, 
_noe_bimeh, 
_gorooh_khoon, 
_rezayat_dahandeh, 
_shoghl, 
_address, 
_telphone 
); 
    ELSE 
    SET _out = 1; 
    END IF; 
    END; 
END IF; 
END$$ 

DELIMITER ; 

что ХП Запуск в MySql без каких-либо проблем, но когда я хочу отправить DELPHI параметры к этому, я получаю эту ошибку !!

и это мой Дельфи код:

if flag_new_edit = 1 then 
    sp_sabt.StoredProcName := 'Save_Ehda_Konande' 
else 
    sp_sabt.StoredProcName := 'Edit_Ehda_Konande'; 
    With sp_sabt Do 
    Begin 
    ParamByName('_code_ehda_konandeh').Value := Trim(txt_code_ehda_konande.Text); 
    ParamByName('_tarikh_moarefi').Value := Trim(txt_tarikh_tavalod.Text); 
    ParamByName('_tarikh_tashkil_parvandeh').Value := Trim(txt_name_khanevadegi.Text); 
    ParamByName('_name').Value := Trim(txt_name.Text); 
    ParamByName('_name_khanevadegi').Value := Trim(txt_name_khanevadegi.Text); 
    ParamByName('_name_pedar').Value := Trim(txt_name_pedar.Text); 
    ParamByName('_tarikh_tavalod').Value := Trim(txt_tarikh_tavalod.Text); 
    ParamByName('_tahsilat').Value := Trim(cmb_tahsilat.Text); 
    ParamByName('_vaziyat_taahol').Value := Trim(cmb_vaziyat_taahol.Text); 
    ParamByName('_noe_bimeh').Value := Trim(cmb_noe_bime.Text); 
    ParamByName('_gorooh_khoon').Value := Trim(cmb_gorooh_khoon.Text); 
    ParamByName('_rezayat_dahandeh').Value := Trim(txt_rezayat_dahande.Text); 
    ParamByName('_shoghl').Value := Trim(txt_shoghl.Text); 
    ParamByName('_address').Value := Trim(txt_adress.Text); 
    ParamByName('_telphone').Value := Trim(txt_tel.Text); 
    ExecProc; 
End; 

С уважением

ответ

3

Хотя я указал, какая ошибка может быть в вашем коде sql, я хотел бы дать более подробную информацию об этом.

That Stored Procedure Runing at MySql WithOut any problems but when send Delphi parameters to sp , i get that Error !! Но вы ошибаетесь.

В вашей процедуре создано a known bug. Из-за причины возникло исключение времени выполнения .
Semantics of Stored procedure code is not checked at CREATE time. At runtime, undeclared variables are detected, and an error message is generated for each reference to an undeclared variable. However, SP's seem to believe any reference denotes a column, even though the syntactic context excludes that. This leads to a very confusing error message in case the procedure.

стандартный тестовый пример, как показано ниже:

mysql> drop procedure proc_test; 
Query OK, 0 rows affected (0.00 sec) 

mysql> delimiter // 
mysql> CREATE PROCEDURE proc_test() 
    -> BEGIN 
    ->  select current_day; 
    -> END 
    -> // 
Query OK, 0 rows affected (0.00 sec) 

Здесь вы можете понять, что процедура компиляции проигнорировано на том, что current day есть.

mysql> delimiter ; 
mysql> call proc_test(); 
ERROR 1054 (42S22): Unknown column 'current_day' in 'field list' 
mysql> 

При этом вы должны понимать, что That Stored Procedure Runing at MySql WithOut any problems ... не является правильным.


Быстрое решение по вашему решению решит проблему. Вы упомянули, что I defined input parameters with _ prefix. I don't know waht i must do !. Если это верно, то
изменения

SELECT * FROM bimar WHERE `_code_ehda_konandeh` = `code_ehda_konandeh` 

в

SELECT * FROM bimar WHERE `code_ehda_konandeh` = _code_ehda_konandeh 

и оно должно работать. Здесь я предположил, что code_ehda_konandeh - это столбец таблицы bimar.

3
IF NOT EXISTS(SELECT * FROM bimar WHERE `_code_ehda_konandeh` = `code_ehda_konandeh`) THEN 
              ^---    ^--- 

удалить указанные кавычки. backticks используются для «скрытия» зарезервированных слов. Они также заставляют MySQL обрабатывать эти escape-слова как имена полей/таблиц. Ваши параметры не являются полями, поэтому MySQL вынужден неправильно интерпретировать их как таковые.

+0

Эта хранимая процедура, выполняемая в MySql С любыми проблемами, но при отправке параметров Delphi в sp, я получаю эту ошибку! –

+0

@hamedkamrava - Определенно это должна быть ошибка. '_code_ehda_konandeh' должен быть введенным параметром для процедуры, а' code_ehda_konandeh', * без подчеркивания в качестве префикса * - это имя столбца. У меня есть сомнения в трассировке стека ошибок. Покажите нам результаты 'desc bimar'. –

+0

@Ravinder - Я определил входные параметры с префиксом _. Я не знаю, что я должен делать! –

Смежные вопросы