Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как правильно подставить параметр? / 24 сообщений из 24, страница 1 из 1
17.06.2004, 03:32:56
    #32564603
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Как мне на VBA написать так, чтобы в этой строке:
Код: plaintext
CurrentPath = GetFileName(мой_параметр, "выгрузка", Now)
вместо мой_параметр у меня подставились данные из функции:
Код: plaintext
1.
2.
3.
Public переменная As Long
Public Function мой_параметр () As Long
    мой_параметр = переменная
End Function

Т.е. вроде бы должно быть просто, но почему-то не получается.
...
Рейтинг: 0 / 0
17.06.2004, 03:50:46
    #32564604
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
а в чем загвоздка? Что не получается?
мой_параметр () возврашает значение?
...
Рейтинг: 0 / 0
17.06.2004, 10:55:35
    #32564901
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
В общем есть функция:
Код: plaintext
1.
2.
3.
Public nCurUser As Long
Public Function CurUserNumber() As Long
    CurUserNumber = nCurUser
End Function
Есть сторока, которая прописывает путь:
Код: plaintext
CurrentPath = GetFileNameOnID(CurUserNumber(), "выгрузка", Now)
Есть функция, формирующая название файла:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function GetFileNameOnID(ID As String, prefix As String, datDate As Date) As String
Dim strString As String
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim i As Integer
Set db = CurrentDb
Set rst = db.OpenRecordset("тбл_пароль", dbOpenTable)

strString = "C:\" & prefix & "_д." & Format(datDate, "dd.mm.yyyy") & "_в." & Format(datDate, "hh.mm") & ".xls"

If rst.RecordCount >  0  Then
    rst.MoveFirst
    For i =  0  To rst.RecordCount -  1 
        If rst!пр_пароль = ID Then
            strString = rst!пр_путь_к_файлу & prefix & "_д." & Format(datDate, "dd.mm.yyyy") & "_в." & Format(datDate, "hh.mm") & ".xls"
        End If
        rst.MoveNext
    Next
End If
    
GetFileNameOnID = strString

End Function
Эта строка не работает, Access ругается на:
Код: plaintext
Set rst = db.OpenRecordset("тбл_пароль", dbOpenTable)

автормой_параметр () возврашает значение
так вот он-то значение и не возвращает.
Или и что-то я неправильно делаю.
...
Рейтинг: 0 / 0
17.06.2004, 12:06:53
    #32565068
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Попробуй поменять dbOpenTable на dbOpenSnapshot, все равно ты таблицу открываешь только для чтения...

К слову, так писать плохо:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
If rst.RecordCount >  0  Then
    rst.MoveFirst
    For i =  0  To rst.RecordCount -  1 
        If rst!пр_пароль = ID Then
            strString = rst!пр_путь_к_файлу & prefix & "_д." & Format(datDate, "dd.mm.yyyy") & "_в." & Format(datDate, "hh.mm") & ".xls"
        End If
        rst.MoveNext
    Next
End If

лучше так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
With rst
    While Not .EOF
        If !пр_пароль = ID Then
            strString = rst!пр_путь_к_файлу & prefix & "_д." & Format(datDate, "dd.mm.yyyy") & "_в." & Format(datDate, "hh.mm") & ".xls"
        End If
        .MoveNext
    Wend
End with

А еще лучше так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Set rst = db.OpenRecordset("SELECT тбл_пароль.* FROM тбл_пароль WHERE ((пр_пароль = ID))", dbOpenSnapshot)

If rst.RecordCount >  0  Then
    GetFileNameOnID= rst!пр_путь_к_файлу & prefix & "_д." & Format(datDate, "dd.mm.yyyy") & "_в." & Format(datDate, "hh.mm") & ".xls"
else
    GetFileNameOnID = "C:\" & prefix & "_д." & Format(datDate, "dd.mm.yyyy") & "_в." & Format(datDate, "hh.mm") & ".xls"
end if
...
Рейтинг: 0 / 0
17.06.2004, 13:27:32
    #32565290
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Спасибо! :-)
...
Рейтинг: 0 / 0
18.06.2004, 14:35:27
    #32567430
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Народ, срочно подскажите, пожалуйста, проблема вот в чем:
Если база с не линкованными таблицами, то данная конструкция работает без проблем.
Но когда я делаю линки (mdb+mdb), то Access сразу начинает ругаться на стороки:
Код: plaintext
Set rst = db.OpenRecordset("SELECT тбл_пароль.* FROM тбл_пароль WHERE ((пр_пароль = ID))", dbOpenSnapshot)
или
Код: plaintext
Set rst = db.OpenSnapshot("тбл_пароль", dbOpenTable)
и то и то работает, если таблица "тбл_пароль" находится в базе и сразу перестает работать, если к базе сделаны
линки, т.е. если "тбл_пароль" является линкованной таблицей.
Что надо сделать, чтобы заработало ? ? ?
...
Рейтинг: 0 / 0
18.06.2004, 14:38:40
    #32567444
маяк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Gyslik.работает, если таблица "тбл_пароль" находится в базе и сразу перестает работать, если к базе сделаны линки, т.е. если "тбл_пароль" является линкованной таблицей.
Что надо сделать, чтобы заработало ? ? ?А линк-то рабочий? Если да, то аксессу должно быть пофиг.
...
Рейтинг: 0 / 0
18.06.2004, 14:44:15
    #32567479
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Линк 100% рабочий.
Т.е. я делаю эту таблицу в базе линкованной - строка не работает, делаю не линкованной - строка работает.
...
Рейтинг: 0 / 0
18.06.2004, 14:45:13
    #32567485
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Ошибка какая?
...
Рейтинг: 0 / 0
18.06.2004, 14:50:16
    #32567508
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Ac97, ошибка выполнения 3219, Invalid operation.

Недопустимая операция. (Ошибка 3219)

Возможные причины:

· Попытка записать значение свойства, которое допускает только чтение. Для того чтобы узнать, доступно ли свойство для чтения/записи, см. раздел справки для данного свойства.
· Попытка использовать метод или свойство, неприменимые к данному типу объектов Recordset. Методы и свойства, применимые к объектам Recordset разных типов, перечислены в разделе справки Объект Recordset, семейство Recordsets - Общие сведения.

· Попытка добавить свойство в семейство Properties объекта, который не поддерживает определяемые пользователем свойства.
· Попытка применить метод Update к объекту Recordset, доступному только для чтения.
...
Рейтинг: 0 / 0
18.06.2004, 14:51:53
    #32567515
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Это точно вываливается на указанной вами строке?
А брякпоинт на ней поставить?

PS: 2 маяк ПИВО (оно же новая Лестница)
...
Рейтинг: 0 / 0
18.06.2004, 14:57:13
    #32567537
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Брэкпоинт, поставил, в пошаговом режиме прошелся, Access функцию выполняет, но останавливается именно на этой строке, которую я указал.
...
Рейтинг: 0 / 0
18.06.2004, 15:21:29
    #32567627
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Gyslik.HELP, HELP, HELP ! ! !

Ну - не знаю :(
Пошамань - базку посжимай
Не должно такого быть - это глюк :(
Я на MSSQL через ОДБЦ линкую, и то все ОК :)
...
Рейтинг: 0 / 0
18.06.2004, 15:24:01
    #32567640
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Попробуй сделать тоже самое в новой базе.
Если получится - шамань со своей старой. Не получится - бум думать.
...
Рейтинг: 0 / 0
18.06.2004, 15:34:09
    #32567668
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Сжал свою базу - с линками не работает, перенес все в новую базу, тоже с линками не работает. (Без линков - все работает супер).
...
Рейтинг: 0 / 0
18.06.2004, 15:37:35
    #32567676
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Выкладывай тестовые версии в форум - будем ковырять
...
Рейтинг: 0 / 0
18.06.2004, 15:37:42
    #32567678
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
А ты не переноси, а сделай заново. Там же чуть-чуть.
...
Рейтинг: 0 / 0
18.06.2004, 16:00:04
    #32567727
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Попробуй вместо dbOpenSnapshot написать dbOpenDynaset, если не поможет, напиши
(*,dbOpenDynaset,dbSeeChanges)
*-необходимый объект
...
Рейтинг: 0 / 0
22.06.2004, 21:10:16
    #32572714
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Попробовал по всякому - с линками не работает, без линков - работает.

Выложил базу сюда, в ней "current_path.mdb" - база в которой при запуске надо ввести пользователя и пароль (например пользователь: 1 пароль: 1 или 2 ,2 ).
Проблема с формой "пфр_сохранить_данные" , т.е. она открывается, но пишет путь не из таблицы "тбл_пароль" а просто на С:\ . База "links.mdb" - база с таблицами, которые надо залинковать в базе "current_path.mdb". Модуль "бас_название_файла" - модуль в котором прописан путь:
Код: plaintext
Set rst = db.OpenRecordset("тбл_пароль", dbOpenDynaset, dbSeeChanges) 
Все сделанно под Access 97.

Если не сложно, посмотрите, пожалуйста, в чем может быть дело.
...
Рейтинг: 0 / 0
23.06.2004, 03:50:56
    #32572840
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
смотрим:
Код: plaintext
1.
2.
3.
4.
Public nCurUser As Long

Public Function CurUserNumber() As Long
    CurUserNumber = nCurUser
End Function

А здесь описываем ID As String и толкаем в нее CurUserNumber (а он Long)?:

Код: plaintext
Function GetFileNameOnID(ID As String, prefix As String, datDate As Date) As String
Нужно изменить - ID As long

по ходу:
зачем писать получение глобальной переменной через фунцию
CurrentPath = GetFileNameOnID(CurUserNumber(), "выгрузка", Now)
если можно просто
CurrentPath = GetFileNameOnID(nCurUser, "выгрузка", Now)

вместо перебора рекордсета в функции GetFileNameOnID ИМНО лучше воспользоваться функцией DlookUP
...
Рейтинг: 0 / 0
23.06.2004, 11:03:38
    #32573206
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
2 Alexander G:
Спасибо, большое, что посмотрели мою Б.Д., сделал все исправления, про которые Вы говорили, но к сожалению это ничего не дало, т.е. база все-равно не берет путь из таблицы.
авторВместо перебора рекордсета в функции GetFileNameOnID ИМНО лучше воспользоваться функцией DlookUP
Может быть Вы конечно правы, но мне в этой базе нужно, чтобы было без DlookUp, т.к. там дальше еще много чего завязано.
...
Рейтинг: 0 / 0
23.06.2004, 11:58:39
    #32573372
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
?
Что я неправильно делаю :-(
...
Рейтинг: 0 / 0
23.06.2004, 12:35:30
    #32573497
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Не могу сказать. У меня после изменения типа на Long заработала сразу.

Проверьте, что дает CurUserNumber() перед передачей в функцию

CurrentPath = GetFileNameOnID(CurUserNumber(), "выгрузка", Now)
...
Рейтинг: 0 / 0
23.06.2004, 13:18:52
    #32573664
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подставить параметр?
Ура, спасибо, чуть-чуть еще поковырялся и все заработало ! ! !
2 Alexander G:
Спасибо ! ! !
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как правильно подставить параметр? / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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