LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)






























Выпуск 85. Microsoft Access и Framework .NET

Подписка: "Microsoft Access - программирование и готовые решения"
Дата:         04.12.2007
Сайт:         http://help.leadersoft.ru
Статья:      http://help.leadersoft.ru/tabid/126/EntryID/116/Default.aspx
Загрузка:   http://www.leadersoft.ru/russian/download/freeware/la_NetAccess.zip 
Требования:
     Для применения примеров необходимо установить
Microsoft Access и Framework .NET.  Если Вы желаете сами создать dll библиотеку, то установите Visual Studio 2005.

  Введение
 
    В этом выпуске рассказывается о применении новой технологии Microsoft Framework .NET и Access. Что это Вам дает.
  • Вы увеличиваете скорость разработки в несколько раз, Конечно при условии того, что Вы знаете как, разрабатывать программы на NET и можете быстро найти нужную функцию. Например, открыть файл, прочитать всю информацию в строку и потом закрыть файл можно одной командой: buffer = File.ReadAllText("test.txt"), для Visual Basic потребовалось бы написать несколько строк кода.
  • Новый редактор VB.NET с улучшенным интерфейсом позволяет Вам быстрее тестировать программы и находить ошибки.
  • Вы сможете создавать красивый интерфейс, шифровать данные, обрабатывать почту, подключать web интерфейс, работать со строками, массивами, хэш информацией и т.п.
  • Вы сможете создавать очень компактные программы, т.к. практически весь код храниться в каталоге NET. Например, данная библиотека с формой имеет размер 0,028 MB, а на Access программа будет иметь значительно больший размер.
  • Можно сказать, что это "окно в Европу", а точнее в Америку.

    P.S. Этот материал для новичков будет "трудноват", но если Вы разрабатывали классы в Access, то проблем в изучении я думаю не будет. Советую материал или ссылку на него сохранить в архиве, т.к., изучая этот материал самостоятельно (без данной статьи), Вы потеряете не менее 1 недели на поиске нужной информации.


1. С чего начать?
  
Сначала научитесь устанавливать Microsoft .NET и регистрировать библиотеку LeadersoftLibrary.dll в среде NET. После разархивации данных в папке Ms Access Вы найдете несколько файлов: "1. Регистрация в Net.bat", "Access и Net.mdb", LeadersoftLibrary.dll, Passwords.txt. Все остальные файлы - дополнительные. В их названии содержится информация о их назначении.
 
а) "1. Регистрация в Net.bat". Запустите этот файл, и библиотека будет зарегистрирована в NET.

б) Изучите строку регистрации:
%windir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe LeadersoftLibrary.dll /tlb:LeadersoftLibrary.tlb /codebase >> status.txt

%windir% - ссылка на c:\windows
LeadersoftLibrary.dll
- основная библиотека для Access. Из нее вызываются функции.
LeadersoftLibrary.tlb
- файл будет создан автоматически. Он используется в VBA в ссылках References ...
/codebase - прописывает в
NET полный путь к библиотеке LeadersoftLibrary.dll
>> status.txt (или
status.doc) - файл будет создан автоматически. В него будет записан статус выполнения команды. Прочтите его после регистрации, если есть слово successfully (успешно), то регистрация прошла правильно.
 

2. Изучение примеров

   
"Access и Net.mdb" - это файл с примерами. После регистрации откройте этот файл и посмотрите как работают примеры с NET. Если что-то не так, то проверьте в ссылках: Tools\References ... наличие LeadersoftLibrary. Примеры следующие.
  • 1 пример - это шифрование данных и сохранение их в файле passwords.txt
  • 2 пример - вызов формы (календарь) из access.
Dim pwd As New password  ' Внешний класс шифрования данных
Dim strFileName As String    ' Файл паролей
Const sKey As String = "Code12345" ' Константа для шифрования


Private Sub Form_Open(Cancel As Integer)
' Полный путь к файлу паролей
strFileName = Application.CurrentProject.Path & "\Passwords.txt"
End Sub

Private Sub butReadPassword_Click()
' Читаем пароль
On Error GoTo 999
With pwd
Me.Password2 = .LeaderSoft_ReadFile(strFileName) ' Чтение пароля
If Me.Password2 <> "" Then
' Расшифровываем
Me.Password1 = .LeaderSoft_Decrypt(Me.Password2, sKey)
Else
' Сохраняем пароль, если файл паролей пустой
Me.Password1 = "New Password"
Me.Password2 = .LeaderSoft_Encrypt(Me.Password1, sKey) ' Шифрование
Call .LeaderSoft_WriteFile(strFileName, Me.Password2) ' Сохранение
End If
End With
Exit Sub
999:
MsgBox Err.Description
Err.Clear
End Sub


' Сохраняем пароль
Private Sub butSavePassword_Click()
On Error GoTo 999
Me.Refresh
With pwd
Me.Password2 = .LeaderSoft_Encrypt(Me.Password1, sKey) ' Шифрование
Call .LeaderSoft_WriteFile(strFileName, Me.Password2) ' Сохранение
End With
Exit Sub
999:
MsgBox Err.Description
Err.Clear
End Sub

' Открываем форму в среде Net
Private Sub butNet_Click()
' 1 вариант
pwd.LeaderSoft_OpenForm
'
' 2 вариант
Dim myDate As New FormCalendar
myDate.Visible = True
myDate.Text = "Еще календарик"
End Sub
 
3. Создание библиотеки NET: LeadersoftLibrary.dll

 
   Для создания библиотеки Вам необходимо будет установить Visual Studio 2005. Откройте файл: LeaderSoftLibrary.vbproj и постройте библиотеку через команду Build LeadersoftLibrary. В результате это будет построена папка Net\Bin\Debug (или Release) найдете нужную информацию: LeaderSoftLibrary.lib - Ваша библиотека, LeaderSoftLibrary.tlb - файл регистрации в VBA, LeaderSoftLibrary.pdb - отладочная информация.
P.S. Ниже написан COM-класс для работы из Access. Примеры взяты из разделов VS и если необходимы пояснения, то их можно прочитать в справке.
 
Imports System.IO
Imports System.Security.Cryptography
Imports System.Windows.Forms
'
' Класс для работы с Microsoft Net из Microsoft Access
'
<ComClass(Password.ClassId, Password.InterfaceId, Password.EventsId)> Public Class Password
Public Const ClassId As String = "98349785-8BE2-4604-848D-F5B103D61715"
Public Const InterfaceId As String = "36613EE9-125F-493d-9968-771E18C2226A"
Public Const EventsId As String = "A036F02F-F87E-4548-A536-7DD7EA8E62B5"

#Region "Управление файлами: http://www.leadersoft.ru"
' Читаем весь файл
Public Function LeaderSoft_ReadFile(ByVal strNameFile As String) As String
Try
LeaderSoft_ReadFile = File.ReadAllText(strNameFile, System.Text.Encoding.UTF8)
Catch ex As Exception
LeaderSoft_ReadFile = ""
MsgBox(ex.Message)
End Try
End Function

' Сохраняем файл
Public Function LeaderSoft_WriteFile(ByVal strNameFile As String, ByVal Buffer As String) As Boolean
Try
File.WriteAllText(strNameFile, Buffer, System.Text.Encoding.UTF8)
LeaderSoft_WriteFile = True
Catch ex As Exception
MsgBox(ex.Message)
LeaderSoft_WriteFile = False
End Try
End Function

#End Region

#Region "Шифрование: http://support.microsoft.com/kb/317535/ru"
' Зашифровка данных

Public Function LeaderSoft_Encrypt(ByVal sIn As String, ByVal sKey As String) As String
Dim DES As New TripleDESCryptoServiceProvider()
Dim hashMD5 As New MD5CryptoServiceProvider()

' Вычисление MD5
DES.Key = hashMD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(sKey))
' Устанавливаем режим шифрования.
DES.Mode = CipherMode.ECB
' Создаем блок шифрования
Dim DESEncrypt As ICryptoTransform = DES.CreateEncryptor()
' Получаем байты для шифрования
Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(sIn)
' Шифруем и возвращаем строку
Return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length))
End Function

' Расшифровка данных
Public Function LeaderSoft_Decrypt(ByVal sOut As String, ByVal sKey As String) As String
Dim DES As New TripleDESCryptoServiceProvider()
Dim hashMD5 As New MD5CryptoServiceProvider()

' Хеширование MD5
DES.Key = hashMD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(sKey))
' Устанавливаем режим шифрования.
DES.Mode = CipherMode.ECB
' Создаем блок дешифровки.
Dim DESDecrypt As ICryptoTransform = DES.CreateDecryptor()
Dim Buffer As Byte() = Convert.FromBase64String(sOut)
' Расшифровка данных и возврат строки
Return System.Text.ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length))
End Function
#End Region

#Region "Управление формами: http://www.leadersoft.ru"
' Вызываем форму
Public Function LeaderSoft_OpenForm() As String
LeaderSoft_OpenForm = ""
' Создаем новую форму
Try
Dim frm As New FormCalendar
frm.Visible = True
frm.Text = "Календарь"

' Перемещаем форму
frm.SetDesktopLocation(30, 50)

' Активация формы
'frm.Activate()

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Function
#End Region


End Class
 

Вопрос: Как открыть форму в VB.NET
Ответ.
   Такие команды, как в Access DoCmd.OpenForm в NET отсутствуют. NET - это прежде всего классы, поэтому если что-то делать в NET, то начинать надо с создания класса, используя слово New. Пример
  
Dim frm As New FormCalendar
   frm.Visible = True
Вообще Вы можете и сами создать класс DoCmd и поместить в него нужные функции.
Вопрос: Если в VB.NET функции типа CStr
Ответ.
  Да есть, практически все функции Visual Basic вошли в NET. Вы их может использовать также как и VBA. Пример.
  Dim str As String = CStr("234"). В NET можно объявить и присваивать значение переменной одной командой.