Выпуск 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 можно объявить и присваивать значение переменной одной командой. |
|