Установление соединения с базой данных SQLite. Добавление, редактирование, удаление записей из базы данных SQLite средствами ActionScript3.0 (AIR)

Представьте, что у вас есть база данных SQLite, которая имеет  2 таблицы с такой физической структурой:

Рис. 1 -Структура таблицы Operation
Рис. 2 – Структура таблицы Payment

Вот примеры реальных данных для этих двух таблиц:

Рис. 3 – Пример данных таблицы Operation
Рис. 4 – Пример данных таблицы Payment

У вас есть AIR приложение с формами для добавления, редактирования, удаления и восстановления записей в таблице.

Чтобы получить возможность выполнять любую из операций по работе с базой данных, необходимо сначала установить соединение с ней.

Как установить соединение с базой данных средствами ActionScript 3?

Необходимо использовать объект класса File для ссылки на базу данных, а также объект класса SQLStatement для представления связи с одной или более баз данных (в нашем случае с одной).

// ActionScript file of runnable application mxml file – BaseWindowedApplication
import mx.controls.Alert;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;

// объявляем переменную для SQLConnection

public var sqlConnection: SQLConnection;

/** Устанавливаем соединение с базой данных.

* Метод можно вызвать, например, на событие creationComplete вашего приложения

*/

public function initDataBaseConnection(): void
{

this.sqlConnection = new SQLConnection();
var file: File = new File(“app-storage:/Database.sqlite”);

this.sqlConnection.addEventListener(SQLEvent.OPEN, this.openDbHandler);
this.sqlConnection.addEventListener(SQLErrorEvent.ERROR, this.openDbFailedHandler);
this.sqlConnection.openAsync(file);

}

private function openDbHandler(e: SQLEvent): void
{

trace(“openDbHandler”);

}

private function openDbFailedHandler(e: SQLErrorEvent): void
{

Alert.show(e.error.details, “Error”);

}

Как реализовать добавление записи в таблицу базы данных средствами ActionScript 3?

Рис. 5 – Форма для добавления записей в таблицу Payment

Пример добавление записи в таблицу Payment по клику на кнопку Apply на форме (рис. 5) .

// ActionScript file для формы (рис. 5)
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import mx.controls.Alert;

//Добавляем слушателя события нажатия на кнопку мыши

this.btnApply.addEventListener(MouseEvent.CLICK, this.addPayment);

/** Обработчик события MouseEvent.CLICK.

Метод добавляет новую запись в таблицу Payment,

* используя данные из компонентов на форме (рис. 5) – ComboBox, TextInput и DateField.

*/

private function addPayment(): void
{

var sqlStatement: SQLStatement = new SQLStatement();
sqlStatement.sqlConnection = BaseWindowedApplication(this.parentApplication).sqlConnection; // используем явное приведение типов
sqlStatement.addEventListener(SQLEvent.RESULT, this.addResultSqlEventHandler);
sqlStatement.addEventListener(SQLErrorEvent.ERROR, this.resultFailedHandler);

sqlStatement.text = “INSERT INTO Payment (Date, OperationId, Amount) VALUES (:Date, :OperationId, :Amount)”;
sqlStatement.parameters[“:Date”] = this.dateField.selectedDate;
sqlStatement.parameters[“:OperationId”] = this.cmbArticles.selectedItem[“Id”];
sqlStatement.parameters[“:Amount”] = this.txtAmount.text;
sqlStatement.execute();

}

/** Обработчик события SQLEvent.RESULT.

* На экран выводится сообщение об успешном добавление записи

* и очищается поле для ввода суммы на форме (рис. 5)

*/

private function addResultSqlEventHandler(r: SQLEvent): void
{

Alert.show(“Record was added successfully.”, “Info”);
this.txtAmount.text = “”;

}

/**Обработчик события SQLErrorEvent.ERROR.

* На экран выводится сообщение об ошибке.

*/

private function resultFailedHandler(e: SQLErrorEvent): void
{

Alert.show(e.error.details, “Error”);

}

Как отредактировать запись в таблице базы данных средствами ActionScript 3?

Рис. 6 – Форма редактирования записей таблицы Payment

// ActionScript file для формы (рис. 6)
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import mx.controls.Alert;

/** Редактирование одной записи таблицы Payment.

*/

private function updatePayment(date: Date, operationId: int, amount: Number, id: String): void
{

var sqlStatement: SQLStatement = new SQLStatement();
sqlStatement.sqlConnection = BaseWindowedApplication(this.parentApplication).sqlConnection;
sqlStatement.addEventListener(SQLEvent.RESULT, this.updateResultHandler);
sqlStatement.addEventListener(SQLErrorEvent.ERROR, this.errorHandler);

sqlStatement.text = “UPDATE Payment SET Date=@Date, OperationId=@OperationId, Amount=@Amount WHERE Id=@Id”;
sqlStatement.parameters[“@Date”] = date;
sqlStatement.parameters[“@OperationId”] = operationId;
sqlStatement.parameters[“@Amount”] = amount;
sqlStatement.parameters[“@Id”] = id;
sqlStatement.execute();

}

/** Обработчик события SQLEvent.RESULT.

*/

private function updateResultHandler(e: SQLEvent): void
{

// Обновляем значения CheckBox компонентов колонки Edit state

// Показываем сообщение об успешности обновления записей

}

/**Обработчик события SQLErrorEvent.ERROR.

* На экран выводится сообщение об ошибке.

*/

private function errorHandler(e: SQLErrorEvent): void
{

this.dg.enabled = true;
Alert.show(e.text, “Error”);

}

Как удалить запись в таблице базы данных средствами ActionScript 3?

Рис. 7 – Форма удаления записей таблицы Payment

// ActionScript file для формы (рис. 7)
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import mx.controls.Alert;

/** Удаление записи таблицы Payment.

*/

private function removePayment(): void
{

var sqlStatement: SQLStatement = new SQLStatement();
sqlStatement.sqlConnection = BaseWindowedApplication(this.parentApplication).sqlConnection;

sqlStatement.addEventListener(SQLEvent.RESULT, this.removeResultHandler);
sqlStatement.addEventListener(SQLErrorEvent.ERROR, this.errorHandler);

var cellId: String = this.dg.selectedItem.Id;

sqlStatement.text = “DELETE FROM Payment WHERE Id='” + cellId + “‘”;
sqlStatement.execute();

}

/** Обработчик события SQLEvent.RESULT.

* При успешном удалении записи из базы данных деактивирует DataGrid,

* удаляет запись из DataGrid,

* деактивирует кнопку Remove.

*/

private function removeResultHandler(e: SQLEvent): void
{

this.dg.enabled = true;

var cellId: String = this.dg.selectedItem.Id;

var tmpArr: Array = this.dg.dataProvider.source;
var index: int = tmpArr.indexOf(this.dg.selectedItem);

this.dg.dataProvider.source.splice(index, 1);

this.btnRemove.enabled = false;

}

/**Обработчик события SQLErrorEvent.ERROR.

* На экран выводится сообщение об ошибке.

*/

private function errorHandler(e: SQLErrorEvent): void
{

this.dg.enabled = true;
Alert.show(e.text, “Error”);

}

Как отменить только что выполненную операцию с записью средствами ActionScript 3?

Например, на форме, что на рис. 6 возможно отредактировать несколько записей в DataGrid. Что делать, если пользователю нужно отменить выполненное редактирование?

/** Обработчик события MouseEvent.CLICK для кнопки Cancel формы (рис. 6).

* Восстановление отредактированных записей в DataGrid’e из таблицы Payment.

*/

private function retrieveRecords(): void
{

for(var i: uint = 0; i < this.dg.dataProvider.source.length; i++)
{

var state: Boolean = this.dg.dataProvider.source[i][“State”];

if(state)
{

var cellId: String = this.dg.dataProvider.source[i][“Id”];
this.retreive(cellId);

}

}

}

/** Восстановление одной записи из таблицы Payment по идентификатору.

*/

private function retreive(cellId: String): void
{

var sqlStatement: SQLStatement = new SQLStatement();
sqlStatement.sqlConnection = BaseWindowedApplication(this.parentApplication).sqlConnection;

sqlStatement.addEventListener(SQLEvent.RESULT, this.retreiveResultHandler);
sqlStatement.addEventListener(SQLErrorEvent.ERROR, this.errorHandler);

sqlStatement.text = “SELECT * FROM Payment WHERE Id='” + cellId + “‘”;
sqlStatement.execute();

}

/** Обработчик события SQLEvent.RESULT.

* При успешном восстановлении записи из таблицы Payment базы данных

* обновляет запись в DataGrid’e.

* Показывает сообщение об успешном восстановлении записей.

*/

private function retreiveResultHandler(e: SQLEvent): void
{

// Получение результата из базы данных

var retrievedArray: Object = e.target.getResult().data;

var retrievedId: int = retrievedArray[0][“Id”];
var retrievedAmount: String =  retrievedArray[0][“Amount”];
var retrievedDate: Date =  retrievedArray[0][“Date”];

for(var i: uint = 0; i < this.dg.dataProvider.source.length; i++)
{

if(this.dg.dataProvider.source[i].Id == retrievedId)
{

this.dg.dataProvider.source[i][“State”] = false;
this.dg.dataProvider.source[i][“Amount”] = retrievedAmount;
this.dg.dataProvider.source[i][“Date”] = retrievedDate;

}

}

// Показываем сообщение об успешности восстановления записей в DataGrid’e

}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s