Пытаюсь получить значение из функции 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. Проверить корректность выполнения данного запроса и затем воспроизвести его в Шаблоне_связи_с_СУБД.