![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
kulibin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 9.5.2005 Где: Украина, Запорожь е Репутация: нет Всего: 3 |
Спасите! Памагиииииитеееееее!!!!!!!!!!!!!
Написал функцию на вба в базе аксес. Включил её в запрос. Работает как часы. Радости не было предела - раньше я такого не делал - не знал что так можно, с скуэлем извращался. Ну а потом в VB6 я открываю рекордсет select * from MyQuery - а оно мне и говорит: извините, функция MyFunction не определена - досвиданья, до новых встреч. Абыдна до слёз. На sql то же самое сделать что в этой функции - это пожалуй десяток запросов вложенных, куча select from select, union, inner join, left join, right join и много других страшных слов ![]() А второй вариант - лепить в барсике руками отсоединённый рекордсет, считать там же этой функцией и ложить в него - могу представить скорость. Записей там не очень много - но и не мало всё же. Подскажите пожалуйста - как заставить работать этот запрос с моей функцией под барсиком. ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
А поконкретнее? А еще лучше - MDB с этой функцией, таблицей (20-30 записей) и запросом. Обрареный. Приаттачить. Тут.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
kulibin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 9.5.2005 Где: Украина, Запорожь е Репутация: нет Всего: 3 |
Немного удивлён вопросом.
Суть проблемы то можно сформулировать одним предложением: В запрос в БД включена написаная мною в модуле той же БД обычная бейсиковская функция. Этот запрос работает в access и не работает рекордсет основаный на select-е из этого запроса в vb6. Суть проблемы не в БД конкретной и не в самой функции - а в возможности использовать функцию самописанную на вба в запросе - т.е. хранимой процедуре, представлении. Пример: Модуль в БД аксес: Public function MySum(a as cur, b as cur) as string dim s as cur s=a+b if s > 0 then MySum="Задолженность составляет " & format(s,"Standard") _ Else MySum="Всё ОК ![]() end sub И хранимая процедура в аксесе: SELECT fld1,fld2,(MySum(fld4,fld5)) as MyS from tbl1 в аксесе этот запрос отлично работает И далее в проекте на VB6: rs.open "select * from qr1",adopenstatic,adlockpessimistic ![]() Функция MySum не определена, будьте здоровы ![]() Вот такая ерунда. Конечно аксес это не оракл а вба не plsql ![]() ![]() |
|||
|
||||
kulibin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 9.5.2005 Где: Украина, Запорожь е Репутация: нет Всего: 3 |
Вот собственно немного сырой вариант переделки того что мне нужно на стракчер квери ленгвидж
![]() select nomd,nach_ar,nach_pen FROM (select nomd, clsd,(datediff("h",opl_do,now())*arenda)as nach_ar from dog where clsd is null and (datediff("h",opl_do,date())*arenda)>0 and tarif='ЧАС' UNION select nomd, clsd,(datediff("d",opl_do,date())*arenda)as nach_ar from dog where clsd is null and (datediff("d",opl_do,date())*arenda)>0 and tarif='ДЕНЬ' UNION select nomd, clsd,(datediff("d",opl_do,date())*arenda/30)as nach_ar from dog where clsd is null and (datediff("d",opl_do,date())*arenda)>0 and tarif='МЕСЯЦ' ) as NachAr LEFT JOIN (SELECT nomd as nd, (datediff("h",opl_do,date())*penya) AS nach_pen FROM DOG WHERE tarif='ЧАС' AND (datediff("h",opl_do,date())*penya)>0 AND (clsd=false OR clsd is null) UNION SELECT nomd, (datediff("d",opl_do,date())*penya) AS nach_pen FROM DOG WHERE tarif<>'ЧАС' and (datediff("d",opl_do,date())*penya)>0 AND (clsd=false OR clsd is null) ) AS NachPen ON NachAr.nomd=NachPen.nd; Фунциклирует в принципе. Только вот никак не придумаю как sql-лем вычислить количество дней в месяце. Вот суть задачки: нужно вычислить задолженность клиента по арендной плате за прокат бытовой техники. При тарифе "МЕСЯЦ" нужно вычислить сколько прошло целых месяцев и умножить их на арендную плату в месяц. Потом нужно вычислить сколько дней(т.е. "кусок" месяца) и умножить на аренду в день. А загвоздка в том, что количество дней в месяце разное. Т.е. нужно узнать количество дней в текущем месяце, разделить на него арендную плату за месяц и умножить на количество просроченніх дней. Приведённый выше запрос просто находит количество дней просрочки и умножает на аренду/30 - лепнина короче. А вот как узнать количество дней в месяце? Это сообщение отредактировал(а) kulibin - 30.12.2005, 23:47 |
|||
|
||||
kulibin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 9.5.2005 Где: Украина, Запорожь е Репутация: нет Всего: 3 |
Эх - самообслуживание полное
![]() SELECT Day(DateAdd("d", -1, (DateSerial(Year(Date()), Month(DateAdd("M", 1, Date())), 1)))); - к-во дней в месяце(текущем) - может кому пригодится ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "MS Access" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS Access | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |