This is topic SELECT функиця_mysql in forum Работа с приложениями (ODBC-SQL/OPC/DDE) at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/41/t/000079.html

Posted by FiXiZ (Участник № / Member № 5069) on :
 
Здравствуйте!

Пытаюсь получить значение из функции mysql, не получается. Причем в трассировке ODBC вообще ничего нет. Порыскал по форуму, наткнулся на пост от 2008 года с хранимыми процедурами, там говорится что возвращать значения нельзя, можно только передавать в базу. Передача у меня работает, а возврат не хочет. Хотелось бы уточнить ситуацию, с 2008 года были изменения в данном вопросе?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Отсутствие записей о запросе в трассировщие ODBC-драйвера настораживает.
Это касается только MySQL или MS Access тоже?
Пришлите, пожалуйста, Ваш тест-проект с БД (лучше с MS Access).
 
Posted by FiXiZ (Участник № / Member № 5069) on :
 
отправил
 
Posted by FiXiZ (Участник № / Member № 5069) on :
 
Уважаемая Техподдержка, отправлял проект на hotline3@adastra.ru в пятницу. Вы получили его?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Проект передан на анализ программистам.
Мы ответим Вам почтой по результату.
 
Posted by FiXiZ (Участник № / Member № 5069) on :
 
В результате было выяснено, что функции отрабатывают, но только с одним аргументом. И тут возникла еще проблема. При жестко указанном аргументе функция отрабатывает корректно:"SELECT Vh1_func(4345.46) #V1тар_In#
FROM data WHERE param_id = 5341 ORDER BY time DESC LIMIT 1;" Однако когда подставляю переменную, запрос перестает отрабатывать: "SELECT Vh1_func( #ST5_BARS1_H_гот_R# ) #V1тар_In#
FROM data WHERE param_id = 5341 ORDER BY time DESC LIMIT 1;". Причем тип переменной роли не играет, функции приведения типов mysql не помогают. С трассировко
 
Posted by FiXiZ (Участник № / Member № 5069) on :
 
В результате было выяснено, что функции отрабатывают, но только с одним аргументом. И тут возникла еще проблема. При жестко указанном аргументе функция отрабатывает корректно:"SELECT Vh1_func(4345.46) #V1тар_In# FROM data WHERE param_id = 5341 ORDER BY time DESC LIMIT 1;" Однако когда подставляю переменную, запрос перестает отрабатывать: "SELECT Vh1_func( #ST5_BARS1_H_гот_R# ) #V1тар_In# FROM data WHERE param_id = 5341 ORDER BY time DESC LIMIT 1;". Причем тип переменной роли не играет, функции приведения типов mysql не помогают. С трассировкой под вин7 пока проблемы (лог не пишется почему-то), позже попробую на XP. релиз 6.08
 
Posted by FiXiZ (Участник № / Member № 5069) on :
 
ac0-894 EXIT SQLExecDirectW with return code -1 (SQL_ERROR)
HSTMT 01B217F8
WCHAR * 0x0F149C58 [ 78] "SELECT Vh1_func() FROM data WHERE param_id = 5341 ORDER BY time DESC LIMIT 1;"
SDWORD 78

DIAG [S1000] [MySQL][ODBC 3.51 Driver][mysqld-5.1.53]Incorrect number of arguments for FUNCTION nikooil.Vh1_func; expected 1, got 0 (1318)

Ну судя по всему он не видит значение аргумента #ST5_BARS1_H_гот_R#
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Существуют ограничения в использовании подстановок.
Согласно документации (см."Подстановки в SQL-запросе") две подстановки подряд использовать нельзя.
В данном случае ")" не является разделителем.
 
Posted by FiXiZ (Участник № / Member № 5069) on :
 
Попробовал использовать переменные mysql:
set @test1 := #test_R# ;
SELECT Vh1_func(@test1) #V1тар_In# FROM data WHERE param_id = 5341 ORDER BY time DESC LIMIT 1 ;
Одним запросом не пошло, выдал ошибку. В разбиении на 2 запроса ошибок не выдает. Но похоже что переменная @test1 обнуляется перед каждым запросом. Уважаемая Техподдержка, как я могу выполнить из mysql функцию с одним аргументом (DOUBLE) и принять результат (DOUBLE)? У меня уже нету времени гадать как обойти все запреты чтобы реализовать эту несложную задачу.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Мы проверили разбор такого запроса на присланном Вами ранее проекте, заменив
set @test1 := #test_R# ;
на
set @test1 := #ДУУ1_R# ;

Запрос разбирается правильно и в функцию подставляется нужная величина.
 
Posted by RomanUI (Участник № / Member № 4022) on :
 
Как правильно использовать условия поиска? Создана таблица, в которой один столбец типа TEXT. К примеру в нём записываются фамилии. Как найти фамилии оканчивающиеся на "ов". Пробовал использовать операцию LIKE подобно как в MS Access вводил *ов, но ничего не возвращается. Жду ответа.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Если данная функция реализуема в SQL, то Вы можете попробовать использовать ее при создании запроса из нашей среды.
 
Posted by RomanUI (Участник № / Member № 4022) on :
 
Таблица создана в MS Access и в ней можно производить поиск сочетанием "*ов". Но на запрос из среды trace mode нет ответа.Вот код:

SELECT BD.Фамилия #ARG_000#
FROM BD
WHERE BD.Фамилия LIKE #ARG_001#
ARG_000 и ARG_001 типа string. В ARG_001 помещается то, что нужно найти(тот же *ов)

Пожалуйста, подскажите что здесь не правильно или пришлите конкретный пример.
 
Posted by RomanUI (Участник № / Member № 4022) on :
 
Я так и не получил ответа.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Мы не можем давать консультации по правильному написанию SQL-запросов.
Вам необходимо, используя любое SQL-приложение, написать запрос, используя логический оператор LIKE. Проверить корректность выполнения данного запроса и затем воспроизвести его в Шаблоне_связи_с_СУБД.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2