Класс aExtSQL

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

#include <aextsql.h>

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

Полный список членов класса

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

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 ()
 Деструктор класса.


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

Предоставляет возможность использования 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 и т.д). Не удаляйте этот курсор после использования!

Возвращает:
Внутренний курсор.
См. также:
aExtSQL::ExecQuery()

aExtSQL::ExecScalar()

QVariant aExtSQL::Value ( int  col  )  const [slot]

Функция получения значения столбца текущей записи или QVariant::Invalid если случилачь ошибка или значение меньше 0 или больше, чем количество столбцов в результате.

Аргументы:
col (in) -
Возвращает:
См. также:
aExtSQL::Count()

bool aExtSQL::ExecQuery ( const QString &  query  )  [slot]

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

Поддерживается только выражение select. Если случилась ошибка, возвращается false. Для перемещения по результатам используйте функции First(), Next(), Prev(), Last(). Для получения сведений об ошибке - функцией LastError().

Аргументы:
query (in) - Sql запрос для выполнения.
Возвращает:
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() и т.д.

Аргументы:
query (in) - Sql запрос для выполнения.
Возвращает:
Результат запроса или 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, чтобы вызов этой функции имел смысл.

Возвращает:
true в случае успеха
См. также:
aExtSQL::ExecuteQuery()

bool aExtSQL::Next (  )  [slot]

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

Возвращает:
true в случае успеха
См. также:
aExtSQL::ExecuteQuery()

bool aExtSQL::Last (  )  [slot]

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

Возвращает:
true в случае успеха
См. также:
aExtSQL::ExecuteQuery()

bool aExtSQL::Prev (  )  [slot]

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

Возвращает:
true в случае успеха
См. также:
aExtSQL::ExecuteQuery()

QString aExtSQL::SqlFieldName ( aObject obj,
const QString &  userFieldName,
const QString &  tableType = "" 
) const [slot]

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

К каждому объекту Ананаса пользователь может добавлять свои собственные пользовательские поля. К несчастью, когда вы генерируете SQL запрос, вы должны использовать sql-ные имена полей вместо пользовательских. Данная функция помогает делать это очень просто. Все что вам нужно - создать новый объект, который будет использоваться для получения имени, определить пользовательское имя поля и таблицу (основную или одну из запасных :). См SqlTableName() для детального описания имен и структуры таблиц. Кроме того, каждая таблица содержит системные поля для связи между объектами. Эти поля также могут быть использованы в запросе. См. документацию по каждому объекту Ананаса для детального описания.

Аргументы:
obj (in) - Объект Ананасаю Используется в качестве контекста поиска.
userFieldName (in) - Пользовательское имя поля
tableType (optional) - Тип таблицы. Для каталога таблица групп имеет синоним "group", для накопительного регистра каждая из таблиц остатков по измерению имеет сининим, совпадающий с пользовательским именем этого измерения.
Возвращает:
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()

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

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

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

Все объекты Ананаса, за исключением Отчетов, хранят данные в sql таблицах. Для Каталога это таблица групп и таблица элементов (осн.), для документа - таблица шапки, для журнала - всегда системная таблица системного журнала, для ИРегистра - одна таблица для хранения всех данных, для АРегистра - одна основная таблица для хранения записей об операциях (осн.) и X вспомогательных для хранения остатков по разрезам, где X - количество измерений накопительного регистра. Так что если вы хотите получить имя основной таблицы объекта, не используйте параметр или установите его значение в "". Если вы хотите получить имя вспомогательной таблицы, установите параметру значение "group" для группы каталога или значение пользовательского имени измерения накопительного регистра для таблицы остатков по данному измерению.

Аргументы:
obj (in) - Объект для получения имени таблицы
tableType (optional) - Тип таблицы
Возвращает:
sql имя таблицы
                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
См. также:
aExtSQL::SqlFieldName()

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

QString aExtSQL::LastError (  )  const [slot]

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

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


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

Документация по Ananas Library. Последние изменения: Mon Jul 14 11:53:55 2008. Создано системой  doxygen 1.5.5