|
|
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Есть запорс c именем Query1, вида: Код: plaintext 1. В модуле обявлена и описана функция MyFunction, которая возвращает double(пробовал и другие типы). Проблема возникает при попытке задать условие отбора связанное c полем Field3, т.е. например если написать запрос Код: plaintext возникает ошибка "data type missmatch in criteria expression". Замечу, что таблица SomeTable под MS SQL Server'ом, а доступаемся до нее через ODBC ссылку. Еще могу заметить что определенное время все эти конструкции работали нормально. Жду советов по анализу и отладке глюка, или моих мозгов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 20:44 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Могу добавить только то, что у меня была похожая проблема и мне в этом форуме получить ответ не удалось.\r \r /topic/26067 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 00:40 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
2newDave Пробовал использовать явное преобразование типов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 09:04 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
а в функции нет ли часом условных операторов ? if select case .... ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 09:37 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
У меня есть. Кажется, появился хвостик ниточки... Это известная проблема? А что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 09:48 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
msaccess 2000 mdb в таком виде работает Public Function MyFunction(f1, F2) As Double MyFunction = f1 + F2 End Function Q1: SELECT [Field1], [Field2], MyFunction([Field1],[Field2]) AS Field3 FROM SomeTable; Q2: SELECT * FROM Query1 WHERE (((Query1.Field3) >15.23)); тип данных в таблице f1 - float f2 - целое приведи пример функции, если в ней есть условные операторы то возможно проблема в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 09:53 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Но если есть условные операторы, то что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:04 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
в случе с условными операторам в зависимости от версии аксесс возникают следующие глюки. 1. при каждом повторном вызове функции из запроса может быть использовано - предыдущее значение функции вот пример Public Function MyFunction(f1, F2) As Double if f1 > 2 then MyFunction = f1 + F2 end if End Function Эта функция не возвратит в запрос 0 в случае если значение f1 >= 2 а будет возвращено предыдущее значение. Видимо при выполнении функции в запросе не происходит повторной инициализации переменной так работает Public Function MyFunction(f1, F2) As Double MyFunction = 0 if f1 > 2 then MyFunction = f1 + F2 end if End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:12 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
> возникают следующие глюки. > > 1. А дальше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:16 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
второй, известный мне глюк с функциями в запросах не касается условных операторов но тем не менее имеет место быть начиная с АСС 2000 если в функцию передевать один и тот же аргумент то в случае выполнения в запросе функция не пересчитывается а берется кэшированное значение. пример - функция прибавляет к аргументу значение времени в 97 - разные результаты в 2000 - один ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:24 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Прежде всего, громадное спасибо. Про второй глюк я знал и даже примерно представляю, как с ним бороться (просто добавить аргумент и передавать туда что-нибудь разное, например Timer или значение ключа). А как бороться с первым глюком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:29 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:31 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
СПАСИБИЩЕ!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:32 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Да пожайлуста , ларчик просто открывался ))) жаль когда я переходил с 97 - на 2000 мне некому было подсказать - 2 недели поиска причины ошибки.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:45 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Теперь будем надеяться, что автор топика тоже будет удовлетворен. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 10:48 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
2АлексейК: ...по поводу кэширования значений. У меня в A'97 при передаче константного параметра никаких пересчетов. Пример, для функции: Function testd(i As Long) As Date testd = DateAdd("S", i, Time) End Function и запроса: SELECT t1.*, testd(50) AS TimeVal FROM t1; В TimeVal возвращается одно и тоже время. И имхо это правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 11:52 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
2 IgorM: АлексейК именно так и сказал - "функция не пересчитывается а берется кэшированное значение". По поводу того, хорошо это или плохо, - вопрос субъективный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 11:59 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
2 IgorM вы невнимательны я сказал что это происходит только при использовании условных опреаторов в функциях - смотрите выше решения 2 1. Обнулять переменные 2. Всегда писать ветку "иначе" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 12:10 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
Кажется, я тоже невнимателен. Мне показалось, что Код: plaintext 1. 2. 3. 4. 5. - это замена для неработающего Код: plaintext 1. 2. 3. 4. 5. 6. Кажется, я поспешил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 12:21 |
|
||
|
Функция в запросе.
|
|||
|---|---|---|---|
|
#18+
2Владимир Саныч: Да, но "начиная с АСС 2000 ... в 97 - разные результаты в 2000 - один". 2АлексейК: "...второй, известный мне глюк с функциями в запросах не касается условных операторов ..." - а как же эта фраза? Хорошо, меняем пример: Function testd(i As Long) As Date If i > 1 Then testd = DateAdd("S", i, Time) End Function Значение не меняется. Может быть я чего-то не учитываю? Можете привести конретный пример? Т.е. данный, функцию, запрос, результат... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 15:23 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1803&tid=1681550]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 282ms |

| 0 / 0 |
