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

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

Откуда:
Сообщений: 390
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

Откуда:
Сообщений: 79
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

Откуда:
Сообщений: 18
При назначении обработчика 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

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

Потребовалось добыть 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]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 176
Подскажите как пользоваться RefreshUnknownRecord?
в документации скудно описано.
22 сен 19, 01:23    [21976133]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
ёёёёё
Member

Откуда:
Сообщений: 1295
Sashaua
Подскажите как пользоваться RefreshUnknownRecord?
в документации скудно описано.

Открыл ты датасет А. Например, загрузил записи из таблички. А потом каким-то способом, не завязанном на датасет А (например, в отдельной форме, со своими компонентами работы с данными) добавил в табличку еще одну запись. А в датасете А ее нет, ведь данные грузились до добавления. А хорошо бы, чтобы была. Вот и вот, вместо перечитывания всего датасета А, просто добавляется еще одна запись. Причем, можно даже данные не все указывать, а только ключевое поле, но при этом попросить фаердак считать нужные данные из таблички.
22 сен 19, 02:38    [21976139]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 176
ёёёёё,

[quot ёёёёё]
Sashaua
Причем, можно даже данные не все указывать, а только ключевое поле, но при этом попросить фаердак считать нужные данные из таблички.

Идею работы я понял.
В каком виде указываются ключевые поля, или поле.
22 сен 19, 10:05    [21976172]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
ёёёёё
Member

Откуда:
Сообщений: 1295
Sashaua,

procedure RefreshUnknownRecord(const AValues: array of Variant;  AReread: Boolean = True; ASetPos: Boolean = True);


aValues - передаешь вариантный массив, количество элементов соответствует количеству полей датасета, также учитываешь позиционное соответствие.
Элемент массива, соответствующий ключевому полю добавленной записи - заполняется значением ключевого поля. Остальные элементы - Null.
aRread - True.
aSetPos - по желанию.

Всё.

ЗЫ: фаердаком я не пользуюсь, просто так написано в документации.
22 сен 19, 15:46    [21976246]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 176
ёёёёё,

Огромное спасибо, вот
ёёёёё
также учитываешь позиционное соответствие
я и не учитывал.
23 сен 19, 00:22    [21976403]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 176
Подскажите ответ еще на один глупый вопрос.
есть выборка
select a.id_model, b.name_model,p.price

from storehouse a

join models b on b.id_model=a.id_model

join price c on c.id_model=a.id_model

where a.id_client=:id_client and c.id_price=:id_price


Есть процедура редактирования записи которая изменяет запись в таблице models поле name_model

Как в FDUpdateSQL.FetchRowSQL надо прописать запрос чтобы перечитать обновленную запись?
Побывал
select a.id_model, b.name_model,p.price

from storehouse a

join models b on b.id_model=a.id_model

join price c on c.id_model=a.id_model

where a.id_client=:id_client and c.id_price=:id_price and d.id_model=:OLD_id_model 
возвращается ошибка после RefreshRecord

Побывал
where a.id_client=:OLD_id_client and c.id_price=:OLD_id_price and d.id_model=:OLD_id_model
возвращается ошибка после RefreshRecord
заранее спасибо
3 окт 19, 20:32    [21986258]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
ёёёёё
Member

Откуда:
Сообщений: 1295
Пробовал, бл?*:!!
3 окт 19, 20:35    [21986263]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Vlad F
Member

Откуда:
Сообщений: 985
Так это же просто своеобразная игра слов.

- Порутчик, а это правда, что вы в молодости были членом суда?
- Ах, молодость, молодость, - членом туда, членом сюда..
3 окт 19, 20:44    [21986271]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
Ну какая у летёхи Молодость?
3 окт 19, 21:35    [21986282]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
Sashaua, про UPDATE|INSERT/DELETE dac должен сам догадаться?
3 окт 19, 21:42    [21986286]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 176
Gator,
UPDATE/INSERT - выполняются в отдельных процедурах.
Если например выборку изменить
select a.id_model, b.name_model

from models a

и в FDUpdateSQL.FetchRowSQL
select a.id_model, b.name_model

from models a where a.id_model=:OLD_id_model


Все прекрасно обновляется после редактирования записи, и RefreshUnknownRecord после добавления записи обновляет добавленную запись.
Вопрос как должен быть сформирован FetchRowSQL когда в выборке несколько таблиц условие выборки (where )
3 окт 19, 22:35    [21986312]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
Sashaua
Вопрос как должен быть сформирован FetchRowSQL когда в выборке несколько таблиц условие выборки (where )
И какую из таблиц курочить? Ни файр, ни другой дак этого знать не может! Никакая СУБД его тупо не поймёт.
3 окт 19, 23:47    [21986329]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2209
ёёёёё
Пробовал, бл?*:!!
и не говори! Картинка с другого сайта.
4 окт 19, 01:13    [21986341]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1395
Осваиваю SQLite и FireDac. Столкнулся с необходимостью передать аргумент функции в SQL запросе как параметр.
Вот такой запрос:
select StrFTime('%d.%m.%Y',Date) as FDate from Test;

а мне надо примерно так:
set @DateFormat='%d.%m.%Y';
select StrFTime(@DateFormat,Date) as FDate from Test;

но так не работает. Как-то можно это побороть?
8 окт 19, 19:35    [21989816]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9767
select StrFTime(:p,Date) as FDate from Test;
9 окт 19, 09:47    [21990090]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 667
Dmitry Arefiev
CleanupTimeout - пул будет просыпаться кажые CleanupTimeout, что бы заняться удалением (cleanup) ненужных соединений
ExpireTimeout - во время cleanup будут удаляться соединения, которые не использовались в течении ExpireTimeout


Добрый день.

Данные параметры могут как то негативно влиять на работу TFDEventAlerter, в совокупности работы с MSSQL?

Непонятно по каким причинам, но похоже TFDEventAlerter рвёт соединение с MSSQL (или "кто-то" помогает в этом), далее происходит длительное восстановление соединения TFDEventAlerter с MSSQL, которое отражается на основном потоке, программа зависает на 30-60 секунд (используется DX 10.3.2). Сеть стабильная, всё по "проводу" (т.е. без вайфая), сеть внутренняя локалка
9 окт 19, 10:58    [21990165]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2209
Дмитрий, я тебе письмецо отправил об изменениях в FireDac для Oracle в 10.3.2. Прокомментируй как время будет
8 ноя 19, 14:30    [22012365]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9767
white_nigger,

я ответил еще 2 ноября.
8 ноя 19, 15:48    [22012434]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 37 38 39 40 41 42 43 44 [45] 46   вперед  Ctrl
Все форумы / Delphi Ответить