1 (edited by zoomix 2015-01-09 12:44:28)

Topic: Использование переменных в вычислительных полях.

Добрый день!

Можно ли в вычислительных полях использовать переменную (глобальную или локальную), объявленную в скрипте?

Например, объявляем:

var
r: real;
r := 0.00;

begin
end.

И далее используем в вычислительном поле:

(SELECT CASE
WHEN id = 1 THEN Receipt - Expence as 'Остаток'
  r:=Receipt - Expence;

ELSE r + Receipt - Expence as 'Остаток'
r:=r + Receipt - Expence;
END

from ourtable)


я попробовал, но у меня вылетает ошибка на скрипте - identifier expected на r := 0.00; менял на 0, вместо 0.00 - та же песня.

Если переменные из скриптов нельзя использовать в вычислительных полях, то м.б. можно создать какую-то временную таблицу с одним полем и туда передавать/оттуда брать данные для расчетов?
Вот бы такой пример!

Re: Использование переменных в вычислительных полях.

к сожалению SQL в реализации SQLite не поддерживает переменные.
Здесь описаны пару способов, как это обойти
http://stackoverflow.com/questions/7739 … and-use-it

Dmitry.

3 (edited by zoomix 2015-01-09 13:17:58)

Re: Использование переменных в вычислительных полях.

Спасибо. Но я читал, что из host программы можно в SQLite запросы передавать параметры переменных. Поэтому и думал, что MVDB может являться как раз тем хостом и в связке это будет работать.
По временным таблицам - вот бы простой, немудренный пример, как туда записывать и брать оттуда данные для расчетов в выч.полях.
----
Еще есть какой-то биндинг
что-то типа sqlite3_bind_int(sql_statement, 1, ID);
но не въехал еще, что это такое, слишком мудренно...  sad

Re: Использование переменных в вычислительных полях.

Так по ссылкам выше, есть пример, как из временных таблиц брать и записывать данные, но к сожалению удобным и простым способом это не назвать )


К сожалению проще не сделать.

Dmitry.

5 (edited by zoomix 2015-01-09 13:54:29)

Re: Использование переменных в вычислительных полях.

DriveSoft wrote:

К сожалению проще не сделать.

smile
Тогда только и остается, что телефонными базами  баловаться... smile

А если такой вариант, подправьте плз, если где не так.

Создаем в MVDB дополнительно временную таблицу: MyTemp
c полями id (int) и Rest (real)

далее, в выч.поле прописываем:

(SELECT CASE
--
WHEN tbl.id = 1 THEN tbl.Receipt - tbl.Expence as 'Остаток'
INSERT OR REPLACE INTO tmp VALUES (tbl.id, tbl.Receipt - tbl.Expence)  // м.б. даже можно расчетное выражение заменить на его алиас - "Остаток"
 
--

ELSE (SELECT tmp.Rest + tbl.Receipt -tbl.Expence as 'Остаток'
INSERT OR REPLACE INTO tmp VALUES (tbl.id, tmp.Rest+tbl.Receipt - tbl.Expence))
--
END
From Table tbl
Join MyTemp tmp on tbl.id=tmp.id )


p.s. не уверен по кол-ву открывающих и закрывающих запятых...

Re: Использование переменных в вычислительных полях.

zoomix
к сожалению с таким вычисляемым полем не подскажу, не пробовал.


Почему бы не сделать расчеты через скрипт?

Dmitry.

Re: Использование переменных в вычислительных полях.

С удовольствием, но не знаю как.

Re: Использование переменных в вычислительных полях.

Куда необходимо выводить расчеты?
опишите ситуацию подробней в целом, можете также приложить ваш проект к сообщению.

Dmitry.

Re: Использование переменных в вычислительных полях.

ок, сейчас попробую

10 (edited by zoomix 2015-01-09 15:43:35)

Re: Использование переменных в вычислительных полях.

Вот пример базы без exe и dll
На картинке - она же.

Что хотелось бы получить в результате расчетов в скрипте.

1. Колонка "Остаток" расчитывается по формуле:

Остаток = Остаток по предыдущей записи + Приход - Расход

Скрипт (по кнопке или как)  расчитывает остаток по каждой строчке и INSERTывает его в поле Остаток (оно же Rest в таблице)

2. Затем под гридом выводятся общие итоговые суммы по всем трем полям: Приход, Расход, Остаток

3. Также под гридом к каждой записи, при перемещении по записям курсором или мышью - выводится сообщения
из поля Info в строку ПРИМЕЧАНИЯ.

Вот в принципе и все
------------
P.S. М.б. лучше вывод осуществлять не в эту же таблицу, а либо во временную и поле из временной лэфт_джойнить к полям этой
- как лучше на Ваш взгляд?

Post's attachments

Attachment icon TestFromZoomix.zip 3.08 kb, 418 downloads since 2015-01-09 

11 (edited by zoomix 2015-01-09 15:28:43)

Re: Использование переменных в вычислительных полях.

Вот картинка

Post's attachments

Attachment icon table_.jpg 97.25 kb, 290 downloads since 2015-01-09 

Re: Использование переменных в вычислительных полях.

Сделал расчет остатка с помощью такого выч. поля

(
SELECT TOTAL( IfNull(t.Receipt,0) - IfNull(t.Expence,0) ) FROM test t WHERE t.id <= test.id
)

Итоговый остаток будет в последней строчке.


Расчет Итого расходов и доходов сделано с помощью футера компонента TableGrid
для его правильной работы (была проблема с неправильным разделителем дробной части, всегда выводилась точка, даже если в региональных настройках стоит запятая) скачайте последнюю бета версию 1.48
https://www.dropbox.com/s/6rz92s72djtmv … 8.zip?dl=0



Исправленный проект приложил к сообщению

Post's attachments

Attachment icon TestFromZoomix2.zip 3.62 kb, 425 downloads since 2015-01-09 

Dmitry.

Re: Использование переменных в вычислительных полях.

Спасибо, попробую. Насчет футера, а что если кол-во записей выводимых в грид превысит размеы грид, футер останется или забьется записями из таблицы?

Re: Использование переменных в вычислительных полях.

Остаток считает - супер! Огромное спасибо!!!!

А вот с футером, что-то беда - не выводит его вообще, ни с точкой, ни с запятой...
И нет ни строчки скрипта по итогам в футере, наверное - забыли вставить при отправке проекта.

Re: Использование переменных в вычислительных полях.

футер останется.


Вы скачали последнюю бета версию 1.48?
футер считается без использования скриптов, через настройки компонента TableGrid


если не заработает, пришлите мне вашу папку с проектом, без удаления в нем exe файлов на support@drive-software.com
посмотрю в чем дело.

Dmitry.

Re: Использование переменных в вычислительных полях.

Скачал, но запускал на 1.46, счас попробую на 1.48
Спасибо!

Re: Использование переменных в вычислительных полях.

На 1.48 футер с суммой появляется, правда не могу понять как и откуда вставлять этот футер - нигде в свойствах TableGrid не нашел даже намека на футер. М.б. ткнете носом, где он находится? А то если повторять футер в своих других проектах, то как?

Re: Использование переменных в вычислительных полях.

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;item=513&amp;download=0


Подробней можно прочитать тут
http://myvisualdatabase.com/help_ru/com … ooter.html

Post's attachments

Attachment icon footer.png 41.95 kb, 251 downloads since 2015-01-09 

Dmitry.

Re: Использование переменных в вычислительных полях.

Ясно, спасибо!