powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как уйти от DlookUP
25 сообщений из 50, страница 1 из 2
Как уйти от DlookUP
    #32616605
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть кусок кода
Код: plaintext
1.
2.
3.
4.
5.
6.
Prava_yes = DLookup("[ADV_REP_Admin]", "Permissions", "[Name]=" & "'" & Forms!PassForm!PassForm_nam & "'")
If Prava_yes = True Then
    Open_ADV_REP = "*"
Else
    Open_ADV_REP = Trim(Forms!PassForm!PassForm_nam)
End If
Попытался изменить его на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim rs As ADODB.Recordset
Dim cn As Connection
Dim str As String
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
str = "select ADV_REP_Admin from Permissions where name='" & Forms!PassForm!PassForm_nam & "';"
rs.Open str, cn, adOpenStatic, adLockReadOnly, adCmdText
While Not rs.EOF
If rs!ADV_REP_Admin = - 1  Then
    Open_ADV_REP = "*"
Else
    Open_ADV_REP = Trim(Forms!PassForm!PassForm_nam)
End If
Wend
А как ещё можно?
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616628
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Применить DAO ;-)
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616630
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить
Предложенный вариант почему-то не проходит (зацикливается).
Странно.
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616635
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕ, я имею ввиду не вариации на тему, по координально.
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616646
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри не то выкинул.
Вот код!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Function Open_ADV_REP() As String
'--------------------------------------------------
Dim rs As ADODB.Recordset
Dim cn As Connection
Dim str As String
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
str = "select ADV_REP_Admin from Permissions where name='" & Forms!PassForm!PassForm_nam & "';"
rs.Open str, cn, adOpenStatic, adLockReadOnly, adCmdText
    While Not rs.EOF
If rs!ADV_REP_Admin = -1 Then
    Open_ADV_REP = "*"
Else
    Open_ADV_REP = Trim(Forms!PassForm!PassForm_nam)
End If
rs.MoveNext
Wend
' -------------------------------------------------------------
 
End Function
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616650
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, если мысля через ХП.
Пойдёт?
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616653
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно зацикливается
Как он у тебя из цикла выйдет
если rs.EOF не сразу False
Зачем там вообще цикл?
ADP or MDB ?
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616655
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь перейти от MDB в ADP
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616685
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдеай ХП кторая вернет тебе готовый результат
зачем проверять условие в цикле если его сразу в запрос можно
втиснуть.

Create procedure MySP (@PName as varchar(100))
AS

IF exists(SELECT ADV_REP_Admin FROM Permissions WHERE Name=@PName AND ADV_REP_Admin=1)
SELECT Cast(1 AS bit) AS RetCode
ELSE
SELECT Cast(0 As bit) AS RetCode


Prava_yes = CurrentProject.Connection.Execute("dbo.MySP " & Forms!PassForm!PassForm_nam ).Fields(0)

If Prava_yes Then
Open_ADV_REP = "*"
Else
Open_ADV_REP = Trim(Forms!PassForm!PassForm_nam)
End If
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616698
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
апострофы забыл до кучи можно указать в уникоде nvarchar


Prava_yes = CurrentProject.Connection.Execute("dbo.MySP N'" & Forms!PassForm!PassForm_nam & "'"
).Fields(0)
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616699
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в mdb быстрее всего работает dlookup, чем рекордсеты и adodb.command
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616719
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я от mdb и хочу избавиться.
2 ищ: Кстати разговор не забыл (есть возможность достать мощный ноут, пойдёт?)
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616726
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CurrentProject.Connection в MDB нет
так что реч об ADP
adodb.command обращающийся к SQL серверу
и использующий в качестве источника
запрос с параметром возвратит на клиента
уже отобранные сервером данные

а следовательно отработает гораздо быстрее
dlookup который сначала вытянет на клиента все данные из источника
а уже потом применит к ним фильтр.
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616735
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если правильно понял
это ХП
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Create procedure MySP (@PName as varchar( 100 ))
AS

IF exists(SELECT ADV_REP_Admin FROM Permissions WHERE Name=@PName AND ADV_REP_Admin= 1 )
SELECT Cast( 1  AS bit) AS RetCode
ELSE
SELECT Cast( 0  As bit) AS RetCode
А это вызов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Prava_yes = CurrentProject.Connection.Execute("dbo.MySP " & Forms!PassForm!PassForm_nam ).Fields( 0 )

If Prava_yes Then
Open_ADV_REP = "*"
Else
Open_ADV_REP = Trim(Forms!PassForm!PassForm_nam)
End If
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616745
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Latuk:
А ты не прав,
Код: plaintext
1.
CurrentProject.Connection
в MDB работает, если не веришь, проверь
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616753
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати конструкция
CurrentProject.Connection.Execute("блаблабла").Fields(0)
полностью заменяет DLookup но в отличии от него может выполнять
динамически собранные запросы

только если есть вероятность возвращения пустого результата
это необходимо доаполнительно обработать
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616831
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Latuk:
Код: plaintext
1.
Prava_yes = CurrentProject.Connection.Execute("dbo.MySP N'" & Forms!PassForm!PassForm_nam & "'").Fields( 0 )

не работает.
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616844
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a что говорит?
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616852
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Create procedure MySP (@PName as varchar(100))
AS
--Забыл
SET NOCOUNT ON
--
IF exists(SELECT ADV_REP_Admin FROM Permissions WHERE Name=@PName AND ADV_REP_Admin=1)
SELECT Cast(1 AS bit) AS RetCode
ELSE
SELECT Cast(0 As bit) AS RetCode
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616863
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё равно выпадает ошибка
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616895
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А просто запустить ХП из окна базы пробовал?
Что возвращает?
созданая тобой ХП MySP(название только для примера привел)
может имень другой префикс (не dbo)

Покажи рзультат сборки строки
"dbo.MySP N'" & Forms!PassForm!PassForm_nam & "'"
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32616976
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере отрабатывает правильно, а в коде строка глючит.
Использую её в Mdb, поэтому может не понимает?
Хотя по-моему можно из mdb ссылаться на ХП, а может я ошибаюсь?
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32617061
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga
Использую её в Mdb, поэтому может не понимает?

Да.
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32617068
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Proga

Ну вы блин даете !!!

авторНа сервере отрабатывает правильно, а в коде строка глючит.
Использую её в Mdb, поэтому может не понимает?
Хотя по-моему можно из mdb ссылаться на ХП, а может я ошибаюсь?

у mdb currentproject.connection конечно есть но оно соеденено с текущей MDB базой в которой нет процедуры dbo.MySP

создавай новый конекшен к СЕРВЕРУ и тогда запрашивай оттуда хранимку с префиксом DBO
...
Рейтинг: 0 / 0
Как уйти от DlookUP
    #32617071
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведенный мной код для ADP

Для применения его в MDB ты должен понять что происходит

CurrentProject.Connection.Execute
это вызов метода Execute объекта ADODB.Connection
вероятно для MDB тебе придется самому создать этот ADODB.Connection
а не использовать готовый CurrentProject.Connection как это происходит в ADP
поскольку создание ADODB.Connection довольно ресурсоемко
лучше его создать один раз,положить ссылку в глобальную переменную
и потом ссылатся через нее
Вызов этого метода в случае если ХП возвращает SELECT
вернет ссылку на рекордсет
Dim rs As ADODB.Recordset
Set rs = CurrentProject.Connection.Execute("dbo.MySP N'" & Forms!PassForm!PassForm_nam & "'")
созданный этим методом
но поскольку мы заранее знаем
что рекордсет имеет всего одну строку с одним столбцом
а точнее нам необходимо только значение нулевого столбца первой строки
то мы не сохраняем ссыку а сразу разименовываем ее
получая конкретное свойство столбца строки этого рекордсета Fields(0).Value

CurrentProject.Connection.Execute("dbo.MySP N'" & Forms!PassForm!PassForm_nam & "'").Fields(0)

Возможно в твоем случае
выбор между DAO и ADO происходит автоматически
(пиоритет зависит от последовательности соотв библиотек в референс)
и ты пытаешся выполнить ХП с помощью DAO.Execute
который может выполнить ХП только через специальный "запрос к серверу"
или ты создал ХП из отдельного приложения (например QA)
а access все это время был открыт
а поскольку пречень ХП он засасывает при загрузке (F5-обновить окно БД)
то текущий конект попросту считает что ХП с таким именем не существует
обрати внимание на префикс ты мог создать ХП vasia.MySP
Ассеss может не показывать префиксы но они от этого никуда не деваются.

Далнейшее в твоих руках :)
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как уйти от DlookUP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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