Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение) / 17 сообщений из 17, страница 1 из 1
15.10.2004, 16:10:40
    #32740811
-=XXX=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Здравствуйте,
вообщем у меня такая ситуация:
нужно с помошью VBA создать функцию с простеньким SQL запросом, из которого нужно выцепить результат в виде текстовой переменной (в результате этого запроса будет получаться всего лишь одно единственное значение).

PS В хелпе уже больше не могу ковыряться, всесь мозг сломал :(

Топик, ..., переименован
...
Рейтинг: 0 / 0
15.10.2004, 16:12:02
    #32740815
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
...
Рейтинг: 0 / 0
15.10.2004, 17:30:08
    #32741016
-=XXX=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Если кто может, помогите, очень надо.....
...
Рейтинг: 0 / 0
15.10.2004, 17:37:47
    #32741033
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Держи, проще некуда:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Function SimpleSQL(strSQL As String) As String
On Error Resume Next
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    
    Set qdf = CurrentDb().CreateQueryDef("", strSQL)
    Set rst = qdf.OpenRecordset()
    SimpleSQL = rst( 0 )
End Function
...
Рейтинг: 0 / 0
15.10.2004, 17:39:18
    #32741034
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Напишите нормально вопрос.
Как это делается - я дал ссылку.

Хотя бы
- MDB/ADP
- и пример исходных данных и результата
...
Рейтинг: 0 / 0
15.10.2004, 17:44:53
    #32741048
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
см. хелп по DLookup
...
Рейтинг: 0 / 0
15.10.2004, 18:43:47
    #32741158
-=XXX=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
incold, извени, что подробно не расписал, просто я ни когда не сталкивался с написанием макрасов в access, но очень срочно понадобилось сделать очень простую функцию, типа вложенного селекта.

Хотя у меня глобальная задача посложнее будет:
Вообщем, у меня есть список телефонных кодов(префиксов), операторов и цен на данное направление (таблица выгледит следующим образом [prefix, opperator, price]).
Есть маленькая хитрость: если оператор в прайсе дает код 1(сша и канада) по цене 5 центов, то все коды, которые начинаются с этой цифры (1204,12687, 1450 и т.п.) тоже должны быть по этой цене, т.е по 5 центов.
Для сравнения цен мне нужно сделать перекресный запрос с таким условием, чтоб если встречается пустая цена, то должна выполняться следующая штука: от текущего кода должно отсекаться по по одному символу, пока не будет найдена цена вышестоящего префикса. Если такого префикса нет, то должно остаться пустое значение.

Если делать с DLookup получается очень медленно, на запрос может уйти очень много времени (около часа наверное).

Я хотел сделать функцию, которая могла бы выполнять слелующий алгоритм и возвращатать нужную цену.

Кстати, у меня проблемма :( уже не первый раз пытаюсь запустить макрос, а у меня постоянно выдается ошибка...
Если рассматривать на примере написанного сдесь кода товаришем PA(за что ему огромное спасибо), то при запуске выделяется строка "Dim qdf As DAO.QueryDef" и появляется надпись: "User-defined type not defined"
Почему так получается? :(
...
Рейтинг: 0 / 0
15.10.2004, 18:53:41
    #32741174
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Перед мной не нужно извиняться, просто чем более полно описан вопрос,
тем выше вероятность получить быстро и много различных вариантов решения
данного вопроса.

автор"Dim qdf As DAO.QueryDef" и появляется надпись: "User-defined type not defined"

Скорее всего не подключена библиотека DAO (как подключить см. FAQ)

Таблица есть.
А что должен вернуть запрос?
В смысле какие поля и по какому алгоритму каждое из них д.б. заполнено.
...
Рейтинг: 0 / 0
15.10.2004, 19:04:38
    #32741193
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Честно говоря, не понял, зачем для исполнения "простенького запроса" создавать querydef

Можно написать проще

для мдб:

public function f
f=currentdb.execute("select ...и дальше текст запроса...").fields(0)
end function

для адп:

public function f
f=currentproject.Connection.execute("select ...и дальше текст запроса...").fields(0)
end function
...
Рейтинг: 0 / 0
15.10.2004, 19:18:24
    #32741210
-=XXX=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Таблица есть, но только я её переслать не могу, на работе за такое по какосам настучать могут :(

чтоб было по понятней, приведу какой-нибудь пример:
Вообщем, предположим, один из операторов дал код 7(Россию целиком) по цене 10 центов, 79 (типа все сотовые) по 5 центов. В нашем случае в таблице появляется код 7095. Оператор отдельно его не выделил, хотя реально по его прайсу он стоит 10 центов. Адгоритм таков, что он отсекает последний символ (в нашем случае получается 709), ни чего не находит, отсекает еще один (70)- опять ни чего; опять отсекае(7) - находит код 7 с ценой 10 центов и присваивает эту цену текушему коду, т.е. в нашем случае 7095=10 центов... и т.д.
Вот такая вот загагулина :)
...
Рейтинг: 0 / 0
16.10.2004, 00:21:53
    #32741331
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
2 -=XXX=-
Как всё знакомо про префиксы:)

Ваша биллинговая система неверно устроена - алгоритм не таков - реально расписываются все возможные коды и комбинациии на конкрентную зону, плюс ещё есть правила подмены - в общем, не составляет никакого труда по справочникам с префиксами найти нужный тариф по заданной зоне...
...
Рейтинг: 0 / 0
16.10.2004, 00:24:20
    #32741333
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
А код 7095, я так подозреваю, идёт из детелизации переговоров?:)

В общем - определите таблицу зон и префиксов по зонам - оператор предоставляет эту информацию - жизнь станет проще - если вы суб оператор у вас она и так проще должна быть...
...
Рейтинг: 0 / 0
16.10.2004, 13:21:07
    #32741479
YBW
YBW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
если так уж прижало - делайте так как сами и написали... на вскидку что-т вроде:


в запросе сослаться на функцию q передав ей в качестве аргумента значение n введенное оператором: CountryCode&CityCode (напр 7095 или 71141)

как стринг напр: function q(n as string) as currency

ну и пребирайте в цикле с обратным шагом как и написали в задании


for i = len(n) to 1 step - 1

n = left(n,i)

ищите ваше значение Длукап'ом - поиск тарифа по совпадению кода страны с переменной n

a = dlookup("Tariff", "tblCountries", "CountryCode = " & n)

если нашли выходите из цикла

exit for

если нет идите дальше - next i

или можно рекурсивную функцию написать - пусть сама себя вызывает хоть до посинения...

но по большому буфету - прислушайтесь к советам предыдущих ораторов...

если оператор неверно ввел 7095 кто проверит на 7094 - может он не только в одном месте ошибся... или если ввел код страны которо(й)го вообще не существует
...
Рейтинг: 0 / 0
16.10.2004, 13:28:35
    #32741482
YBW
YBW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
YBWищите ваше значение Длукап'ом - поиск тарифа по совпадению кода страны с переменной n

кажется на Null еще придется проверять - вощем попробуй сам...
...
Рейтинг: 0 / 0
18.10.2004, 10:13:14
    #32742085
-=XXX=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Hummer2 -=XXX=-
Как всё знакомо про префиксы:)

Ваша биллинговая система неверно устроена - алгоритм не таков - реально расписываются все возможные коды и комбинациии на конкрентную зону, плюс ещё есть правила подмены - в общем, не составляет никакого труда по справочникам с префиксами найти нужный тариф по заданной зоне...

Биллинг у нас хорошиы и зоны определяет, и с детализацией работает как надо :)
Честно говоря, он сдесь не причем... это нужно для анализа цен закупки у операторов. Т.к. зоны у всех разные, префиксы на направления тоже все по своему дают (бывает даже очень коряво), мне просто нужно их сравнить и проанализировать. В excele все очень просто и быстро работает, а вот в Accesse, что -то пока не получается :(
...
Рейтинг: 0 / 0
18.10.2004, 10:19:51
    #32742093
YBW
YBW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Function a(n As String) As String
For i = Len(n) To 1 Step -1
n = Left(n, i)
a = DLookup("Tariff", "tblCountries", "CountryCode = " & n) & ""
If a <> "" Then
Exit For
End If
Next i
End Function
...
Рейтинг: 0 / 0
18.10.2004, 10:57:30
    #32742180
-=XXX=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
Geo
public function f
f=currentdb.execute("select ...и дальше текст запроса...").fields(0)
end function


Выделяет ".execute" и сообщает об ошибке "Expected Function or variable" :(
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение) / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]