Версия v0.1 (19-Feb-2000). Автор: Satish (spitfire@pn3.vsnl.net.in).
Лицензия: Feel free to use/copy/modify/add bugs/find bugs, but keep
the author informed.
Введение
Это C++ библиотека для сервера MySQL. Разработчик данного пакета искал
библиотеку C++, которая может создавать и работать с Data Access Objects. Он
натолкнулся на программное обеспечение, написанное Roland Hanel (MySQL C++) и
Ed Carp (MyC). Но MyC написан на чистом C и не может создавать объект в
истинном смысле. Также это не может создавать и работать с несколькими
наборами результатов. На основе этих пакетов была написан пакет MyDAO ver 0.1.
Руководство программиста
dbconnect class: Один объект подключения должен быть создан. Это
ответственно за соединение с сервером MySQL и открытие базы данных. Свойства:
bool Connected;
Connected равно true, если подключение к серверу MySQL работает.
MYSQL *DBase;
DBase является указателем на структуру MYSQL. Это требуется, чтобы открыть
набор результатов.
Методы:
void dbconnect::Connect(char *host, char *port, char *uname,
char*pwd);
Пытается соединиться с сервером MySQL, используя указанные параметры хоста,
порта, имени пользователя и пароля. Если подключение успешно установлено,
свойство Connected будет true.
void dbconnect::Disconnect();
Разъединяет текущее подключение с сервером MySQL.
bool dbconnect::OpenDB(char *db);
Открывает базу данных db. Если все в порядке, вернет true.
recordset class: Любое количество наборов результатов может быть создано
из этого класса. Он имеет много свойств для простого манипулирования данными.
Свойства:
char RecSource[MAX_RECSRC_LEN];
Источник записей, из которых данные должны обрабатываться. Это должна быть
SQL-инструкция SELECT, возвращающая записи.
unsigned long int RecordCount;
Число строк в открытом наборе результатов.
unsigned long int AffectedRows;
Может использоваться только с Update, AddNew или Delete. Число строк
фактически обработанных сервером.
bool EOR;
Конец набора результатов. True, если Вы двигаетесь в последнюю строку.
bool BOR;
Начало набора результатов. True, если Вы двигаетесь первую строку. Замечание:
EOR и BOR вместе будут равны true, если RecordCount=0.
Методы:
void recordset::OpenRecordset(MYSQL *Structmysql, char *sql);
Открывает набор результатов основанный на SQL-инструкции select.
void recordset::CloseRecordset();
Закрывает набор результатов. Он должен быть закрыт, чтобы освободить память,
используемую им.
void recordset::MoveNext();
Перемещается в следующую строку набора результатов. Если уже достигнута
последняя строка, в ней и останется.
void recordset::MovePrevious();
Перемещается в предыдущую строку набора результатов. Если уже достигнута
первая строка, в ней и останется.
void recordset::MoveFirst();
Перемещается в первую строку набора результатов.
void recordset::MoveLast();
Перемещается в последнюю строку набора результатов.
char* recordset::GetField(char *FName);
Возвращает содержание поля FName.
void recordset::SetField(char *FName, char *Value);
Устанавливает содержание поля FName в значение Value. Изменения будут
отброшены, если после установки значения не используется метод Update/AddNew.
void recordset::Edit();
Должен использоваться перед методами SetField и Update, иначе все
изменения будет отброшены.
void recordset::AddNew();
Используется, чтобы добавить новую строку в набор результатов. Для работы
этого метода набор результатов должен быть основан на таблице. Метод Update
должен использоваться после установки всех значений поля. Определение WHERE
не должно использоваться в методе Update, если оно уже используется с методом
AddNew. Свойство AffectedRows выдаст число добавленных строк.
void rercordset::Update(char *Where);
Используется, чтобы редактировать или добавить строку вместе с методами
Edit/AddNew. Определение WHERE не должно использоваться с AddNew.
void recordset::Delete(char *Where);
Применяется, чтобы удалить строки из набора результатов.
void recordset::Refresh();
Изменения, сделанные методом Update, невидимы, если метод Refresh не
используется. Обновите набор результатов немедленно после Update.
char* recordset::GetFieldN(int FNum);
Аналогично GetField, но вместо имени поля используется его код (номер).
void recordset::SetFieldN(int FNum, char *Value)
Аналогично SetField, но вместо имени поля используется его код (номер).
Пример 1:
// Продолжение примера из dbconnect.
// Откроем таблицу заказчиков (customers) и распечатаем
// все записи из нее.
recordset MySet;
char sql[]="SELECT * FROM customers";
MySet.OpenRecordset(MyConnect.DBase, sql);
if (MySet.EOR && MySet.BOR){
cout << "No records found" << endl;
return;
}
else
{
// Show number of records
cout << "No. of records: " << MySet.RecordCount << endl;
// Show all records
while (!MySet.EOR)
{
cout << MySet.GetField("or_id") << "\t";
cout << MySet.GetField("customers") << "\t";
cout << MySet.GetField("city") << endl;
MySet.MoveNext();
}
}
Пример 2:
// Добавление новой строки в таблицу заказчиков.
MySet.AddNew();
MySet.SetField("cs_id", "7");
MySet.SetField("name", "Satish");
MySet.SetField("city", "Pune");
MySet.Update(""); // where не используется!
MySet.Refresh(); // Сделаем изменения видимыми.
Пример 3:
// Изменение имени заказчика.
MySet.Edit();
MySet.SetField("cs_id", "7");
MySet.SetField("name", "Suresh");
MySet.SetField("city", "Pune");
MySet.Update("or_id=7"); // where здесь необходимо использовать.
MySet.Refresh(); // Сделаем изменения видимыми.
Пример 4:
// Удаление записи.
MySet.Delete("name='Suresh'");
MySet.Refresh(); // Сделаем изменения видимыми.
Пример 5:
// Закроем набор результатов после употребления. Это ОБЯЗАТЕЛЬНО!
MySet.CloseRecordset();
Что еще надо сделать:
Лучший контроль ошибок
Методы поиска информации (FindFirst, FindNext, FindPrevious, FindLast)
Сделать графическое представление набора результатов