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 ()
 Деструктор класса
 
- Открытые члены унаследованные от AExtension
 AExtension (const char *name=0)
 

Дополнительные унаследованные члены

- Сигналы унаследованные от AExtension
void event (const QString &data)
 
- Открытые атрибуты унаследованные от 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();
}

Методы

◆ Cursor

QSqlSelectCursor * aExtSQL::Cursor ( ) const
slot

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

для использования в качестве источника данных для таблиц (QDataTable и т.д). Не удаляйте этот курсор после использования!

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

◆ ExecQuery

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()

◆ ExecScalar

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()

◆ First

bool aExtSQL::First ( )
slot

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

Вы должны сначала вызвать ExecQuery, чтобы вызов этой функции имел смысл.

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

◆ Last

bool aExtSQL::Last ( )
slot

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

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

◆ LastError

QString aExtSQL::LastError ( ) const
slot

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

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

◆ Next

bool aExtSQL::Next ( )
slot

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

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

◆ Prev

bool aExtSQL::Prev ( )
slot

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

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

◆ SqlFieldName

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()

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

◆ SqlTableName

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().

◆ Value

QVariant aExtSQL::Value ( int  col) const
slot

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

Аргументы
col(in) -

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