Diesel Pascal

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Re: Diesel Pascal (Суржи)

Сообщение *Rik* » 03.04.2014 16:42:21

Обновил компоненты VisualTech, IBX, сборку DieselPascal

Компоненты VisualTech, версия 1.0.2:
Изменения в TxDBGrid

добавлено свойство Autosort: Boolean.
В модуле xDBGrid объявлена глобальная переменная - указатель на метод сортировки данных

TAutoSortDataSet = procedure (DataSet: TDataSet; Column: TxColumn; CellCursorPos: TCellCursorPos);
var
AutoSortDataSet: TAutoSortDataSet;
Если AutoSort = True и AutoSortDataSet <> nil то при щелчке мышью на заголовке,
вызывается AutoSortDataSet(DataSet: TDataSet; Column: TxColumn; CellCursorPos: TCellCursorPos);
Метод будет вызываться абсолютно для всех сеток TxDBGrid, в которых свойство AutoSort = True
Пример процедуры для IBX:
Код: Выделить всё
uses xDBGrids;

.............................

procedure OnAutoSortDataset(DataSet: TDataSet; Column: TxColumn; CellCursorPos: TCellCursorPos);
begin
  {$IFDEF IBX}

  if DataSet is TIBCustomDataSet then
  begin
    if CellCursorPos = ccpTop then
      TIBCustomDataSet(DataSet).OrderFields := Column.FieldName
    else
      TIBCustomDataSet(DataSet).OrderFields := Column.xFieldName;
  end;

  {$ENDIF}
end;

........................

begin
  AutoSortDataSet := @OnAutoSortDataset;
end;


Компоненты IBX, версия 1.0.8.
Исправлено то, что накосячено в прошлой версии.
Добавлено свойство OrderFields, с помощью которого можно упорядочить данные по любому полю.
Внимание! Этот метод не производит локальную сортировку данных в буфере, а изменяет SQL запрос
в QSelect, добавляя или изменяя инструкцию ORDER BY.
изменен метод Locate, в нем UpperCase заменены на UTF8UpperCase(при регистронезависимом поиске), найденная строка центрируется.

DieselPascal, версия 1.0.5
Собрано на новых компонентах visualTech 1.0.2 и IBX 1.0.8
Добавлены функции
function IsDigit(C: Char): Boolean;
function IsLetter(C: Char): Boolean;
function IsSimbol(C: Char): Boolean;
Параметр С должен быть приведен к Ansi
пример:
Код: Выделить всё
  var
    S: string;
    B: Boolean;
  begin
    S := 'абв';
    S := UTF8ToCP1251(S);
    B := IsLetter(S[1]);
  end;
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Diesel Pascal (Суржи)

Сообщение ogorodov » 03.06.2014 21:27:17

Привет всем
Использую доработанные вами IBX все вроде хорошо только вот CreateDatabase никак не работает
Код
var ibxdbnew: TIBDatabase;
begin
ibxdbnew:=TIBDatabase.Create(nil);
ibxdbnew.DatabaseName:=db_name_;
ibxdbnew.LibraryName:=lib_;
ibxdbnew.SQLDialect:=Dialect;
ibxdbnew.Params.Add('USER '''+UserName+''' PASSWORD '''+Passwd+''' ');
ibxdbnew.Params.Add('PAGE_SIZE = 4096');
ibxdbnew.Params.Add('DEFAULT CHARACTER SET WIN1251');
try
ibxdbnew.CreateDatabase;
except
on E: Exception do
raise Exception.Create('Ошибка создания FireBird '+E.Message);
end;
ibxdbnew.Free;
Никак работать не хотит ... может подскажите почему
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Re: Diesel Pascal (Суржи)

Сообщение *Rik* » 03.06.2014 23:57:40

ogorodov писал(а):Использую доработанные вами IBX все вроде хорошо только вот CreateDatabase никак не работает
Никак работать не хотит ... может подскажите почему


Я сделаю исправление в следующем релизе. А пока поправьте самостоятельно.
В компонентах IBX откройте модуль IBDatabase. Найдите метод procedure TIBDataBase.CreateDatabase;

В реализации метода после CheckInactive допишите:
CheckIBLoaded;

Вот полный код метода, для примера.

procedure TIBDataBase.CreateDatabase;
var
tr_handle: TISC_TR_HANDLE;
begin
CheckInactive;
CheckIBLoaded;
tr_handle := nil;
Call(
ClientLib.isc_dsql_execute_immediate(StatusVector, @FHandle, @tr_handle, 0,
PChar('CREATE DATABASE ''' + FDBName + ''' ' + {do not localize}
Params.Text), SQLDialect, nil),
True);
end;

После исправления пересоберите IBX и свое приложение.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Diesel Pascal (Суржи)

Сообщение ogorodov » 04.06.2014 09:26:17

Спасибо проверю.
Еще вопрос по блоб полям ... мне необходимо прочитать вловполе ...
Код: Выделить всё
ibqPlanNume: TIBDataSet;
...
ibqPlanNume.SelectSQL.Text:=....
ibqPlanNume.Open;
(ibqPlanNume.FieldByName('NOTE') as TBlobField).SaveToFile('note.bin');
...

и все программа вываливается с ошибкой ... Transaction is not active ...сам запрос закрываеться
формат поля NOTE BLOB SUB_TYPE 0 SEGMENT SIZE 80,
остальные поля датасета читаются нормально
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Re: Diesel Pascal (Суржи)

Сообщение *Rik* » 04.06.2014 13:30:37

ogorodov писал(а):и все программа вываливается с ошибкой ... Transaction is not active ...сам запрос закрываеться
формат поля NOTE BLOB SUB_TYPE 0 SEGMENT SIZE 80,
остальные поля датасета читаются нормально


Исправил. Обновил архивы с компонентами на сайте.

Если вам нужен только ibx, прямая ссылка. Версия 2.0.2:
http://visual-t.ru/files/ibx.7z
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Diesel Pascal (Суржи)

Сообщение ogorodov » 04.06.2014 21:48:40

Новую версию IBX установил ... все работает. Спасибо за оперативность.
Есть в еще одна не то чтобы ошибка а скорее Делфовое наследие ... Компоненты IBX не работают в консольных приложениях под Linux ...
Я тут накидал примерчик http://files.mail.ru/AF088349C7D340B6ACB15E331D023706 и сделал скриншоты для наглядности.
Дело в том что если в приложении отсутствует модуль Interfaces то компилятор выдает ошибку ... а если есть интерфейс то должны быть установлены иксы.
Что на серверах Linux практически никогда не ставиться ... за ненадобностью ... вот такая вот беда ...
Я то хотел их в CGI для Apache применить ... вместо стандартных а они не работают ... :=(
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Re: Diesel Pascal (Суржи)

Сообщение *Rik* » 05.06.2014 05:28:54

ogorodov писал(а):Новую версию IBX установил ... все работает. Спасибо за оперативность.
Есть в еще одна не то чтобы ошибка а скорее Делфовое наследие ... Компоненты IBX не работают в консольных приложениях под Linux ...
Я тут накидал примерчик http://files.mail.ru/AF088349C7D340B6ACB15E331D023706 и сделал скриншоты для наглядности.
Дело в том что если в приложении отсутствует модуль Interfaces то компилятор выдает ошибку ... а если есть интерфейс то должны быть установлены иксы.
Что на серверах Linux практически никогда не ставиться ... за ненадобностью ... вот такая вот беда ...
Я то хотел их в CGI для Apache применить ... вместо стандартных а они не работают ... :=(

Я думаю, это исправимо. По большей части он тащит за собой модуль Forms, чтобы обращаться к Screen.Cursor. Думаю смогу исправить, пропишу опцию, которая будет разрешать или запрещать поддержку визуального интерфейса, но потребуется время, тут весь код просматривать придется...

Добавлено спустя 6 часов 20 минут 57 секунд:
ogorodov писал(а):Новую версию IBX установил ... все работает. Спасибо за оперативность.
Есть в еще одна не то чтобы ошибка а скорее Делфовое наследие ... Компоненты IBX не работают в консольных приложениях под Linux ...
Я тут накидал примерчик http://files.mail.ru/AF088349C7D340B6ACB15E331D023706 и сделал скриншоты для наглядности.
Дело в том что если в приложении отсутствует модуль Interfaces то компилятор выдает ошибку ... а если есть интерфейс то должны быть установлены иксы.
Что на серверах Linux практически никогда не ставиться ... за ненадобностью ... вот такая вот беда ...
Я то хотел их в CGI для Apache применить ... вместо стандартных а они не работают ... :=(


Попробуйте вот это:
http://visual-t.ru/files/ibx_203.7z

Если все нормально, выложу официально. Здесь какой нюанс.
В компонентах 2 пакета dclibx и ibexpress. Для поддержки консольных приложений нужно открыть пакет ibexpress и удалить зависимость LCL, после этого он соберется без поддержки диалогов и Screen.Cursor.
Соответственно, для графических приложений, придется по новой добавлять зависимость LCL и пересобирать. К сожалению, лучше пока не придумал...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Diesel Pascal (Суржи)

Сообщение ogorodov » 06.06.2014 09:09:16

Попробовал ... Без LCL не хотит собираться ...
ScreenShot 06.06.14 11-03-49.png


Добавлено спустя 3 часа 17 минут 42 секунды:
Посмотри пожалуйста ... вот так вроде работает ...
ibx_203m.7z
(180.41 КБ) Скачиваний: 904
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Re: Diesel Pascal (Суржи)

Сообщение *Rik* » 06.06.2014 14:37:45

ogorodov писал(а):Попробовал ... Без LCL не хотит собираться ...
ScreenShot%2006.06.14%2011-03-49.png


Добавлено спустя 3 часа 17 минут 42 секунды:
Посмотри пожалуйста ... вот так вроде работает ...
ibx_203m.7z

Да, так собирается, но на дублирование ругается... Вы разделили пути для скомпилированных модулей. Я буду предлагать обычный вариант. Для сборки без поддержки LCL, вам самостоятельно придется разделять пути, как вы это сделали, и кроме этого, без LCL нужно будет прописать в ibexpress путь к $(LazarusDir)\components\lazutils, оттуда подтягиваются некоторые функции для работы с UTF8. Попробую описать это в инструкции и приложу к ibx.

В первоначальном варианте, я нужные функции для UTF8 выдрал и засунул в IBParser, но сейчас решил переиграть назад, поэтому без LCL нужно указывать путь к lazutils.
Положил сюда-же:
http://visual-t.ru/files/ibx_203.7z
попробуйте собрать, выполнив снова манипуляции с путями...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Diesel Pascal (Суржи)

Сообщение ogorodov » 09.06.2014 12:15:51

Привет Rik
Вот что у меня получилось
ibx_203m2.7z
(194.87 КБ) Скачиваний: 912
... все хорошо только вызов редакторов сбился.
А можно сделать так чтобы все необходимые компоненты runtime устанавливались в пакете ibexpress.lpk
А все редакторы designtime в пакете dclibx.lpk ... было бы я так понимаю более правильно

Добавлено спустя 1 час 14 минут 8 секунд:
... попробовал сам разделить вот что получилось
ibx_203m3.7z
(201.54 КБ) Скачиваний: 913

все теперь собирается и работает и под иксами и в консоли
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Re: Diesel Pascal (Суржи)

Сообщение hinst » 09.06.2014 14:18:11

суржи это от слова surge
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Diesel Pascal (Суржи)

Сообщение *Rik* » 09.06.2014 19:37:52

hinst писал(а):суржи это от слова surge

Нет. Просто совпало...
Сейчас я отказался от этого названия, уже не важо, можно интерпретировать как хотите...

Добавлено спустя 7 минут 59 секунд:
ogorodov писал(а):Привет Rik
Вот что у меня получилось
ibx_203m2.7z
... все хорошо только вызов редакторов сбился.
А можно сделать так чтобы все необходимые компоненты runtime устанавливались в пакете ibexpress.lpk
А все редакторы designtime в пакете dclibx.lpk ... было бы я так понимаю более правильно

Надо попробовать, у меня была такая мысль. Но естессно, если ставить только ibexpress редакторы будут недоступны. У вас в примере приложение консольное, а DataModule создана визуально, если ставить только ibexpress, про использование редакторов в консольных DataModule придется забыть...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Diesel Pascal (Суржи)

Сообщение ogorodov » 10.06.2014 06:56:16

*Rik* писал(а): ... DataModule создана визуально, если ставить только ibexpress, про использование редакторов в консольных DataModule придется забыть ...

Вот как раз наоборот ... пакету dclibx.lpk сделать доступ только в designtime соотв. он будет доступен для использования в DataModule только при проектировании
А ibexpress.lpk указать и designtime и runtime ... в скомпилированном проекте будут только ibexpress без редакторов ... которые там вообще уже не нужны
... и спасибо за столь кoрдинальную доработку компонентов IBX ... большое дело сделали ...
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Re: Diesel Pascal (Суржи)

Сообщение *Rik* » 11.06.2014 11:15:28

ogorodov писал(а):Вот как раз наоборот ... пакету dclibx.lpk сделать доступ только в designtime соотв. он будет доступен для использования в DataModule только при проектировании
А ibexpress.lpk указать и designtime и runtime ... в скомпилированном проекте будут только ibexpress без редакторов ... которые там вообще уже не нужны
... и спасибо за столь кoрдинальную доработку компонентов IBX ... большое дело сделали ...

Оно так и работает. Редакторы к проекту не подтягиваются (если вы конечно не добавите их в проект принудительно), только runtime библиотеки.
Тут дело вот в чем. Сами редакторы используют компоненты ibexpress и когда мы разделяем места хранения скомпилированных модулей, у нас получается, что ..ibexpress/lib/ и ..dclibx/lib/ содержат одинаковые скомпилированные модули, о чем при установке dclibx выдается сообщение. Это не страшно, просто раздразжает, когда часто приходится пересобирать Lazarus. Тут наверно надо с путями чего-то поправить, чтобы при компиляции dclibx он не компилировал модули ibxpress заново, а брал готовые из из ibexpress/lib. Я сам как на Lazarus пересел, ещё и года нет, поэтому с такими нюансами ещё толком не разобрался...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Diesel Pascal (Суржи)

Сообщение ogorodov » 17.06.2014 13:58:39

Привет *Rik*
Я тут еще на баг наткнулся ... вот такая конструкция не работает
Код: Выделить всё
ibqPlanNume: TIBDataSet;
...
procedure Tdm.DoReturnDatePlan(Sender: TObject; const Date: TDateTime; const TypPl: Integer; const KomentPl: String);
begin
  ibqPlanNume.Edit;
  ibqPlanNume.FieldByName('DATEPL').AsDateTime:=Date;
  ibqPlanNume.FieldByName('TYPEPL').AsInteger:=TypPl;
  (ibqPlanNume.FieldByName('NOTE') as TBlobField).AsString:=UTF8ToCP1251(KomentPl);
  ibqPlanNume.Post;
end;

Выдает ошибку ...
Class: EIBInterBaseError
Message: invalid transaction handle (expecting explicit transaction start)

Табличка ...
Код: Выделить всё
CREATE TABLE PLAN (
    ID        INTEGER NOT NULL,
    DATEPL    TIMESTAMP,
    TYPEPL    INTEGER,
    NOTE      BLOB SUB_TYPE 0 SEGMENT SIZE 80
);

Запрос на модификацию ...
Код: Выделить всё
Update PLAN Set
  PLAN.DATEPL = :DATEPL,
  PLAN.TYPEPL = :TYPEPL,
  PLAN.NOTE = :NOTE
where PLAN.ID=:ID

На исходной версии работала ... посмотри пожалуста
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Пред.След.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru