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

Т.е. вроде бы должно быть просто, но почему-то не получается.
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32564604
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чем загвоздка? Что не получается?
мой_параметр () возврашает значение?
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #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
Как правильно подставить параметр?
    #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
Как правильно подставить параметр?
    #32565290
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! :-)
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567430
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, срочно подскажите, пожалуйста, проблема вот в чем:
Если база с не линкованными таблицами, то данная конструкция работает без проблем.
Но когда я делаю линки (mdb+mdb), то Access сразу начинает ругаться на стороки:
Код: plaintext
Set rst = db.OpenRecordset("SELECT тбл_пароль.* FROM тбл_пароль WHERE ((пр_пароль = ID))", dbOpenSnapshot)
или
Код: plaintext
Set rst = db.OpenSnapshot("тбл_пароль", dbOpenTable)
и то и то работает, если таблица "тбл_пароль" находится в базе и сразу перестает работать, если к базе сделаны
линки, т.е. если "тбл_пароль" является линкованной таблицей.
Что надо сделать, чтобы заработало ? ? ?
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567444
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gyslik.работает, если таблица "тбл_пароль" находится в базе и сразу перестает работать, если к базе сделаны линки, т.е. если "тбл_пароль" является линкованной таблицей.
Что надо сделать, чтобы заработало ? ? ?А линк-то рабочий? Если да, то аксессу должно быть пофиг.
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567479
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Линк 100% рабочий.
Т.е. я делаю эту таблицу в базе линкованной - строка не работает, делаю не линкованной - строка работает.
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567485
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка какая?
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567508
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ac97, ошибка выполнения 3219, Invalid operation.

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

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

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

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

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

Ну - не знаю :(
Пошамань - базку посжимай
Не должно такого быть - это глюк :(
Я на MSSQL через ОДБЦ линкую, и то все ОК :)
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567640
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сделать тоже самое в новой базе.
Если получится - шамань со своей старой. Не получится - бум думать.
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567668
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сжал свою базу - с линками не работает, перенес все в новую базу, тоже с линками не работает. (Без линков - все работает супер).
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567676
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкладывай тестовые версии в форум - будем ковырять
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567678
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты не переноси, а сделай заново. Там же чуть-чуть.
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32567727
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй вместо dbOpenSnapshot написать dbOpenDynaset, если не поможет, напиши
(*,dbOpenDynaset,dbSeeChanges)
*-необходимый объект
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #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
Как правильно подставить параметр?
    #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
Как правильно подставить параметр?
    #32573206
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexander G:
Спасибо, большое, что посмотрели мою Б.Д., сделал все исправления, про которые Вы говорили, но к сожалению это ничего не дало, т.е. база все-равно не берет путь из таблицы.
авторВместо перебора рекордсета в функции GetFileNameOnID ИМНО лучше воспользоваться функцией DlookUP
Может быть Вы конечно правы, но мне в этой базе нужно, чтобы было без DlookUp, т.к. там дальше еще много чего завязано.
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32573372
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?
Что я неправильно делаю :-(
...
Рейтинг: 0 / 0
Как правильно подставить параметр?
    #32573497
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу сказать. У меня после изменения типа на Long заработала сразу.

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

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


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