Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как уйти от DlookUP / 25 сообщений из 50, страница 1 из 2
22.07.2004, 12:13:07
    #32616605
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Есть кусок кода
Код: 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
22.07.2004, 12:19:32
    #32616628
Bor-L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Применить DAO ;-)
...
Рейтинг: 0 / 0
22.07.2004, 12:19:44
    #32616630
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Забыл добавить
Предложенный вариант почему-то не проходит (зацикливается).
Странно.
...
Рейтинг: 0 / 0
22.07.2004, 12:20:46
    #32616635
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
НЕ, я имею ввиду не вариации на тему, по координально.
...
Рейтинг: 0 / 0
22.07.2004, 12:25:13
    #32616646
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Сорри не то выкинул.
Вот код!
Код: 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
22.07.2004, 12:26:17
    #32616650
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Во, если мысля через ХП.
Пойдёт?
...
Рейтинг: 0 / 0
22.07.2004, 12:26:41
    #32616653
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Конечно зацикливается
Как он у тебя из цикла выйдет
если rs.EOF не сразу False
Зачем там вообще цикл?
ADP or MDB ?
...
Рейтинг: 0 / 0
22.07.2004, 12:27:45
    #32616655
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Пытаюсь перейти от MDB в ADP
...
Рейтинг: 0 / 0
22.07.2004, 12:38:43
    #32616685
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Сдеай ХП кторая вернет тебе готовый результат
зачем проверять условие в цикле если его сразу в запрос можно
втиснуть.

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
22.07.2004, 12:42:50
    #32616698
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
апострофы забыл до кучи можно указать в уникоде nvarchar


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

а следовательно отработает гораздо быстрее
dlookup который сначала вытянет на клиента все данные из источника
а уже потом применит к ним фильтр.
...
Рейтинг: 0 / 0
22.07.2004, 12:55:46
    #32616735
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Если правильно понял
это ХП
Код: 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
22.07.2004, 12:57:38
    #32616745
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
2 Latuk:
А ты не прав,
Код: plaintext
1.
CurrentProject.Connection
в MDB работает, если не веришь, проверь
...
Рейтинг: 0 / 0
22.07.2004, 12:59:23
    #32616753
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Кстати конструкция
CurrentProject.Connection.Execute("блаблабла").Fields(0)
полностью заменяет DLookup но в отличии от него может выполнять
динамически собранные запросы

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

не работает.
...
Рейтинг: 0 / 0
22.07.2004, 13:36:29
    #32616844
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
a что говорит?
...
Рейтинг: 0 / 0
22.07.2004, 13:38:19
    #32616852
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
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
22.07.2004, 13:43:51
    #32616863
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Всё равно выпадает ошибка
...
Рейтинг: 0 / 0
22.07.2004, 13:56:44
    #32616895
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
А просто запустить ХП из окна базы пробовал?
Что возвращает?
созданая тобой ХП MySP(название только для примера привел)
может имень другой префикс (не dbo)

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

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

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

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

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

создавай новый конекшен к СЕРВЕРУ и тогда запрашивай оттуда хранимку с префиксом DBO
...
Рейтинг: 0 / 0
22.07.2004, 14:59:33
    #32617071
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уйти от DlookUP
Приведенный мной код для 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как уйти от DlookUP / 25 сообщений из 50, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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