Попытка номер N
Модератор: Модераторы
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Attid писал(а):зашел на форум как раз про sqlite узнать =)
но ком строка для рисования бд это все-таки грустно )
Категорически не согласен. По другому фиг нормальную БД фиг слепишь. Гибкость и надежность SQL-cкриптов, запускаемых через фронтэнд из командной строки - ничем не заменишь. Уж поверьте !
кста проэкт roznitsa, я что-то не нашел беглым взглядом, не в мсе не в конфе =/
В "public.binaries" на том же ньюс-сервере. Берите последний по дате. Хотя это еще не финальная версия. Но весь функционал на месте.
ПС:
Нюансы SQLITE3 в МСЕ:
- есть соглашения о соствествии типов при "CREATE TABLE .." и SQLDB-типов полей, при их выполнении типы полей определяются корректно и не требуют подстройки
- типы агрегатных полей, констант и прочего ( не входящего в "CREATE TABLE" - то есть не выполняеющего соглашение выше ) не определется корректно, поэтому MSEgui правильный тип можно подправить вручную - в FieldDefs (чего в дельфях/FPC нет ). Такова история полного приручения SQLITE3 !
То есть использование "CREATE TABLE" ( а не сторонних приблуд ) - важный момент.
Кстати, одна приблуда часто не может открыть БД-файл, созданный/модифицированный другой приблудой. Наступал на эти грабли...
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
Код: Выделить всё
Кстати, одна приблуда часто не может открыть БД-файл, созданный/модифицированный другой приблудой. Наступал на эти граблину это может тольок говорить о неполноцености БД. но речь не об этом.
есть вопрос как к знатоку МСЕ, который решит перевод еще проги на мсе.
могу ли я в ДБгрид добавлять в конце запроса строчку для отображения.
например запрос возрощает
Код: Выделить всё
ботинки 2 35
телефон 1 45
мыша 15 10а вывести клиенту
Код: Выделить всё
ботинки 2 35
телефон 1 45
мыша 15 10
всего 18 90как это сделать запросом или в отчете я знаю,
интересен вариант именно в гриде наименьшеми потерями.
на вскидку могу предположить использование локального буфера, но может можно проще
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Я тоже прошел период заблуждений типа поиска "волшебного грида, умеющего все делать". Слава Всевышнему, Мартин вправил мозги.
Как сделано в ROZNITSA:
================
qrySS:
в событии "AfterOpen", вызываемом при первичном открытии выборки или при автоперезапросе после записи в БД, инициированном опциями {dso_autoapply & dso_autocommit & dso_rerfresafterapply}, вызывается код заполнения фиксированной строки внизу грида :
Здесь используется метод "обсчитывать весь датасет", а не грид. При "disablecontrols" - очень скоростной ( не медленнее, чем внутренний пересчет в гриде ). Если записей очень много - можно пересчитывать дельту от последней суммы. Но тут придется фильтровать состояния выборок - чтобы несколько раз не посчитало.
Кстати, во избежание тупейшего дублирования памяти, грид в SQLDB просто отбражает текущее "окно" ( в кол-во строк грида ), накладываемое на опять-таки "окно" ( размером "packet records") записей, выбранных из БД. Поэтому считать суммы по данным самого грида ( а не связанного запроса к БД ) - может позволить только неграмотно сделанный грид, 1) вытащивший из БД все записи и 2) продублировавший эти данные во внутренних структурах.
Генератор очетов имеет фишку авто-суммирования по заданному полю БД. Включается специальной опцией.
Как сделано в ROZNITSA:
================
qrySS:
в событии "AfterOpen", вызываемом при первичном открытии выборки или при автоперезапросе после записи в БД, инициированном опциями {dso_autoapply & dso_autocommit & dso_rerfresafterapply}, вызывается код заполнения фиксированной строки внизу грида :
Код: Выделить всё
// ------------------------------
// Пересчет итогов во всех (пока) столбцах по подписке
//
procedure tmainfo.recalcsummaryss;
var
bm1: tbookmark;
i,i1: integer;
begin
with dmmo, qrySS do begin
// чтобы не тормозило и не мигало при сканировании запроса
disablecontrols;
bm1:= getbookmark; // куда вернуться после сканироования
// по очереди - пресчитать все столбцы грида
for i:= 0 to 11 do begin
first; // в начало запроса
i1:= 0;
// само сканирование
while not eof do begin
// набор суммы
i1:= i1 + fields[(min_amount_fieldno-1){поправка на разную нумерацию полей } + i].asinteger;
next;
end;
// отображение суммы в текущем столбце фикс-строки
wgrdSS.fixrows[-2].captions[3{с этого стотбца идут месяцы} + i].caption:= IntToStr(i1);
end;
// возвращаемся, где были
gotobookmark(bm1);
// пусть теперь мигает
enablecontrols;
end;
end;
==============
Здесь используется метод "обсчитывать весь датасет", а не грид. При "disablecontrols" - очень скоростной ( не медленнее, чем внутренний пересчет в гриде ). Если записей очень много - можно пересчитывать дельту от последней суммы. Но тут придется фильтровать состояния выборок - чтобы несколько раз не посчитало.
Кстати, во избежание тупейшего дублирования памяти, грид в SQLDB просто отбражает текущее "окно" ( в кол-во строк грида ), накладываемое на опять-таки "окно" ( размером "packet records") записей, выбранных из БД. Поэтому считать суммы по данным самого грида ( а не связанного запроса к БД ) - может позволить только неграмотно сделанный грид, 1) вытащивший из БД все записи и 2) продублировавший эти данные во внутренних структурах.
Генератор очетов имеет фишку авто-суммирования по заданному полю БД. Включается специальной опцией.
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
Я тоже прошел период заблуждений типа поиска "волшебного грида, умеющего все делать". Слава Всевышнему, Мартин вправил мозги.
ну мне много не надо функционала, просто поддерживаю в 2х интерфейсах:
грид в приложении и табличка в вебморде(пхп).
мне только сортировку и подпись внизу, записей обычно не больше 30.
хотя фильтрация тоже было-бы прикольно +)
это и имелось ввиду. спасибо попробую.Здесь используется метод "обсчитывать весь датасет", а не грид.
есть пару замечаний по МСЕ
1, решил пересохранить проэкт в другое место, другим названием
пересохранил проэкт, потом формы при сохрании формы меняется название файла, но не меняется название юнита внутри и в проэкте.
2, в настройках добавил путь к каталогу с юнитами, добавил юнит из того каталога при компеляции выводится сообщение что ошибка в юните из той папки , но по клику на сообщение файл не открывается и даже если файл открыт то не переходит в место ошибки.
ЗЫ переход из дельфи в лазарус проще чем из лазаруса в МСЕ
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
Кстати, во избежание тупейшего дублирования памяти, грид в SQLDB просто отбражает текущее "окно" ( в кол-во строк грида ), накладываемое на опять-таки "окно" ( размером "packet records") записей, выбранных из БД. Поэтому считать суммы по данным самого грида ( а не связанного запроса к БД ) - может позволить только неграмотно сделанный грид, 1) вытащивший из БД все записи и 2) продублировавший эти данные во внутренних структурах.
кстати. при локально режиме МСЕ поднимает все записи из файла.
соответственно у меня под линухом прога загружается полчаса =)
под вендой много записей пока не сувал.
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
но для больших обьемов к сожелению не годится =(
а жаль.
аналог в МСЕ ?
а жаль.
Код: Выделить всё
Self.WindowState := wsMaximized;аналог в МСЕ ?
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
В принципе, когда появятся PackageLibraries - тогда и "отдельно хранить" будет. Мартин принципиально отказывается городить хотфикс огород с псевдо-пакетами "а-ля Лазарус" ( которые один фиг в программу собираются ) - хотя мы ему потихоньку капаем на мозги "никто, кроме тебя, эти пэкаджи не сделает".
Тут другой прикол уже на подходе, и возможно Мартин хочет одним выстрелом нескольких зайцев замочить - межпроцессовое взаимодействие и обмен событиями через пайпы ( делается для запуска загружаемых форм ). Тогда можно будет вместо пэкаджа (ДЛЛ) подгружать и работать с исполняемым файлом. Нечто типа DCOM.
Шаблоны MSEgui-отчетов ( те же формы ) - как раз попадают в категорию "запуск загружаемых форм". Но это в будущем. А будущее в этом проекте долго ждать себя не заставляет.
Тут другой прикол уже на подходе, и возможно Мартин хочет одним выстрелом нескольких зайцев замочить - межпроцессовое взаимодействие и обмен событиями через пайпы ( делается для запуска загружаемых форм ). Тогда можно будет вместо пэкаджа (ДЛЛ) подгружать и работать с исполняемым файлом. Нечто типа DCOM.
Шаблоны MSEgui-отчетов ( те же формы ) - как раз попадают в категорию "запуск загружаемых форм". Но это в будущем. А будущее в этом проекте долго ждать себя не заставляет.
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
это плохо, это очень плохо.
PackageLibraries не нужен для хранения отчетов отдельно.
пойду с мартином пообщаюсь .
а это у меня так или вообще если над МСЕ приложение в венде помохать мышей то CPU 50%
GIMP CPU 15%
lazarus CPU 5%
firefox 17%
IE 11 %
проверь у себя есть также давай жаловаться Мартину =)
PackageLibraries не нужен для хранения отчетов отдельно.
пойду с мартином пообщаюсь .
а это у меня так или вообще если над МСЕ приложение в венде помохать мышей то CPU 50%
GIMP CPU 15%
lazarus CPU 5%
firefox 17%
IE 11 %
проверь у себя есть также давай жаловаться Мартину =)
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
проверь у себя есть также давай жаловаться Мартину =)
============
Под Вынь-ХП ( классическая тема, все визуальные эффекты вырублены) больше 7% на проекте ROZNITSA не получается. Хоть тресни. Под Линуксом загрузка гораздо больше - для всех программ.
А вообще - вопрос вставал. Снижали. Если честно, мнение Мартина - даже если происходит, то фигня все это. Главное - чтобы в айдле не жрало ничего.
Вам нужны шаблоны-описатели отчетов, по которым строятся реальные отчеты ? Это совсем другая песня. Лично мне это не подходит - вследствие невозможности зашить сложную логику( пока ).
============
Под Вынь-ХП ( классическая тема, все визуальные эффекты вырублены) больше 7% на проекте ROZNITSA не получается. Хоть тресни. Под Линуксом загрузка гораздо больше - для всех программ.
А вообще - вопрос вставал. Снижали. Если честно, мнение Мартина - даже если происходит, то фигня все это. Главное - чтобы в айдле не жрало ничего.
PackageLibraries не нужен для хранения отчетов отдельно.
Вам нужны шаблоны-описатели отчетов, по которым строятся реальные отчеты ? Это совсем другая песня. Лично мне это не подходит - вследствие невозможности зашить сложную логику( пока ).
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
добрался до розницы пытаюсь открыть проэкт
таких еще несколько.
потом
ну и приложение падает =(
Can not read formfile "/C:/projects/mse/roznitsa/dm.mfm".
Error reading qryOffices.IndexDefs: Error reading TIndexDef.Name: Unknown property: "Name"
таких еще несколько.
потом
Unresolved references in trefsfo to dmmo.
Do you wish to search the formfile?
Can not read formfile "/C:/projects/mse/roznitsa/refs.mfm".
Unresolved reference to dmmo.
ну и приложение падает =(
Код: Выделить всё
---------------------------
Error
---------------------------
An unhandled exception occurred at $0056B3DF :
EReadError : Error reading qryOffices.IndexDefs: Error reading TIndexDef.Name: Unknown property: "Name"
$0056B3DF
$0056E883
$00568467
$00573384
$0056E909
$00568467
$0043AFC7 TMSECOMPONENT__READSTATE, line 2746 of C:/lazarus/msegui/lib/common/kernel/mseclasses.pas
$005690DD
$00438594 LOADMODULE, line 1277 of C:/lazarus/msegui/lib/common/kernel/mseclasses.pas
$00438813 DOLOAD, line 1317 of C:/lazarus/msegui/lib/common/kernel/mseclasses.pas
$004386A1 INITMSECOMPONENT, line 1332 of C:/lazarus/msegui/lib/common/kernel/mseclasses.pas
$00438883 LOADMSEMODULE, line 1443 of C:/lazarus/msegui/lib/common/kernel/mseclasses.pas
$0045F85C TMSEDATAMODULE__CREATE, line 90 of C:/lazarus/msegui/lib/common/kernel/msedatamodules.pas
$0045F765 TMSEDATAMODULE__CREATE, line 80 of C:/lazarus/msegui/lib/common/kernel/msedatamodules.pas
$004382C3 CREATEMODULE, line 1187 of C:/lazarus/msegui/lib/common/kernel/mseclasses.pas
$
---------------------------
OK
---------------------------
