Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: SQL запрос с пользовательской функцией Добавлено: 14.07.04 12:19  

Автор вопроса:  Alammi
Хлопцы и девчата! Очень нужна помощь свежих голов!! В БД делается SQL-запрос причем(!) в процессе отбора должна учавствовать пользовательская функция(!). Ответ компилятора (или еще чего-то): "Неопределенная функция такая-то в выражении".
вот пример запроса:
Data1.DatabaseName = "C:\DIR\db.mdb"
Data1.RecordSource = "Select * from Table1 where (UserFunction (Col1,Col2,1)<=2)"
Функция UserFunction в отдельности работает очень успешно (входные параметры: текст, текст, integer; выходные парметры: integer).
Я из нее уже и модуль и библиотеку делал-не помогает.
Помогите пожалуйста!!!

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 ol2003



Вопросов: 3
Ответов: 122
 Профиль | | #1 Добавлено: 14.07.04 18:19
Попробуй Select * from Table1 having (UserFunction (Col1,Col2,1)<=2)

Ответить

Номер ответа: 2
Автор ответа:
 Alammi



Вопросов: 1
Ответов: 3
 Профиль | | #2 Добавлено: 14.07.04 18:26
Золотце, не работает! Я уже мно-о-ого перепробовал. Он мне постоянно отнекивается, мол не знаю никаких UserFunction

Ответить

Номер ответа: 3
Автор ответа:
 Alexandrus



ICQ: 496782368 

Вопросов: 18
Ответов: 312
 Web-сайт: starsorion.com
 Профиль | | #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
Автор ответа:
 Alammi



Вопросов: 1
Ответов: 3
 Профиль | | #4 Добавлено: 15.07.04 09:41
Я еще не проверял че получится, если сделать твой запрос №1, но подумай сам: (UserFunction (Col1,Col2,1)<=2) вся эта хреновина вернет логическое значение (предположим, что это будет True), тогда твой запрос будет выглядеть так:
Data1.RecordSource = "SELECT * FROM Table1 WHERE " & True
По моему это.

З.Ы. Извини за жесткую критику.
З.З.Ы.Тогда уж расскажу чего именно я хочу добиться. Мне нужно осуществить "неточный" поиск по большой базе. Неточный это такой, когда пользователь задает найти слово "ТЕКСТ", а я ему нахожу слова "ТЕКСТ", "ТЕСТ", "ТЕКУТ", "ТЕКСТЫ" и т.д. Т.е. те, где отличие от исходного <=одной букве. Вот такая вот фигня в королевстве датском...

Ответить

Номер ответа: 5
Автор ответа:
 Jessy



Вопросов: 1
Ответов: 6
 Профиль | | #5 Добавлено: 27.07.04 18:34
Я кажется знаю, где тут собака зарыта. Смотри, то что у тебя написано для Data1.RecordSource - это просто SQL-запрос. То есть там и в помине не должно быть никаких упоминаний функций.
Data1.RecordSource = "Select * from Table1 where Поле такое-то = значение"... Может если ты объяснишь поподробнее, ЧТО делает эта функция и ЧТО за integer она возвращает, я смогу тебе сказать как приделать её к запросу.

Ответить

Номер ответа: 6
Автор ответа:
 Alammi



Вопросов: 1
Ответов: 3
 Профиль | | #6 Добавлено: 28.07.04 00:11
Дорогая Jessy, эта функция занимается проблемой, которая стара как мир: она
обрабатывает запрос на т.н. нечеткий поиск. Т.е. запрос, когда пользователь
не знает чего он сам хочет. Суть же функции в том, что она находит слова,
"расстояние редактирования" от которых до искомого запрос равно заранее
заданному числу. (Ух! Нагромоздил). В общем есть слово ТЕКСТ и слово ТЕСТ.
расстояние редактирования между ними равно 1, т.е. за одну элементарную
операцию (замена буквы, удаление буквы или вставка буквы) можно из первого
слова сделать второе [или наоборот]. Т.е. вопрос нечеткого поиска сводится к
нахождению в БД всех слов, расстояние редактирования от которых до запроса
<=1 (к примеру). Это моя идея реализации. Если есть свои или чего-то
непонятно- пиши!

Ответить

Номер ответа: 7
Автор ответа:
 Tarry



Вопросов: 1
Ответов: 1
 Профиль | | #7 Добавлено: 31.07.04 15:31
(входные параметры: текст, текст, integer; выходные парметры: integer).
Значит выходной параметр число? А ты пишеш патом , что True (boolen) Чтото не понятно, поясни плз

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам