Модификация приложения F #: работа с базой данных Microsoft Access



 

Для следующего примера понадобится простенькая база данных в формате *. mdb. Запускаем Microsoft Access любой имеющейся версии и создаём простую таблицу с именем Главная таблица. Ключевое поле (Счётчик): «Номер». Далее идут два текстовых столбца: «Имя» и «Фамилия». Заполняем данными (добавляем три-четыре записи в базу данных). Базу назовём, например Работники:

 

Рис. 5. 1. Содержимое таблицы базы данных Работники. mdb

 

Импортируем эту базу данных в сам проект. Для этого выполним: Проект -> Существующий элемент... (Shift+Alt+A). После вставки базы в проект приложения F#, перейдём на панель Свойства для файла базы и изменим значение свойства «Копировать в выходной каталог» на «Всегда копировать».

 

Приготовления завершены. Теперь о коде. Код будет создавать форму с кнопками «Выход» и «Поиск». В качестве поля для поиска будет выступать столбец Номер. Также на форме будет DataGridView для отображения всех записей из базы. Нажатие на «Поиск» отобразить в Label’ах другие параметры запроса. Код всего этого дела такой:

 

// Создание формы Windows Forms: Работа с базой данных Microsoft Access

Console.Title <- "Различные примеры (F#) :: Работа с базой данных Microsoft Access"

open System.Data

open System.Data.OleDb

// Создаём шрифт

let ffont = new Font("Verdana", 9.75F,FontStyle.Regular, GraphicsUnit.Point) 

// Создаём объект соединения с базой данных

let oleconn = new System.Data.OleDb.OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;

Data Source = Работники.mdb")

// СоздаёмOleDbDataAdapter

let dataAdpter4 = new System.Data.OleDb.OleDbDataAdapter("Select * from [Главная таблица]", oleconn)

// Генерируем DataSet

let dataSet4 = new DataSet()

//fills the dataset with recod values

dataAdpter4.Fill(dataSet4,"[Главная таблица]") |> ignore

// Создаём форму и элементы управления

let dataForm = new Form(Text = "Различные примеры (F#) :: Работа с базой данных Microsoft Access", AutoScaleDimensions = new System.Drawing.SizeF(60.0F, 13.0F), ClientSize = new System.Drawing.Size(500, 360), StartPosition = FormStartPosition.CenterScreen)

let exitButton4 = new Button(Text = "Выход", Location = new System.Drawing.Point(300, 320))

let searchButton4 = new Button(Text = "Поиск", Location = new System.Drawing.Point(220, 320)) 

let label14 = new Label(Text = "Введите \"Номер\":", Location = new System.Drawing.Point(0, 10), AutoSize = true)

let label24 = new Label(Text = "Номер:", Location = new System.Drawing.Point(0, 50), AutoSize = true)

let label34 = new Label(Text = "Имя:", Location = new System.Drawing.Point(0,100), AutoSize = true)

let label44 = new Label(Text = "Фамилия:", Location = new System.Drawing.Point(0,150), AutoSize = true)

let textBoxNumber4 = new TextBox(Location = new System.Drawing.Point(200,10))

let labelNumber4 = new Label(Location = new System.Drawing.Point(100,50), BorderStyle = BorderStyle.FixedSingle)

let labelFirstName4 = new Label(Location = new System.Drawing.Point(100,100), BorderStyle = BorderStyle.FixedSingle)

let labelLastName4 = new Label(Location = new System.Drawing.Point(100,150), BorderStyle = BorderStyle.FixedSingle)

// Создаём DataGridView

let dataGridView4 = new DataGridView(ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize,Size = new System.Drawing.Size(480, 120), Location = new System.Drawing.Point(10, 180))

// Создаём столбцы DataGridView

let chrnumbercol = new DataGridViewTextBoxColumn()

let chrfnamecol = new DataGridViewTextBoxColumn()

let chrlnamecol = new DataGridViewTextBoxColumn()

// Добавляем данные в столбцы

dataGridView4.Columns.Add(chrnumbercol) |> ignore

dataGridView4.Columns.Add(chrfnamecol) |> ignore

dataGridView4.Columns.Add(chrlnamecol) |> ignore

dataGridView4.DataSource <- dataSet4.Tables.["[Главная таблица]"]

// Применяем шрифт для формы

dataForm.Font <- ffont

// Применям связь данных базы с DataGridView (имя стоблца в базе / имя столбца в элементе)

chrnumbercol.DataPropertyName <- "Номер"

chrnumbercol.HeaderText <- "Номер"

chrfnamecol.DataPropertyName<-"Имя"

chrfnamecol.HeaderText<-"Имя работника"

chrlnamecol.DataPropertyName<-"Фамилия"

chrlnamecol.HeaderText<-"Фамилия работника"

// Добавляем элементы на форму

dataForm.Controls.Add(dataGridView4)

dataForm.Controls.Add(exitButton4)

dataForm.Controls.Add(searchButton4)

dataForm.Controls.Add(label14)

dataForm.Controls.Add(label24)

dataForm.Controls.Add(label34)

dataForm.Controls.Add(label44)

dataForm.Controls.Add(textBoxNumber4)

dataForm.Controls.Add(labelNumber4)

dataForm.Controls.Add(labelFirstName4)

dataForm.Controls.Add(labelLastName4)

// Связываем Label'ы со столбцами базы данных

labelNumber4.Text <- Convert.ToString(dataSet4.Tables.["[Главная таблица]"].Rows.Item(0).Item(0))

labelFirstName4.Text <- Convert.ToString(dataSet4.Tables.["[Главная таблица]"].Rows.Item(0).Item(1))

labelLastName4.Text <- Convert.ToString(dataSet4.Tables.["[Главная таблица]"].Rows.Item(0).Item(2))

searchButton4.Click.Add(fun search-> 

               // Обрабатываем номер строки индекса           

               let mutable introws = 0

               // Определяем, была найдена запись или нет

               let mutable blnfound = false  

               // Обрабатываем общее количество записей             

               let mutable inttotrec = Convert.ToInt32(dataSet4.Tables.["[Главная таблица]"].Rows.Count)

                // Обрабатываем данные вводимые пользователем

               let strtext = Convert.ToString(textBoxNumber4.Text)

               // До тех пор, пока совпадений не найдено и конец записей не достигнут

               while((blnfound = false) && (introws <= inttotrec-1)) do

                    let strempnum = Convert.ToString(dataSet4.Tables.["[Главная таблица]"].Rows.Item(introws).Item(0))

                    // Сравниваем данные введённые в TextBox пользователем с нашей таблицей ("Номер")

                    // Если есть совпадений, отображаем результат запроса

                    if strtext.ToUpper() = strempnum.ToUpper() then

                       blnfound<-true

                       labelNumber4.Text <- Convert.ToString(dataSet4.Tables.["[Главная таблица]"].Rows.Item(introws).Item(0))

                       labelFirstName4.Text <- Convert.ToString(dataSet4.Tables.["[Главная таблица]"].Rows.Item(introws).Item(1))

                       labelLastName4.Text <- Convert.ToString(dataSet4.Tables.["[Главная таблица]"].Rows.Item(introws).Item(2))

                    // Сравниваем со следующей запись до появления совпадений

                    introws<-introws + 1   

               // Если совпадения не найдены    

               if blnfound = false then

                   MessageBox.Show("Запись не найдена!", "Работа с базой данных Microsoft Access :: Сообщение об ошибке", MessageBoxButtons.OK, MessageBoxIcon.Information) |> ignore)                      

 

exitButton4.Click.Add(fun exit->

               dataForm.Close()

               oleconn.Close())

Application.Run(dataForm)

printfn "\t\t\tНажмите клавишу Enter для продолжения..."

Console.ReadKey()

Console.Clear()

Application.Exit() // Завершаем приложение

 

Компилируем приложение (Debug) и запускаем. Вводим «номер работника» из базы данных (смотрим все доступные записи в DataGridView на форме) в текстовое поле и жмём «Поиск»:

 

Рис. 5. 1. Результат работы приложения F#: форма «Работа с базой данных Microsoft Access»

 

Компилируем приложение (Release) и запускаем.

 


Дата добавления: 2019-09-13; просмотров: 173; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!