Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Открытие БД с паролем


Автор: Flotskiy 10.4.2005, 15:31
Добрый вечер всем.
Помогите , pse, в решении вопроса:
Имеется БД Access "ARM.mdb".
В проге есть модуль "Globals" с таким кодом:
Код

Public Declare Function SendMessageByString& Lib "user32" _
    Alias "SendMessageA" (ByVal hwnd As Long, _
    ByVal wMsg As Long, ByVal wParam As Long, _
    ByVal lParam As String)

Public Const LB_SELECTSTRING = &H18C
Public gFindString As String
Public Const gDataBaseName = "C:\ARM\ARM.mdb"
Public Const gDataBaseName2 = "C:\ARM\Auxiliary.mdb"

В формах соединение с БД создается так:
Код

Private Sub Form_Load()
 
  Data1.DatabaseName = gDataBaseName
 Data1.RecordSource = "Glavnaja"

 Set publishersClass = New dataClass

With publishersClass
Set .FormName = Me    
Set .dataCtl = Data1  
Set .ProgressBar = ProgressBar1
   .dbName = gDataBaseName
   .Buttons = "cmdButton"
   .RecordSource = "SELECT * FROM Glavnaja " 
   .LabelToUpdate = lblRecordCount
   .FindCaption = "Select a Publisher"
   .FindRecordSource = "SELECT Family FROM Glavnaja ORDER BY Family"
   .FindMatchField = "Family"
   .Tag = "1"   
   .ProcessCMD 0     
End With


Для навигации по БД в проге есть модуль класса, который используется всеми формами (7 форм)
И еще соединение такое:
Код

Set adoConnection = New ADODB.Connection
Set adoRecordset = New ADODB.Recordset

connectString = "Provider=Microsoft.Jet.OLEDB.3.51;" _
                 & "Data Source=" & gDataBaseName

Работает все. Решил поставить пароль на БД, прочитал топик Amt, где Cardinal дает код и стал экспериментировать
Заменил в модуле
Код

Public Const gDataBaseName = "C:\ARM\ARM.mdb"
на
Public Const gDataBaseName = " True, False, C:\ARM\ARM.mdb; PWD=123"

и еще по всякому пробовал, но выдает ошибку:"Неправильное файловое имя",
Как решить эту проблему? Настало время запаролить БД.
С уважением

Автор: amt 11.4.2005, 07:17
Flotskiy, по этому коду(взял у [b]Naghual) я создаю базу (с паролем)
Код

Dim newDB As dao.Database
   Dim newTD As dao.TableDef
   Dim newFD As dao.Field
   Dim NewID As dao.Index

On Error GoTo CreateDatabase_Error
  
   Set newDB = dao.Workspaces(0).CreateDatabase("C:\temp.mdb", dbLangGeneral & ";pwd=1", dbVersion30 + dbEncrypt)
   
   Set newTD = newDB.CreateTableDef("Dictionaries")
   Set newFD = newTD.CreateField("ID", dbLong)
   newFD.Required = True
   newTD.Fields.Append newFD
   Set newFD = newTD.CreateField("NAME", dbText, 64)
   newFD.AllowZeroLength = False
   newFD.Required = True
   newTD.Fields.Append newFD
   Set newFD = newTD.CreateField("TESTTIME", dbInteger)
   newFD.Required = True
   newTD.Fields.Append newFD
   
   Set NewID = newTD.CreateIndex("Dictionary_ID")
   NewID.Fields = "+ID"
   NewID.Primary = True
   NewID.Required = True
   NewID.Unique = True
   newTD.Indexes.Append NewID
   Set NewID = newTD.CreateIndex("Dictionary_NAME")
   NewID.Fields = "+NAME"
   NewID.Required = True
   NewID.Unique = True
   newTD.Indexes.Append NewID
   newDB.TableDefs.Append newTD
   newDB.TableDefs.Refresh
  
   newDB.Close
   

CreateDatabase_OK:
   Exit Function
   
CreateDatabase_Error:
   If dao.Errors.Count > 0 Then
       MsgBox dao.Errors(0).Number & ":" & dao.Errors(0).Description, vbCritical + vbOKOnly + vbApplicationModal, App.Title
   Else
       MsgBox Err.Number & ":" & Err.Description, vbCritical + vbOKOnly + vbApplicationModal, App.Title
   End If
   Resume CreateDatabase_OK


А этим кодом открываю (взял у cardinal)
Код

Dim strConnect As String
Dim pwd As String
pwd = "1"
strConnect = ";database=" & App.Path & "\db23.mdb" & ";PWD=" & pwd & ""  'data access with password"
Set mdb = OpenDatabase("", True, False, strConnect)

У меня все классно работает

Автор: Flotskiy 11.4.2005, 11:25
Добрый день всем!
amt, у меня уже готовая БД, пароль поставил с Access'а. Мне надо изменить строку в модуле:
Код

Public Const gDataBaseName = "C:\ARM\ARM.mdb"
на что-то типа:
Public Const gDataBaseName = " True, False, C:\ARM\ARM.mdb; PWD=123"



Через эту константу соединяются все формы и SQL-запросы, так что название ее изменять нельзя. Вот такой вопрос.
С уважением

Автор: Exception 12.4.2005, 15:06
Я бы тебе не советовал в одном проекте юзать ADO и DAO. Ничем хорошим это не кончится. Кстати,
Код

Public Const gDataBaseName = " True, False, C:\ARM\ARM.mdb; PWD=123"

и
Код

connectString = "Provider=Microsoft.Jet.OLEDB.3.51;" _
                 & "Data Source=" & gDataBaseName

знаешь что дают?
Код

connectString = "Provider=Microsoft.Jet.OLEDB.3.51;" _
                 & "Data Source= True, False, C:\ARM\ARM.mdb; PWD=123"

Data Source - имя файла. И какое оно у тебя? " True, False, C:\ARM\ARM.mdb" Конечно, ошибка. Надо просто "C:\ARM\ARM.mdb", а True и False вообще не знаю зачем. Если хошь такую строчку составить, бери ADO Data Control -> Custom и там Build Connection String. Там есть визард, который облегчит создание ConnectionString.

Автор: Flotskiy 13.4.2005, 05:52
Всем доброе утро!

Run-time error, у меня работает вот такой код:
Код

Public Const gDataBaseName = "C:\ARM\ARM.mdb"
connectString = "Provider=Microsoft.Jet.OLEDB.3.51;" _
                 & "Data Source=" & gDataBaseName

а остальное-это эксперимент и конечно-не работает, выше написано.
Мне надо в первую строку добавить открытие с паролем.
Ты предлагаешь
Цитата

бери ADO Data Control

нельзя, это надо всю систему переделывать
Цитата
Я бы тебе не советовал в одном проекте юзать ADO и DAO. Ничем хорошим это не кончится.

На форме стоит объект DAO для работы с БД, а ADO используется только в запросах.
Я подсоединил код одной формы, если интересно, просмотрите
С уважением

Автор: Exception 14.4.2005, 17:42
Черт возьми... такой длинный код.
И все равно не пойму, зачем тебе ADO. Запросы ведь можно и через ДАО делать (если ты про sql)

Автор: Flotskiy 15.4.2005, 05:45
Доброе утро всем!

Run-time error, этим кодов формируется около двух десятков документов с пересылкой в Excel, а начальный код я взял из книги "Введение в программирование баз данных" автора Дж. Коннелла, и все разработки ведутся его методом. Есть его примеры на сайте "WWW.dmk.ru", если интересно посмотреть.
Мне только бы в модуле "Globals" открыть БД с паролем, и прописать путь к БД, чтобы работала строка:
Код

Public gFindString As String

С уважением

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)