Модераторы: Akina
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> HELP!!! VBA-функция в запросе, работает в аксесе - не хотит из VB 
:(
    Опции темы
kulibin
Дата 30.12.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Спасите! Памагиииииитеееееее!!!!!!!!!!!!!
Написал функцию на вба в базе аксес. Включил её в запрос. Работает как часы. Радости не было предела - раньше я такого не делал - не знал что так можно, с скуэлем извращался.
Ну а потом в VB6 я открываю рекордсет select * from MyQuery - а оно мне и говорит: извините, функция MyFunction не определена - досвиданья, до новых встреч.
Абыдна до слёз.
На sql то же самое сделать что в этой функции - это пожалуй десяток запросов вложенных, куча select from select, union, inner join, left join, right join и много других страшных слов smile
А второй вариант - лепить в барсике руками отсоединённый рекордсет, считать там же этой функцией и ложить в него - могу представить скорость. Записей там не очень много - но и не мало всё же.
Подскажите пожалуйста - как заставить работать этот запрос с моей функцией под барсиком.
smile
PM MAIL WWW ICQ   Вверх
Akina
Дата 30.12.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



А поконкретнее? А еще лучше - MDB с этой функцией, таблицей (20-30 записей) и запросом. Обрареный. Приаттачить. Тут.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kulibin
Дата 30.12.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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="Всё ОК smile"
end sub

И хранимая процедура в аксесе:
SELECT fld1,fld2,(MySum(fld4,fld5)) as MyS from tbl1
в аксесе этот запрос отлично работает

И далее в проекте на VB6:
rs.open "select * from qr1",adopenstatic,adlockpessimistic smile
Функция MySum не определена, будьте здоровы smile
Вот такая ерунда.
Конечно аксес это не оракл а вба не plsql smile - но всётаки теплится надежда что такое может работать. Хотя я начал это делать уже на sql - гемор страшный. Ну не предназначен он для таких вычислений smile (речь идёт не о приведённом выше примере - его то очень легко на sql перевести)

PM MAIL WWW ICQ   Вверх
kulibin
Дата 30.12.2005, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Вот собственно немного сырой вариант переделки того что мне нужно на стракчер квери ленгвидж smile :
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
PM MAIL WWW ICQ   Вверх
kulibin
Дата 31.12.2005, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Эх - самообслуживание полное smile
SELECT Day(DateAdd("d", -1, (DateSerial(Year(Date()), Month(DateAdd("M", 1, Date())), 1)))); - к-во дней в месяце(текущем) - может кому пригодится smile
PM MAIL WWW ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.1079 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.