Обновление записей в таблице базы данных MS Access 


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



ЗНАЕТЕ ЛИ ВЫ?

Обновление записей в таблице базы данных MS Access



Одним из основных четырех действий над данными в БД (Select, Insert, Update и Delete) является модификация (Update, обновление) данных. Автор поставил задачу написать маленькую программу для обновления записей в таблице базы данных, но с большим удобством (гибкостью) управления программным кодом.

Рассматриваемая в данном примере программа имеет форму, сетку данных DataGridView, в которую из базы данных считывается таблица при нажатии кнопки Читать из БД. Пользователь имеет возможность редактировать данные в этой та­блице, после чего, при нажатии кнопки Сохранить в БД, данные в базе данных будут модифицированы, то есть заменены новыми.

Для написания этой программы запустим Visual Studio 2010 и в окне New Project выберем в среде CLR узла Visual C++ приложение шаблона Windows Forms Application Visual C++. Из панели Toolbox добавляем в форму элемент управления DataGridView и две командные кнопки. Программный код представлен в листинге 8.

Листинг 8. Обновление записей в таблице базы данных MS Access

//...............

// Программный код, расположенный выше, создан средой Visual Studio

// автоматически, поэтому автором не приводится

this->ResumeLayout(false);

}

#pragma endregion

// Программа обновляет записи (Update) в таблице базы данных MS Access

// ~ ~ ~ ~ ~ ~ ~ ~

// Объявляем эти переменные вне всех процедур, чтобы

// они были видны из любой из процедур:

DataSet ^ НаборДанных;

OleDb::OleDbDataAdapter ^ Адаптер;

OleDb::OleDbConnection ^ Подключение;

OleDb::OleDbCommand ^ Команда;

private: System::

Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{

НаборДанных = gcnew DataSet();

Подключение = gcnew OleDb::

OleDbConnection(// Строка подключения:

"Data Source=\"C:\\vic.mdb\";User " +

"ID=Admin;Provider=\"Microsoft.Jet.OLEDB.4.0\";");

Команда = gcnew OleDb::OleDbCommand();

button1->Text = "Читать из БД"; button1->TabIndex = 0;

button2->Text = "Сохранить в БД";

}

private: System::Void button1_Click(System::Object^ sender,

System::EventArgs^ e)

{

// Читать из БД:

if (Подключение->State ==

ConnectionState::Closed) Подключение->Open();

Адаптер = gcnew OleDb::OleDbDataAdapter(

"Select * From [БД телефонов]", Подключение);

// Заполняем DataSet результатом SQL-запроса

Адаптер->Fill(НаборДанных, "БД телефонов");

// Содержимое DataSet в виде строки XML для отладки:

String ^ СтрокаXML = НаборДанных->GetXml();

// Указываем источник данных для сетки данных:

dataGridView1->DataSource = НаборДанных;

// Указываем имя таблицы в наборе данных:

dataGridView1->DataMember = "БД телефонов";

Подключение->Close();

}

private: System::Void button2_Click(System::Object^ sender,

System::EventArgs^ e)

{ // Сохранить в базе данных

Команда->CommandText = "UPDATE [БД телефонов] SET [Но" +

"мер телефона] =?, ФИО =? WHERE ([Номер п/п] =?)";

// Имя, тип и длина параметра

Команда->Parameters->Add("Номер телефона",

OleDb::OleDbType::VarWChar, 50, "Номер телефона");

Команда->Parameters->Add(

"ФИО", OleDb::OleDbType::VarWChar, 50, "ФИО");

Команда->Parameters->Add

(gcnew OleDb::OleDbParameter("Original_Номер_п_п",

OleDb::OleDbType::Integer,

0, System::Data::ParameterDirection::

Input, false, (Byte)0, (Byte)0, "Номер п/п",

System::Data::DataRowVersion::Original, nullptr));

Адаптер->UpdateCommand = Команда;

Команда->Connection = Подключение;

try

{ // Update возвращает количество измененных строк

int kol = Адаптер->Update(НаборДанных, «БД телефонов»);

MessageBox::Show("Обновлено " + kol + " записей");

}

catch (Exception ^ Ситуация)

{

MessageBox::Show(Ситуация->Message, "Недоразумение");

}

}

};

}

 

Как видно из кода, мы имеем три процедуры обработки событий: загрузки фор­мы, «щелчок на кнопке Читать из БД» и «щелчок на кнопке Сохранить в БД». Чтобы объекты классов DataSet, DataAdapter, Connection и Command были видны в этих трех процедурах, объявляем эти объекты внешними внутри класса Form1.

При программировании чтения из базы данных вначале с помощью SQL-запроса мы выбрали все записи из таблицы (Select * From [БД телефонов]) и с помощью объ­екта класса Adapter поместили в набор данных DataSet. A затем указали объект клас­са DataSet в качестве источника (DataSource) для сетки данных dataGridView1. Фраг­мент работы программы после чтения из базы данных представлен на рис. 14.

Рис. 14. Фрагмент работы программы обновления данных

 

Для нас будет представлять интерес программирование модификации записей базы данных. Эта возможность реализуется при обработке события «щелчок мы­шью на кнопке Сохранить в БД». Здесь свойству CommandText присвоено значение текста SQL-запроса. В качестве заменителей параметров используются вопро­сительные знаки. В данном SQL-запросе имеют место три вопросительных знака. Им соответствуют три параметра, которые должны указываться строго в порядке следования вопросительных знаков. Эти параметры задаем с использованием мето­да Parameters->Add. Здесь указываем имя поля (например, «Номер телефона»), тип, длину параметра и значение по умолчанию. Заметим, что третий параметр («Номер п/п») задается как новый, поскольку он не должен подлежать редактированию со стороны пользователя, а будет устанавливаться автоматически, независимо от действий пользователя.

Далее в блоке try...catch вызываем непосредственно метод Update, который воз­вращает количество (kol) обновленных записей. В случае неудачного обновления обрабатывается исключительная ситуация Exception: объект Exception обеспечивает соответствующее сообщение об ошибке.

Убедиться в работоспособности программы можно, открыв решение БдUpdate.sln в папке БдUpdate.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-12-11; просмотров: 387; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.231.3.140 (0.009 с.)