Страницы: 1
RSS
Excel VBA userform -> password Oracle DB
 
Добрый вечер!

Написал код для загрузки и анализа файла, затем для загрузки файла-эквивалента из онлайн Oracle DB, сравнения их между собой и выдачу pdf отчета. При автоматическом подключении к дб выпадают 2 inputbox'a, один на ввод даты, другой на пароль. Естественно, тот что на пароль не могу переделать под password char как в случае с userform.

Необходимо написать код для userform, на которой есть поле для ввода пароля и кнопка. При нажатии кнопки, пароль из текстового поля должен подставляться прямиком в sql запрос к Oracle DB. Нет возможности проверить пароль на правильность, к сожалению. И как обозначить wrong password, если нельзя проверить пароль на правильность?

Это реально?:) в VBA недели две, поэтому буду рад Вашей помощи. Желательно, простым языком :)
 
kakao, добрый, вы бы привели небольшой отрезок кода, где идет подключение к БД. Или попробуйте подобную функцию.  
 
См. файл. Пароль 123. Замещающий символ можно поменять в свойствах ТекстБокса.
P.S. Дату тоже можно вводить на форму, чтобы не вызывать ещё и InputBox.
 
Юрий М, видел этот пример в другой теме, но не подходит, к сожалению, так как нет возможности проверить пароль. И сложность в том, чтобы поместить это в середину sql запроса.
Jungl, Вот весь макро на выгрузку файла в Oracle. Полностью работающий в моем случае, но требует усовершенствования. Заранее прошу прощения за ошибки, может и глупые, совсем в этом зеленый.

Еще вот думаю, поставил так, чтобы при вызове inputbox для даты по дефолту была дата на сегодня в формате дд-ммм-гг. Реально ли сделать так, чтобы если дата была в другом формате, была ошибка *неверный формат*? В то же время, может быть такое, что на конкретную дату не было данных совсем, можно ли как-то перестраховаться от этого? Скажем, если лист пустой после экспорта, то *данных на это дату нет*?
Код
Sub Upl()

    Application.ScreenUpdating = False
''this macro uploads table with data from DB
    Sheets("LL").Select
    Worksheets("LL").Columns.ClearFormats
    Worksheets("LL").Columns.ClearContents
    Dim LLpass As String
    Dim login As String
    Dim dat As Variant
    Dim default As String
    default = Date
    default = Format(Date, "dd-mmm-yy")
    LLpass = InputBox("Please provide LL password")
    If MFpass = "False" Or LLpass = "" Then
        MsgBox "Wrong password", vbCritical
    Sheets("Main Page").Select
            End
    End If
    dat = InputBox("Please provide operation date in the same format", , default)
    If dat = "" Then
        MsgBox "Date not specified", vbCritical
    Sheets("Main Page").Select
        End
    End If
    login = UCase(Environ("USERNAME"))
'creates connection with Oracle server
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=MSDAORA.1;Data Source=MYHOSTNAME;Password=" & LLpass & ";User ID=" & login & ""
'identifies where to paste
    sSql = "select a, b, c, d, from e where b <> 0 and c = ('" & dat & "') and d = '20' and a like '_____%'"
    Set rs = GetRs(sSql, cn)
    [a2].CopyFromRecordset rs
    rs.Close
    Set rs = Nothing
    End Sub
    Function GetRs(sSql, cn)
    Set GetRs = CreateObject("ADODB.Recordset")
    GetRs.Open sSql, cn
    Application.ScreenUpdating = True
    End Function
 
Доброе время суток.
Цитата
kakao написал: так как нет возможности проверить пароль.
Почему нет? Делаете форму для ввода логина и пароля, по нажатию кнопки Ok на ней проверяете через
Connection.Open  "Provider=MSDAORA.1;Data Source=MYHOSTNAME;Password=" & TextBoxPassword.Text & ";User ID=" & TextBoxLogin.Text & ";"
Если подключение успешно, то верны и логин и пароль, если же получаете ошибку с соответствующим ORA, то ошибка - выводите Msgbox с сообщением о неверной паре логин пароль. Далее уже это открытое подключение возвращаете из формы (если успешно) и используете для получения данных.
Изменено: Андрей VG - 09.01.2017 13:10:49
 
Андрей VG, добрый день.

Спасибо за идею, но пока не совсем понимаю, как ее выполнить то есть, мы определяем переменную, как это уже сделано в коде (Dim LLpass As String), затем приравнием ее к текстбоксу (LLpass = Textbox1?) Затем задаем условия, но как правильней?
 
Цитата
Андрей VG написал:
это открытое подключение возвращаете из формы
А зачем? Что мешает весь код поместить на форму?
 
А что вообще мещает сделать для этого специальный класс? Например, Database.
There is no knowledge that is not power
 
Цитата
RAN написал: Что мешает весь код поместить на форму?
Угу! Для примера, организация подключения к SQL Server. Для Oracle потребуется доработать код в форме.
Успехов.
 
Не совсем понимаю, то есть нельзя добавить userform в уже написанный код, без его существенного усложнения функциями?)
Страницы: 1
Читают тему
Наверх