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

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

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

Код: 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
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32741034
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напишите нормально вопрос.
Как это делается - я дал ссылку.

Хотя бы
- MDB/ADP
- и пример исходных данных и результата
...
Рейтинг: 0 / 0
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32741048
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. хелп по DLookup
...
Рейтинг: 0 / 0
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32741158
-=XXX=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32741174
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед мной не нужно извиняться, просто чем более полно описан вопрос,
тем выше вероятность получить быстро и много различных вариантов решения
данного вопроса.

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

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

Таблица есть.
А что должен вернуть запрос?
В смысле какие поля и по какому алгоритму каждое из них д.б. заполнено.
...
Рейтинг: 0 / 0
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32741193
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, не понял, зачем для исполнения "простенького запроса" создавать 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
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32741210
-=XXX=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица есть, но только я её переслать не могу, на работе за такое по какосам настучать могут :(

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

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

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


в запросе сослаться на функцию 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
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32741482
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
YBWищите ваше значение Длукап'ом - поиск тарифа по совпадению кода страны с переменной n

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

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

Биллинг у нас хорошиы и зоны определяет, и с детализацией работает как надо :)
Честно говоря, он сдесь не причем... это нужно для анализа цен закупки у операторов. Т.к. зоны у всех разные, префиксы на направления тоже все по своему дают (бывает даже очень коряво), мне просто нужно их сравнить и проанализировать. В excele все очень просто и быстро работает, а вот в Accesse, что -то пока не получается :(
...
Рейтинг: 0 / 0
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32742093
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
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
Срочно нужна помошь (создать VBA функцию с SQL запросом и вернуть одно его значение)
    #32742180
-=XXX=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geo
public function f
f=currentdb.execute("select ...и дальше текст запроса...").fields(0)
end function


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


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