Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 36 37 38 39 40 41 42 43 44 [45]
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9743
CleanupTimeout - пул будет просыпаться кажые CleanupTimeout, что бы заняться удалением (cleanup) ненужных соединений
ExpireTimeout - во время cleanup будут удаляться соединения, которые не использовались в течении ExpireTimeout
10 июн 19, 09:12    [21905669]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
cptngrb
Member

Откуда:
Сообщений: 346
Dmitry Arefiev, если поставить по нулям, то удаляться ничего не будет?
10 июн 19, 14:08    [21905936]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Alex Filipkin
Member

Откуда: Новосибирск
Сообщений: 5
Приветствую.
В Delphi 10.3 (Rio) в FireDAC статическая библиотека sqlite3 на какой версии SQLite запилена?
Интересует с точки зрения поддержки UPSERT (который с 3.24.0 появился).
У меня Seattle, UPSERT не поддерживается. А если динамически цеплять dll то с шифрованием заморочки ;0(
Если есть у кого Rio посмотрите пожалуйста версию библиотеки в FDConnection (DriverName = SQLite) на вкладке Info.
14 авг 19, 05:15    [21948766]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Близнец1980
Member

Откуда:
Сообщений: 78
Alex Filipkin
Приветствую.
В Delphi 10.3 (Rio) в FireDAC статическая библиотека sqlite3 на какой версии SQLite запилена?
Интересует с точки зрения поддержки UPSERT (который с 3.24.0 появился).
У меня Seattle, UPSERT не поддерживается. А если динамически цеплять dll то с шифрованием заморочки ;0(
Если есть у кого Rio посмотрите пожалуйста версию библиотеки в FDConnection (DriverName = SQLite) на вкладке Info.


Delphi 10.3 Version 26.0.34749.6593

+

================================
Connection definition parameters
================================
DriverID=SQLite
================================
FireDAC info
================================
Tool = RAD Studio 10.3
FireDAC = 17.0.0 (Build 93731)
Platform = Windows 32 bit
Defines = FireDAC_NOLOCALE_META;FireDAC_MONITOR
================================
Client info
================================
Loading driver SQLite ...
DLL = <sqlite3_x86.obj statically linked>
Client version = 3.28.0
Compile options = DEFAULT_CACHE_SIZE=8000;DEFAULT_FILE_FORMAT=4;
DEFAULT_JOURNAL_SIZE_LIMIT=1048576;
DEFAULT_PAGE_SIZE=4096;DEFAULT_RECURSIVE_TRIGGERS;
ENABLE_COLUMN_METADATA;ENABLE_DBSTAT_VTAB;
ENABLE_FTS3;ENABLE_FTS3_PARENTHESIS;ENABLE_FTS4;
ENABLE_FTS5;ENABLE_JSON1;ENABLE_RBU;ENABLE_RTREE;
ENABLE_STAT4;HAS_CODEC;OMIT_AUTOINIT;TEMP_STORE=2;
THREADSAFE=2;USE_URI
================================
Session info
================================
Current catalog =
Current schema =
Total changes = 0
Database encoding = UTF8
Encryption mode = <unencrypted>
Cache size = 10000
14 авг 19, 07:36    [21948777]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Alex Filipkin
Member

Откуда: Новосибирск
Сообщений: 5
Близнец1980
DLL = <sqlite3_x86.obj statically linked>
Client version = 3.28.0


Спасибо большое! К сожалению, прикрутить sqlite3_x86.obj от Rio к Seattle не получилось ;0(
Похоже, придётся портировать проект ...
14 авг 19, 12:50    [21949123]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
istrebitel
Member

Откуда:
Сообщений: 11
При назначении обработчика OnUpdateRecord в TFDQuery, перестаёт работать RefreshRecord для вставленных записей.

Стек вызовов
FireDAC.Comp.DataSet.TFDDataSet.InternalFetchNested($7E51A5B0,nil,[foBlobs,foDetails,foData,foClear])
FireDAC.Comp.DataSet.TFDDataSet.RefreshRecordBase([foData,foAfterIns,foClear,foNoIdentity,(out of bound) 10,(out of bound) 12,(out of bound) 13,(out of bound) 14,(out of bound) 15])
FireDAC.Comp.DataSet.TFDDataSet.RefreshRecord(???)
frmTest.TfrmTest_.Button3Click($7E8FBC20)


function TFDDataSet.InternalFetchNested(ARow: TFDDatSRow; ANestedTable: TFDDatSTable;
  ARowOptions: TFDPhysFillRowOptions): Boolean;
...
begin
  UpdateCursorPos;
  Result := False;
  if (ANestedTable <> nil) and (ARow = nil) then
    Exit;
  if ARow = nil then
    ARow := GetRow;
  if (ARow = nil) or (ARow.RowState in [rsInserted, rsDetached]) then // тут отваливается т.к. ARow.RowState = rsInserted
    Exit;


А rsInserted он потому что в

FireDAC.DApt.TFDDAptTableAdapter.ProcessUpdate($7E51A8F0,eaDefault,arInsert,[uoImmediateUpd],[],-1)
FireDAC.DApt.TFDDAptTableAdapter.Update(???,???,[uoImmediateUpd],???)
FireDAC.Comp.Client.TFDCustomTableAdapter.Update($7E51A8F0,eaDefault,[uoImmediateUpd],arInsert)
FireDAC.Comp.Client.TFDAdaptedDataSet.DoProcessUpdateRequest(arInsert,[uoOneMomLock,(out of bound) 6])
FireDAC.Comp.DataSet.TFDDataSet.InternalAddRecord(???,???)
FireDAC.Comp.DataSet.TFDDataSet.InternalPost
Data.DB.TDataSet.CheckOperation((FireDAC.Comp.DataSet.TFDDataSet.InternalPost,$7EDC9900),(nil,nil))
Data.DB.TDataSet.Post
FireDAC.Comp.DataSet.TFDDataSet.Post
frmTest.TfrmTest_.Button5Click($7E8FCB20)


+ TFDDAptTableAdapter.ProcessUpdate
procedure TFDDAptTableAdapter.ProcessUpdate(ARow: TFDDatSRow; var AAction: TFDErrorAction;
  ARequest: TFDUpdateRequest; AUpdRowOptions: TFDUpdateRowOptions;
  AFillRowOptions: TFDPhysFillRowOptions; AColumn: Integer);
begin
...
      GetUpdateHandler.UpdateRow(ARow, ARequest, AUpdRowOptions, AAction); // ARequest = arInsert, AAction = eaApplied т.к. сами вставили запись
      if AAction in [eaRetry, eaDefault] then begin // не выполнится AAction = eaApplied
          ...
          // build command if required
          if oCmd = nil then
            case ARequest of
          ...
            arInsert:
              begin
                if not oUpdOpts.EnableInsert then
                  FDException(Self, [S_FD_LDApt], er_FD_DAptCantInsert, []);
                oCmd := GetUpdateRowCommand(ARow, AUpdRowOptions, arInsert, // т.к. сюда не заходим oCmd = nil
                  [], -1, lCacheUpdateCommand, eCmdFlags);
                if gfFetchGenerator in eCmdFlags then begin
                  ProcessUpdate(ARow, AAction, arFetchGenerators,
                    AUpdRowOptions + [uoDeferredGenGet], [], -1);
                  if not (AAction in [eaApplied, eaDefault]) then
                    oCmd := nil;
                end;
              end;
      end;
...

        else if (ARequest in [arInsert, arUpdate]) then begin
          if oCmd <> nil then begin  // oCmd = nil
            lCustomFetchRow := not (arFetchRow in FGeneratedCommands) and (GetFetchRowCommand <> nil);
            if not lCustomFetchRow and not oMeta.InlineRefresh and (oUpdOpts.RefreshMode <> rmManual) or
               lCustomFetchRow and (oUpdOpts.RefreshMode = rmAll) then begin
              eFillOpts := FDGetFillRowOptions(GetOptions.FetchOptions);
              if ARequest = arInsert then
                Include(eFillOpts, foAfterIns)
              else if ARequest = arUpdate then
                Include(eFillOpts, foAfterUpd);
              if gfIdentityInsert in eCmdFlags then
                Include(eFillOpts, foNoIdentity);
              Fetch(ARow, AAction, -1, eFillOpts);
            end;
            if (ARequest = arInsert) and (gfHasHBlob in eCmdFlags) and
               (oMeta.InsertHBlobMode = hmUpdateAfterInsert) then
              ProcessUpdate(ARow, AAction, arUpdateHBlobs,
                AUpdRowOptions - [uoNoSrvRecord], [], -1)
            else
              AAction := eaApplied;
            if (ARequest = arInsert) and
               ((AAction = eaApplied) or (AAction = eaDefault)) then
              if uoImmediateUpd in AUpdRowOptions then
                ARow.AcceptChanges; // не выполнится, состояние у записи так и останется rsInserted
          end;
        end
...
end;

Как победить?
16 авг 19, 10:45    [21950792]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Atanas
Member

Откуда:
Сообщений: 64
Доброго дня, всем

Потребовалось добыть transaction_id в Firedac, подключенном к Firebird.
Отдельную транзакцию (компонент TFDTransaction) не использую.

  FDConnection1.Connected := true;
  FDQuery1.Open();
  ShowMessage(
  TIBTransaction(FDConnection1.ConnectionIntf.Transaction.CliObj).TransactionID.ToString);

Дает ошибку:
[FireDAC][Phys][FB]invalid transaction handle (expecting explicit transaction start)

Если же пытаюсь через FDQuery1 получить, то тоже ошибка.

  ShowMessage(
  TIBTransaction(FDQuery1.Transaction.TransactionIntf).TransactionID.ToString);

External exception 80000003.
Потому что FDQuery1.Transaction=nil .

Вопрос, как добыть id транзакции, которую поднимает FDConnection?
23 авг 19, 14:32    [21956510]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 36 37 38 39 40 41 42 43 44 [45]
Все форумы / Delphi Ответить