Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1432

.pdf
Скачиваний:
3
Добавлен:
07.01.2021
Размер:
1.15 Mб
Скачать

Private DS_stud As DataSet

Private Adp As OleDbDataAdapter

Private Cmd1 As OleDbCommand

Private Cnt1 As OleDbConnection

Private Foto As String

Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load

‘ путь к базе данных и к папке с фото

Dim s As String = Application.StartupPath + "\Prim.mdb" Foto = Application.StartupPath + "\Img\"

строка соединения с базой данных

Dim Cnt_S As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + s

строка команды Select

Dim Cmd_S As String = "Select * From Dp"

‘ создать новое соединение

Cnt1 = New OleDbConnection(Cnt_S)

‘ создать новую команду

Cmd1 = New OleDbCommand(Cmd_S)

Cmd1.Connection = New OleDbConnection(Cnt_S)

Cmd1.CommandTimeout = 20

'новый адаптер с указанными соединением и командой

Adp = New OleDbDataAdapter(Cmd_S, Cnt_S)

'схема данных?

Adp.MissingSchemaAction = MissingSchemaAction.AddWithKey

объект DataSet для временного хранения данных

DS_stud = New DataSet("Dp")

получить данные

119

Adp.Fill(DS_stud, "Dp")

'создание шаблона команды Insert Adp.InsertCommand = New OleDbCommand( _

"INSERT INTO Dp (S_id, Fio, Img) VALUES (?,?,?)", Cnt1)

'создание шаблона команды Update

Adp.UpdateCommand = New OleDbCommand( _ "UPDATE Dp SET Fio = ?, Img=? WHERE S_id = ?", Cnt1)

'создание шаблона команды Delete Adp.DeleteCommand = New OleDbCommand( _ "DELETE FROM Dp WHERE S_id = ?", Cnt1)

'создание параметров команды Insert Adp.InsertCommand.Parameters.Add( _ "@S_id", OleDbType.Integer, 5, "S_id") Adp.InsertCommand.Parameters.Add( _ "@Fio", OleDbType.VarChar, 20, "Fio") Adp.InsertCommand.Parameters.Add( _ "@Img", OleDbType.VarChar, 20, "Img")

'создание параметров команды Update Adp.UpdateCommand.Parameters.Add( _ "@Fio", OleDbType.VarChar, 20, "Fio") Adp.UpdateCommand.Parameters.Add( _ "@Img", OleDbType.VarChar, 20, "Img") Adp.UpdateCommand.Parameters.Add( _

"@OldS_id", OleDbType.Integer, 5, "S_id").SourceVersion _

=DataRowVersion.Original

'создание параметров команды Delete Adp.DeleteCommand.Parameters.Add( _

"@S_id", OleDbType.Integer, 5, "S_id").SourceVersion = _ DataRowVersion.Original

‘ заполнение свойств DataGridView DataGridView1.AutoGenerateColumns = False DataGridView1.DataSource = DS_stud

120

DataGridView1.DataMember = "Dp"

DataGridView1.AutoSizeColumnsMode = _

DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader

DataGridView1.Show()

свойство PictureBox, обеспечивающее пропорциии фото

PictureBox1.SizeMode = PictureBoxSizeMode.Zoom

процедура показа фото

FotoShow(1)

End Sub

‘ событие “закрыть форму приложения” – обновить данные в БД

Private Sub Form1_FormClosing( _ ByVal sender As System.Object, _

ByVal e As System.Windows.Forms.FormClosingEventArgs) _ Handles MyBase.FormClosing

Try

выполнить проверку

Me.Validate()

завершить редактирование

Me.DataGridView1.EndEdit()

внести изменения в таблицу БД

Me.Adp.Update(Me.DS_stud, "Dp") 'MsgBox("Все в норме")

Catch ex As Exception

MsgBox(ex.ToString)

End Try

End Sub

‘ событие “выбрана строка” – показать фото

Private Sub DataGridView1_RowEnter( _ ByVal sender As System.Object, _

ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles DataGridView1.RowEnter

121

FotoShow(e.RowIndex)

End Sub

‘ процедура, отображающая фото

Private Sub FotoShow(ByVal RowCur As Integer)

Try

‘ в первом столбце – фамилия

Label1.Text = DS_stud.Tables(0).Rows(RowCur).Item(1)

‘ во втором столбце – имя файла с фото

PictureBox1.Image = System.Drawing.Bitmap.FromFile(Foto + _ DS_stud.Tables(0).Rows(RowCur).Item(2))

‘ нет файла с фото

Catch e1 As System.IO.FileNotFoundException NotFoto()

‘ добавление новой строки в конце списка DataGridView Catch e2 As IndexOutOfRangeException

NotFoto()

End Try

End Sub

процедура, стирающая фото

Sub NotFoto() PictureBox1.Image = Nothing PictureBox1.Refresh() Label1.Text = ""

End Sub

событие “добавление строки” – нет фото

Private Sub DataGridView1_RowsAdded( _ ByVal sender As System.Object, ByVal e As _

System.Windows.Forms.DataGridViewRowsAddedEventArgs) _ Handles DataGridView1.RowsAdded

NotFoto() End Sub End Class

122

9.4. Задание на тему «Просмотр данных с помощью dbGridView»

Разработать программу, которая выполняет просмотр и добавление записей в таблице базы данных. Одно поле должно содержать имя файла с фотографией. Отображать фотографию, соответствующую текущей записи. Для тестирования программы необходима таблица базы данных Microsoft Access, а также набор графических файлов.

Порядок выполнения лабораторной работы

Создать базу данных для тестирования программы.

Подготовить набор фотографий для тестирования программы.

Создать новый проект – приложение Windows Forms.

Установить связь с базой данных.

Добавить код обработки событий.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

123

10. АНАЛИЗ ПАРАМЕТРОВ КОМПЬЮТЕРА

10.1. Анализ системных параметров

Анализ параметров компьютера обычно выполняется с помощью достаточно универсальных утилит, таких, в частности, как Everest. Включение в разрабатываемые приложения кода анализа оборудования, программного обеспечения и других подобных возможностей делает приложения более гибкими и, возможно, эффективными.

Определение версии операционной системы

Номер версии операционной системы и текущую платформу можно определить с помощью класса OSVersion. В следующих строках кода эта информация выводится в поле компонента ListBox с помощью метода Items.Add.

‘ Пример 10.1

Dim Pla As String = Environment.OSVersion.Platform.ToString() Dim Ver As String = Environment.OSVersion.Version.ToString() ListBox1.Items.Add("Платформа " + Pla)

ListBox1.Items.Add("Версия " + Ver)

Получение системной даты и времени

Текущие дату и время можно получить с помощью операторов

DateTime.Today и DateTime.Now, первый из которых дает только дату, а второй дату и время.

‘ Пример 10.2

ListBox1.Items.Add(DateTime.Now.ToString())

ListBox1.Items.Add(DateTime.Today.ToString())

Чтение реестра

Для обращения к реестру используются классы библиотеки Microsoft.Win32. Оператор OpenSubKey открывает раздел реестра, из которого с помощью функции GetValue выбираются сведения о типе процессора и его производителе.

124

‘ Пример 10.3

Dim M As RegistryKey = Registry.LocalMachine M = M.OpenSubKey( _

"HARDWARE\DESCRIPTION\System\CentralProcessor\0") Dim Prc As Object = M.GetValue("Identifier")

Dim Vnd As Object = M.GetValue("VendorIdentifier") ListBox1.Items.Add(Prc.ToString()) ListBox1.Items.Add(Vnd.ToString())

Из следующего раздела извлекаются сведения о статусе BIOS.

‘ Пример 10.4

Dim V As RegistryKey = Registry.LocalMachine V = V.OpenSubKey( _

"HARDWARE\DESCRIPTION\System\MultiFunctionAdapter\4") Dim I_B As Object = V.GetValue("Identifier") ListBox1.Items.Add(I_B.ToString())

Далее читаются дата записи BIOS и аппаратная платформа компьютера.

‘ Пример 10.5

RegistryKey B = Registry.LocalMachine

B = B.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\") Object D_B = B.GetValue("SystemBiosDate")

Object P_M = B.GetValue("Identifier")

Информация о процессах

Для получения сведений о процессах в программе необходима ссылка на пространство имен System.Diagnostics. Информация извлекается с помощью оператора Process.GetProcesses. Между названием процесса и его номером выводится символ табуляции

Chr(9).

‘ Пример 10.6

Dim Proc() As Process = Process.GetProcesses() For Each P As Process In Proc

P.Refresh()

ListBox1.Items.Add(P.ProcessName+Chr(9)+P.Id.ToString()) Next

125

Список установленного программного обеспечения

Для чтения из реестра информации об установленном программном обеспечении в программе требуется поместить ссылку на пространство имен Microsoft.Win32. Для размещения массива строк в поле компонента ListBox используется метод Items.AddRange.

‘ Пример 10.7

Dim R As RegistryKey = Registry.LocalMachine.OpenSubKey( _ "Software\Microsoft\Windows\CurrentVersion\Uninstall")

Dim SubKeys() As String = R.GetSubKeyNames()

ListBox1.Items.AddRange(SubKeys)

Переменные окружения

Для получения информации о переменных окружения в программе требуется поместить ссылку на пространство имен System.Management. Информация о переменных окружения выбирается с помощью запроса Win32_Environment из инструментария управления Windows, затем отображается в поле

ListBox.

‘ Пример 10.8

Dim Query As WqlObjectQuery = _

New WqlObjectQuery("Select * from Win32_Environment")

Dim Find As ManagementObjectSearcher = _

New ManagementObjectSearcher(Query)

For Each Mo As ManagementObject In Find.Get()

ListBox1.Items.Add(Mo("Description") + " - " + _

Mo("Name") + " - " + Mo("UserName") + " - " + _

Mo("VariableValue"))

Next

Учетные записи локальной машины

Для получения информации об учетных записях локальной машины в программе требуется поместить ссылку на пространство

126

имен System.Management. Информация об учетных записях выбирается с помощью запроса Win32_UserAccount из инструментария управления Windows, затем отображается в поле ListBox. Ниже приводится полностью код программы, читающей информацию об учетных записях.

‘ Пример 10.9

Imports System.Management Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click

Dim Query As WqlObjectQuery = New WqlObjectQuery( _ "SELECT * FROM Win32_UserAccount WHERE LocalAccount = _ 'true'")

Dim Find As ManagementObjectSearcher = _

New ManagementObjectSearcher(Query)

For Each Mo As ManagementObject In Find.Get() ListBox1.Items.Add("Caption." + Mo("Caption").ToString()) ListBox1.Items.Add("Description." + _ Mo("Description").ToString()) ListBox1.Items.Add("Domain where account belongs." + _ Mo("Domain").ToString())

ListBox1.Items.Add("Account is defined on local machine" _ + Mo("LocalAccount").ToString()) ListBox1.Items.Add("Name of the account " + _ Mo("Name").ToString())

ListBox1.Items.Add("Password can be changed." + _ Mo("PasswordChangeable").ToString()) ListBox1.Items.Add("Password expires." + _ Mo("PasswordExpires").ToString()) ListBox1.Items.Add( _

"Password is required for this account" + _ Mo("PasswordRequired").ToString()) ListBox1.Items.Add("Security identifier (SID)." + _ Mo("SID").ToString()) ListBox1.Items.Add("Type of security identifier." + _

GetSidType(Convert.ToInt32(Mo("SIDType"))).ToString())

127

ListBox1.Items.Add("Status." + Mo("Status").ToString())

ListBox1.Items.Add("-------------")

Next

End Sub

Public Function GetSidType(ByVal type As Integer) As String Select Case type

Case 1

Return "SidTypeUser" Case 2

Return "SidTypeGroup" Case 3

Return "SidTypeDomain" Case 4

Return "SidTypeAlias" Case 5

Return "SidTypeWellKnownGroup" Case 6

Return "SidTypeDeletedAccount" Case 7

Return "SidTypeInvalid" Case 8

Return "SidTypeUnknown" Case 9

Return "SidTypeComputer" Case Else

Return String.Empty End Select

End Function

End Class

10.2. Задания на тему «Анализ системных параметров»

Разработать приложение Windows Forms, которое определяет системные параметры, указанные в соответствующем варианте задания.

Вариант 1. Определить системные дату и время, а также информацию о процессах.

128

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]