Страница 4 из 13
Re: Diesel Pascal (Суржи)
Добавлено: 18.06.2014 08:49:29
*Rik*
ogorodov писал(а):Привет *Rik*
Я тут еще на баг наткнулся ... вот такая конструкция не работает
На исходной версии работала ... посмотри пожалуста
Я свой тестовый пример смотрю, в нем то-же самое, у меня работает. Можете сделать тестовый проект с базой?
Скорее всего транзакция не стартанула автоматом. На ibqPlanNume AutoStartTransaction установлено?
Попробуйте сделать так:
Код: Выделить всё
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.UpdateTransaction.StartTransaction;
(ibqPlanNume.FieldByName('NOTE') as TBlobField).AsString:=UTF8ToCP1251(KomentPl);
ibqPlanNume.Post;
end;
Если сработает, будем смотреть почему не срабатывает авто запуск транзакции.
Blob в IB живет отдельной жизнью, работа с ним идет не так как с обычными данными. Если при работе с данными транзакцию можно запустить во время метода Post, когда данные пересылаются на сервер, то при обращении к Blob полю данные тут-же отправляются на сервер, поэтому транзакцию нужно запускать отдельно, независимо от DataSet.Post.
Re: Diesel Pascal (Суржи)
Добавлено: 18.06.2014 10:19:56
ogorodov
Да в таком варианте заработала .... может это из-за того что я со старой версией FireBird работаю ... 1.5.5
Re: Diesel Pascal (Суржи)
Добавлено: 18.06.2014 10:29:13
*Rik*
ogorodov писал(а):Да в таком варианте заработала .... может это из-за того что я со старой версией FireBird работаю ... 1.5.5
Нет, не из-за этого.
Попробуйте вот такой вариант.
Замените у себя файлы вот этими:
http://visual-t.ru/files/IBCustomDataSet.pashttp://visual-t.ru/files/IBBlob.pasЯ старт транзакции в другое место перенес, так должно быть правильнее.
ps.
строку
ibqPlanNume.UpdateTransaction.StartTransaction;
убрать не забудьте...
Re: Diesel Pascal (Суржи)
Добавлено: 18.06.2014 11:13:55
ogorodov
Все заработало в автомате ... Спасибо ...
Я еще изменения внес в модуля ... может сгодиться
Код: Выделить всё
IBIntf.pas
...
function InternalLoadLibrary: TLibHandle;
var
S, LocalLib, LibPath: string;
begin
Result := NilHandle;
S := LibName;
if (S <> '') then
begin
{$IFDEF LCLSUPPORT}
LibPath := ExtractFilePath(S);
if LibPath = '' then
begin
LocalLib := ExtractFilePath(Application.ExeName) + S;
if FileExists(UTF8ToSys(LocalLib)) then
Result := LoadLibrary(UTF8ToSys(LocalLib))
end else begin
// if FileExists(UTF8ToSys(S)) then
Result:=LoadLibrary(UTF8ToSys(S));
end;
{$ELSE}
// if FileExists(UTF8ToSys(S)) then
Result:=LoadLibrary(UTF8ToSys(S));
{$ENDIF}
end
end;
Без этого программы не подтягивают клиентские библиотеки из системных каталогов ... приходиться ее держать в папке с программой
Re: Diesel Pascal (Суржи)
Добавлено: 18.06.2014 11:23:15
*Rik*
ogorodov писал(а):Все заработало в автомате ... Спасибо ...
Я еще изменения внес в модуля ... может сгодиться
Конечно сгодится. Спасибо.
Re: Diesel Pascal (Суржи)
Добавлено: 25.07.2014 12:40:22
*Rik*
Обновил Дизель-паскаль и компоненты.
Исправлены ошибки в дизайнере форм (в основном проявляющиеся в Linux). В компоненте дизайнер форм добавлено свойство которое управляет способом перемещения компонентов по форме: перемещать сам объект или его контур как в Delphi 7 (у последнего способа выявлен баг, этиология которого пока не до конца ясна, поэтому трудно определиться с лечением).
Улучшения в компоненте xFormsBar - компонента которая эмулирует работу MDI интерфейса.
В движок Дизель-паскаль внедрена поддержка библиотеки uos для воспроизведения аудио файлов.
visual-t.ru
Скриншоты рабочего приложения Дизель-паскаль (используем уже не один месяц, полет нормальный) и дизайнера в Win и Lin:
http://www.visual-t.ru/screenshots.htm
Re: Diesel Pascal (Суржи)
Добавлено: 30.07.2014 12:33:14
ogorodov
Привет Rik
Не подскажеш где нужно исправить исходники IBSQL IBQuery в твоей версии чтобы StartUpdateTransaction выполнялось автоматом при запросах типа update и insert ?
Re: Diesel Pascal (Суржи)
Добавлено: 30.07.2014 14:42:23
*Rik*
ogorodov писал(а):Привет Rik
Не подскажеш где нужно исправить исходники IBSQL IBQuery в твоей версии чтобы StartUpdateTransaction выполнялось автоматом при запросах типа update и insert ?
IBSQL лучше не трогать, на него завязаны все другие компоненты, сам он не может транзакцию запускать, это сделано в компонентах в которые он внедрен...
В IBQuery транзакция и так автоматом стартует, я его вроде как не трогал... Что не так с ним? Опиши что с ним делаешь или пример какой-нибудь дай...
IBQuery не рассчитан на работу с 2мя транзакциями. Ему в свойстве Transaction назначается только одна транзакция, если SQL запросы модифицирующие, то назначается пишущая транзакция..
Re: Diesel Pascal (Суржи)
Добавлено: 04.08.2014 11:59:41
ogorodov
просто при запросах модификации типа ...
Код: Выделить всё
sqlu:=TIBSQL.Create(nil);
try
sqlu.Database:=idbMail;
sqlu.Transaction:=ibtMailUpd;
if not ibtMailUpd.Active then
ibtMailUpd.StartTransaction;
sqlu.SQL.Text:='delete from PLACE...
sqlu.ExecQuery;
sqlu.Transaction.Commit;
finally
sqlu.Free;
end;
необходимо всегда проверять наличие активной транзакции ... не очень удобно иногда бывает
Re: Diesel Pascal (Суржи)
Добавлено: 05.08.2014 06:19:27
sign
Напишите процедуру, в которой будете всё приготавливать, всё проверять.
Код: Выделить всё
procedure Prepare(sqlu: ...; idbMail: ...; ibtMailUpd: ...; const sqlText: string);
begin
sqlu.Database:=idbMail;
sqlu.Transaction:=ibtMailUpd;
if not ibtMailUpd.Active then
ibtMailUpd.StartTransaction;
sqlu.SQL.Text:=sqlText;
end;
Тогда ваш вызовы будут просты:
Код: Выделить всё
sqlu:=TIBSQL.Create(nil);
try
Prepare(sqlu, idbMail, ibtMailUpd, 'delete from PLACE...');
sqlu.ExecQuery;
sqlu.Transaction.Commit;
finally
sqlu.Free;
end;
Re: Diesel Pascal (Суржи)
Добавлено: 05.08.2014 08:50:10
ogorodov
Ну да как вариант ... примерно так и сделал
Re: Diesel Pascal (Суржи)
Добавлено: 16.10.2014 17:54:29
Kemet
Юра, есть планы перевести Дизель Паскаль полностью на UTF8?
Re: Diesel Pascal (Суржи)
Добавлено: 16.10.2014 18:27:12
*Rik*
Kemet писал(а):Юра, есть планы перевести Дизель Паскаль полностью на UTF8?
Дак он вроде и так на UTF-8, или какие-то нюансы возникли? Поясните, а то так непонятно...
Re: Diesel Pascal (Суржи)
Добавлено: 16.10.2014 20:15:52
Kemet
Юра, я пока детально не смотрел, но вот открываю dplex и вижу там конвертацию обрабатываемого скрипта в cp1251
Re: Diesel Pascal (Суржи)
Добавлено: 16.10.2014 21:17:17
*Rik*
Kemet писал(а):Юра, я пока детально не смотрел, но вот открываю dplex и вижу там конвертацию обрабатываемого скрипта в cp1251
Однобайтовые символы парсить проще и быстрее. Я пока не отказался от русской транскрипции языка программирования (хотя на данный момент эта функция отключена), поэтому пока так, строки оттуда возвращаются в UTF-8, поэтому, собственно не вижу большой проблемы(для России, во всяком случае). Парсеры в SynMemo хоть и не переводят код в однобайтовую кодировку, но работать с многобайтовыми символами для задания подсветки синтаксиса, тоже не умеют, поэтому пока загвоздка с русской транскрипцией, не удается сделать подсветку синтаксиса...
В Delphi версии можно было так, тут редактор был свой, самописный:

Если поддержку транскрипции включить, интерпретатор и сейчас русский код прогонит...