Ananas Library  0.9.5
Открытые слоты | Открытые члены | Полный список членов класса
Класс aExtSQL

Предоставляет возможность использования SQL запросов в отчетах. Подробнее...

#include <aextsql.h>

Граф наследования:aExtSQL:
AExtension

Открытые слоты

QSqlSelectCursor * Cursor () const
 Функция фозвращает внутренний курсор, содержащий результаты выполнения последнего вызова функции ExecQuery или ExecScalar. Подробнее...
 
QVariant Value (int col) const
 
int Size () const
 Функция получения количества записей в результате.
 
int Count () const
 Функция получения количества столбцов в результате.
 
bool ExecQuery (const QString &query)
 Функция для выполнения sql запроса. Подробнее...
 
QVariant ExecScalar (const QString &query)
 Эта функция похожа на описанную выше ExecQuery(),. Подробнее...
 
bool First ()
 Делает первую запись результата активной. Подробнее...
 
bool Next ()
 Делает следующую запись результата активной. Подробнее...
 
bool Last ()
 Делает последнюю запись результата активной. Подробнее...
 
bool Prev ()
 Делает предыдущую запись результата активной. Подробнее...
 
QString SqlFieldName (aObject *obj, const QString &userFieldName, const QString &tableType="") const
 Возвращает sql имя поля по его пользовательскому имени. Подробнее...
 
QString SqlTableName (aObject *obj, const QString &tableType="") const
 Возвращает SQL имя основной или вспомогательной таблицы объекта. Подробнее...
 
QString SqlTableName (const QString &objName) const
 Еще не реализовано.
 
QString SqlFieldName (const QString &fieldName) const
 Еще не реализовано.
 
QString LastError () const
 Возвращает текстовое представление последней ошибки или пустую строку, если ошибок не было. Подробнее...
 

Открытые члены

 aExtSQL ()
 Конструктор класса
 
virtual int init (aDatabase *database)
 Функция иницализации, переопределяет функцию базового класса, создает внутренние объекты и переменные.
 
 ~aExtSQL ()
 Деструктор класса
 
- Открытые члены inherited from AExtension
 AExtension (const char *name=0)
 

Additional Inherited Members

- Сигналы inherited from AExtension
void event (const QString &data)
 
- Открытые атрибуты inherited from AExtension
aDatabasedb
 

Подробное описание

Предоставляет возможность использования SQL запросов в отчетах.

            Пример использования. Код взят из модуля экранной формы отчета "Остатки товаров".
* // Oбрабатывает пользовательские нажатия на кнопки экранной формы
* function on_button(name)
* {
* if(name == "report_button")
* {
* generate_report();
* }
* if(name == "run_button")
* {
* run_report();
* }
* }
*
* // Формирует текст SQL запроса и в демонстрационных целях помещает его в поле report_text
* // пользовательского диалога для показа пользователю.
* function generate_report()
* {
* var cat = new Catalogue("Каталог товаров");
* var reg = new ARegister("Главная книга");
* var sql = new SQL();
* var innerQuery = "SELECT "+
* sql.SqlFieldName(cat, "Наименование") + ", " +
* sql.SqlFieldName(cat, "Артикул") + ", " +
* sql.SqlFieldName(reg, "Количество") + " as Amount, " +
* "idg " +
* "FROM " + sql.SqlTableName(cat) + " as CAT " +
* "LEFT JOIN " + sql.SqlTableName(reg, "Товар" ) + " as SALDO " +
* "on CAT.id = SALDO." + sql.SqlFieldName(reg, "Товар") + " " +
* "GROUP BY " + sql.SqlFieldName(cat, "Наименование") + " " +
* "HAVING max(SALDO.date) ";
* var groupQuery = "SELECT sum( Amount ) as summ, "+
* "t.idg, " +
* sql.SqlFieldName(cat, "Название группы", "group") + " as gname " +
* "FROM (" + innerQuery + ") as t " +
* "LEFT JOIN " + sql.SqlTableName(cat, "group") + " as GR " +
* "on GR.id = t.idg GROUP BY t.idg";
*
* var outerQuery = "SELECT G.gname, G.summ, E.* from ( " + innerQuery + " ) as E " +
* "LEFT JOIN ( " + groupQuery + " ) as G " +
* "on E.idg = G.idg";
* Widget("report_text").text = outerQuery;
* }
*
* // Запускает на исполнение SQL запрос, сформированный функцией generate_report()
* // и строит отчет в OpenOffice.org Calc c использованием полученных данных.
* function run_report()
* {
* var sql = new SQL();
* if( !sql.ExecQuery(Widget("report_text").text) )
* {
* sys.Message(1,"you have error in your sql query:" + sql.LastError());
* return;
* }
* var p = new Report("templ_ostatki.ods",2);
* p.setTable("templ_ostatki.ods");
* if(sql.First())
* {
* do{
* p.setValue("f0",sql.Value(2));
* p.setValue("f1",sql.Value(4));
* p.setValue("f2",sql.Value(0));
* p.setValue("f3",sql.Value(1));
* p.exec("строка");
* } while(sql.Next());
* }
* p.setValue("param", ConvertDateFromIso(Date()));
* p.exec("Текущая дата");
* p.show();
* p.close();
* }
*

Методы

QSqlSelectCursor * aExtSQL::Cursor ( ) const
slot

Функция фозвращает внутренний курсор, содержащий результаты выполнения последнего вызова функции ExecQuery или ExecScalar.

            для использования в качестве источника данных для таблиц (QDataTable и т.д). Не удаляйте этот курсор после использования!
            \return Внутренний курсор.
См. также
aExtSQL::ExecQuery()
aExtSQL::ExecScalar()
bool aExtSQL::ExecQuery ( const QString &  query)
slot

Функция для выполнения sql запроса.

            Поддерживается только выражение select. Если случилась ошибка, возвращается false. Для перемещения по результатам используйте функции First(), Next(), Prev(), Last(). Для получения сведений об ошибке - функцией LastError(). 
            \param query (in) - Sql запрос для выполнения.
            \return true, если запрос выполнился без ошибок. 
var sql = new SQL();
if( !sql.ExecQuery("select * from a_journ") )
{
sys.Message(1,"Ошибка в вашем sql запросе:" + sql.LastError());
return;
}
if(sql.First())
{
do{
sys.Message(0, sql.Value(0));
} while(sql.Next());
}
*
См. также
aExtSQL::ExecScalar()
aExtSQL::Value()
aExtSQL::LastError()
QVariant aExtSQL::ExecScalar ( const QString &  query)
slot

Эта функция похожа на описанную выше ExecQuery(),.

            но возвращает не true или false, а значение первой ячейки первой строки результата или QVariant::Invalid, 
            если не вернулось ни одной записи или случилась ошибка. Но если вы знаете, что в результате больше чем одна запись, 
            вы можете перемещаться по ним используя функции First(), Next() и т.д.
            \param query (in) - Sql запрос для выполнения. 
            \return Результат запроса или QVariant::Invalid
var sql = new SQL();
var res = sql.ExecScalar("select count(*) from a_journ") )
sys.Message(0, res + "records in system journal");
*
См. также
aExtSQL::ExecQuery()
bool aExtSQL::First ( )
slot

Делает первую запись результата активной.

            Вы должны сначала вызвать ExecQuery, чтобы вызов этой функции имел смысл.
            \return true в случае успеха
См. также
aExtSQL::ExecuteQuery()
bool aExtSQL::Last ( )
slot

Делает последнюю запись результата активной.

            \return true в случае успеха
См. также
aExtSQL::ExecuteQuery()
QString aExtSQL::LastError ( ) const
slot

Возвращает текстовое представление последней ошибки или пустую строку, если ошибок не было.

Возвращается текст драйвера базы данных.

bool aExtSQL::Next ( )
slot

Делает следующую запись результата активной.

            \return true в случае успеха 
См. также
aExtSQL::ExecuteQuery()
bool aExtSQL::Prev ( )
slot

Делает предыдущую запись результата активной.

            \return true в случае успеха 
См. также
aExtSQL::ExecuteQuery()
QString aExtSQL::SqlFieldName ( aObject obj,
const QString &  userFieldName,
const QString &  tableType = "" 
) const
slot

Возвращает sql имя поля по его пользовательскому имени.

            К каждому объекту Ананаса пользователь может добавлять свои собственные пользовательские поля. 
            К несчастью, когда вы генерируете SQL запрос, вы должны использовать sql-ные имена полей вместо пользовательских. 
            Данная функция помогает делать это очень просто. Все что вам нужно - создать новый объект, 
            который будет использоваться для получения имени, определить пользовательское имя поля и таблицу (основную или одну из запасных :). 
            См SqlTableName() для детального описания имен и структуры таблиц. Кроме того, каждая таблица содержит системные поля 
            для связи между объектами. Эти поля также могут быть использованы в запросе. См. документацию по каждому объекту Ананаса 
            для детального описания.
            \param obj (in) - Объект Ананасаю Используется в качестве контекста поиска.
            \param userFieldName (in) - Пользовательское имя поля
            \param tableType (optional) - Тип таблицы. Для каталога таблица групп имеет синоним "group", 
            для накопительного регистра каждая из таблиц остатков по измерению имеет сининим, совпадающий 
            с пользовательским именем этого измерения.
            \return sql имя поля
* var sql = new SQL();
var cat = new Catalogue("Goods");
sys.Message(0, sql.SqlFieldName(cat, "Full name"); // uf203
sys.Message(0, sql.SqlFieldName(cat, "Group name", "group") //uf304
var doc = new Document("Order");
sys.Message(0, sql.SqlFieldName(doc, "Organization"); //uf449
var reg = new ARegister("Grossbuch");
sys.Message(0, sql.SqlFieldName(reg, "Good"); // uf333
*
См. также
aExtSQL::SqlTableName()

Перекрестные ссылки aObject::table().

QString aExtSQL::SqlTableName ( aObject obj,
const QString &  tableType = "" 
) const
slot

Возвращает SQL имя основной или вспомогательной таблицы объекта.

            Все объекты Ананаса, за исключением Отчетов, хранят данные в sql таблицах. Для Каталога это таблица групп и таблица элементов (осн.), для документа - таблица шапки, для журнала - всегда системная таблица системного журнала, для ИРегистра - одна таблица для хранения всех данных, для АРегистра - одна основная таблица для хранения записей об операциях (осн.)  и X вспомогательных для хранения остатков по разрезам, где X - количество измерений накопительного регистра. Так что если вы хотите получить имя основной таблицы объекта, не используйте параметр \atableType или установите его значение в "". Если вы хотите получить имя вспомогательной таблицы, установите параметру \atableType значение "group" для группы каталога или значение пользовательского имени измерения накопительного регистра для таблицы остатков по данному измерению.
            \param obj (in) - Объект для получения имени таблицы 
            \param tableType (optional) - Тип таблицы 
            \return sql имя таблицы 
    @code 
    var sql = new SQL();
    var cat = new Catalogue("Goods");
    sys.Message(0, sql.SqlTableName(cat)); //ce101
    sys.Message(0, sql.SqlTableName(cat, "")); //ce101
    sys.Message(0, sql.SqlTableName(cat, "group")); //cg105
    var doc = new Document("Order");
    sys.Message(0, sql.SqlTableName(doc)); //dh130
    var journ = new Journal("main journal");
    sys.Message(0, sql.SqlTableName(journ)); // a_journ
    var ireg = new IRegister("Info register"));
    sys.Message(0, sql.SqlTableName(ireg)); // ra303
    var areg = new ARegister("Acc Register");
    sys.Message(0, sql.SqlTableName(areg)); // ra330
    sys.Message(0, sql.SqlTableName(areg),"Goods") //ra330_d445

Перекрестные ссылки aObject::table().

QVariant aExtSQL::Value ( int  col) const
slot
 Функция получения значения столбца \acol текущей записи или QVariant::Invalid если случилачь ошибка или значение \acol меньше 0 или больше, чем количество столбцов в результате.
Аргументы
col(in) -
Возвращает
См. также
aExtSQL::Count()

Объявления и описания членов классов находятся в файлах: