Страница: 1 |
Вопрос: SQL запрос с пользовательской функцией | Добавлено: 14.07.04 12:19 |
Автор вопроса: ![]() |
Хлопцы и девчата! Очень нужна помощь свежих голов!! В БД делается SQL-запрос причем(!) в процессе отбора должна учавствовать пользовательская функция(!). Ответ компилятора (или еще чего-то): "Неопределенная функция такая-то в выражении".
вот пример запроса: Data1.DatabaseName = "C:\DIR\db.mdb" Data1.RecordSource = "Select * from Table1 where (UserFunction (Col1,Col2,1)<=2)" Функция UserFunction в отдельности работает очень успешно (входные параметры: текст, текст, integer; выходные парметры: integer). Я из нее уже и модуль и библиотеку делал-не помогает. Помогите пожалуйста!!! |
Ответы | Всего ответов: 7 |
Номер ответа: 1 Автор ответа: ![]() ![]() Вопросов: 3 Ответов: 122 |
Профиль | Цитата | #1 | Добавлено: 14.07.04 18:19 |
Попробуй Select * from Table1 having (UserFunction (Col1,Col2,1)<=2) |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 3 |
Профиль | Цитата | #2 | Добавлено: 14.07.04 18:26 |
Золотце, не работает! Я уже мно-о-ого перепробовал. Он мне постоянно отнекивается, мол не знаю никаких UserFunction |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 496782368 Вопросов: 18 Ответов: 312 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 14.07.04 22:15 |
Если SQL-запрос передается именно так как ты написал , то естественно ядро JET ничего не знает о твоей функции ,т.к ты передаешь свою функцию как оператор SQL !
Попробуй так : Data1.RecordSource = "SELECT * FROM Table1 WHERE " & (UserFunction (Col1,Col2,1)<=2) Или воспользуйся : "SELECT * FROM Table1 WHERE имя_поля BETWEEN 10 AND 20" Будут выбраны все записи подпадающие под данное условие.Если нужен более сложный запрос , пиши на форум попробую помочь! С ув. Alexandrus |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 3 |
Профиль | Цитата | #4 | Добавлено: 15.07.04 09:41 |
Я еще не проверял че получится, если сделать твой запрос №1, но подумай сам: (UserFunction (Col1,Col2,1)<=2) вся эта хреновина вернет логическое значение (предположим, что это будет True), тогда твой запрос будет выглядеть так:
Data1.RecordSource = "SELECT * FROM Table1 WHERE " & True По моему это. З.Ы. Извини за жесткую критику. З.З.Ы.Тогда уж расскажу чего именно я хочу добиться. Мне нужно осуществить "неточный" поиск по большой базе. Неточный это такой, когда пользователь задает найти слово "ТЕКСТ", а я ему нахожу слова "ТЕКСТ", "ТЕСТ", "ТЕКУТ", "ТЕКСТЫ" и т.д. Т.е. те, где отличие от исходного <=одной букве. Вот такая вот фигня в королевстве датском... |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 6 |
Профиль | Цитата | #5 | Добавлено: 27.07.04 18:34 |
Я кажется знаю, где тут собака зарыта. Смотри, то что у тебя написано для Data1.RecordSource - это просто SQL-запрос. То есть там и в помине не должно быть никаких упоминаний функций.
Data1.RecordSource = "Select * from Table1 where Поле такое-то = значение"... Может если ты объяснишь поподробнее, ЧТО делает эта функция и ЧТО за integer она возвращает, я смогу тебе сказать как приделать её к запросу. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 3 |
Профиль | Цитата | #6 | Добавлено: 28.07.04 00:11 |
Дорогая Jessy, эта функция занимается проблемой, которая стара как мир: она обрабатывает запрос на т.н. нечеткий поиск. Т.е. запрос, когда пользователь не знает чего он сам хочет. Суть же функции в том, что она находит слова, "расстояние редактирования" от которых до искомого запрос равно заранее заданному числу. (Ух! Нагромоздил). В общем есть слово ТЕКСТ и слово ТЕСТ. расстояние редактирования между ними равно 1, т.е. за одну элементарную операцию (замена буквы, удаление буквы или вставка буквы) можно из первого слова сделать второе [или наоборот]. Т.е. вопрос нечеткого поиска сводится к нахождению в БД всех слов, расстояние редактирования от которых до запроса <=1 (к примеру). Это моя идея реализации. Если есть свои или чего-то непонятно- пиши! |
Номер ответа: 7 Автор ответа: ![]() ![]() Вопросов: 1 Ответов: 1 |
Профиль | Цитата | #7 | Добавлено: 31.07.04 15:31 |
(входные параметры: текст, текст, integer; выходные парметры: integer).
Значит выходной параметр число? А ты пишеш патом , что True (boolen) Чтото не понятно, поясни плз |
Страница: 1 |
|