Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FireDAC - при сохранении данных стал выдавать ошибку  [new]
svnvlad
Member

Откуда:
Сообщений: 2356
До этого работало нормально. Сегодня вдруг несколько запросов периодически стали выкидывать эту ошибку, отправляя на Exception.
Где эти параметры посмотреть?
На сервере max_allowed_packet = 16777216
Сам запрос совсем небольшой, состоит в основном из id-шников, цифровых значений и дат.
UPDATE `cargo_card` SET
`id`=:id,
`contract_cargo_sub_id`=:contract_cargo_sub_id,
`sender_id`=:sender_id,
`receiver_id`=:receiver_id,
`scales_id`=:scales_id,
`shipment_id`=:shipment_id,
`cargo_marking_id`=:cargo_marking_id,
`object_type`=:object_type,
`cargo_card_number`=:cargo_card_number,
`pauzka`=:pauzka,
`cooperated`=:cooperated,
`weight_tara`=:weight_tara,
`weight_netto`=:weight_netto,
`total_weight_brutto`=:total_weight_brutto,
`weight_netto_doc`=:weight_netto_doc,
`weight_brutto_doc`=:weight_brutto_doc,
`cargo_places_doc`=:cargo_places_doc,
`weight_tara_doc`=:weight_tara_doc,
`weight_netto_fact`=:weight_netto_fact,
`weight_brutto_fact`=:weight_brutto_fact,
`cargo_places_fact`=:cargo_places_fact,
`gtn_number`=:gtn_number,
`gtn_date`=:gtn_date,
`conosament_number`=:conosament_number,
`customs_contract_number`=:customs_contract_number,
`customs_contract_date`=:customs_contract_date,
`customs_declaration`=:customs_declaration,
`additional_conditions`=:additional_conditions,
`fact_cost`=:fact_cost,
`dkd`=:dkd,
`sertificate_number`=:sertificate_number,
`currency_code`=:currency_code,
`finished`=:finished,
`owner_is_changed`=:owner_is_changed,
`created_at`=:created_at,
`updated_at`=:updated_at
WHERE (`id`=573831)


К сообщению приложен файл. Размер - 5Kb


Сообщение было отредактировано: 16 ноя 21, 12:41
16 ноя 21, 12:36    [22396553]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
ъъъъъ
Member

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

написано же.
16 ноя 21, 13:04    [22396563]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
svnvlad
Member

Откуда:
Сообщений: 2356
ъъъъъ
svnvlad,

написано же.

Неужели этот запрос занимает 16 мб?
16 ноя 21, 13:43    [22396581]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
ъъъъъ
Member

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

какая-нибудь строка.
16 ноя 21, 13:47    [22396583]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1191
svnvlad
Неужели этот запрос занимает 16 мб?
Таким упёртым людям помогать нет желания. Понятно и ежу, что текст запроса до присвоения параметров не может занимать > 16777216, сл-но, надо смотреть, какие значения принимают параметры. Т.е. проблема не в запросе, а в коде получения значений для параметров и их присвоении. Но этого кода вы не соизволили предоставить, сл-но, думайте дальше сами.
16 ноя 21, 16:55    [22396644]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

А можно и просто поменять СУБД на такую, которая способна пересылать значения
более чем одним пакетом. MySQL не пуп земли...

Posted via ActualForum NNTP Server 1.5

16 ноя 21, 17:14    [22396648]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2656
Dimitry Sibiryakov
... MySQL не пуп земли...

Кому как... вон, "наталья 87" пишет, что основная проблема у Firebird - хостинг с ним трудно найти... а c MySQL - найти легко. :)
16 ноя 21, 18:16    [22396663]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

ъъъъъ
а c MySQL - найти легко. :)

Ага, но при этом он будет shared, без доступа извне и через полгода закроется,
слив твои пароли и базу спамерам. Плавали, знаем.

Posted via ActualForum NNTP Server 1.5

16 ноя 21, 18:37    [22396667]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
svnvlad
Member

Откуда:
Сообщений: 2356
Gluck99
svnvlad
Неужели этот запрос занимает 16 мб?
Таким упёртым людям помогать нет желания. Понятно и ежу, что текст запроса до присвоения параметров не может занимать > 16777216, сл-но, надо смотреть, какие значения принимают параметры. Т.е. проблема не в запросе, а в коде получения значений для параметров и их присвоении. Но этого кода вы не соизволили предоставить, сл-но, думайте дальше сами.

Я пока не нашел способ увидеть итоговый запрос после присвоения параметров.
16 ноя 21, 23:43    [22396742]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2656
svnvlad
Gluck99
пропущено...
Таким упёртым людям помогать нет желания. Понятно и ежу, что текст запроса до присвоения параметров не может занимать > 16777216, сл-но, надо смотреть, какие значения принимают параметры. Т.е. проблема не в запросе, а в коде получения значений для параметров и их присвоении. Но этого кода вы не соизволили предоставить, сл-но, думайте дальше сами.

Я пока не нашел способ увидеть итоговый запрос после присвоения параметров.
Ёпта, а параметры ты увидеть тоже не можешь? Они сами собой формируются?
Оберни глючное место клиентского кода в try-except, и как поймаешь такое исключение - смотри параметры.
17 ноя 21, 01:53    [22396791]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
Kast2K
Member

Откуда: Санкт-Петербург
Сообщений: 526
для просмотра запроса и его параметров можно воспользоваться Firedac Monitor

Инструкция:
https://coderoad.ru/21915973/FireDAC-%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C-SQL-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D0%B0

всё прекрасно показывает.
17 ноя 21, 07:02    [22396798]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
svnvlad
Member

Откуда:
Сообщений: 2356
ъъъъъ
svnvlad
пропущено...

Я пока не нашел способ увидеть итоговый запрос после присвоения параметров.
Ёпта, а параметры ты увидеть тоже не можешь? Они сами собой формируются?
Оберни глючное место клиентского кода в try-except, и как поймаешь такое исключение - смотри параметры.

Ага, сами собой
  if FFind then
    begin // Найдено
      Q.SQL.Text := 'UPDATE `' + FTableName + '` SET';
      for I := 0 to FData.Count - 1 do
        begin
          if I < FData.Count-1 then
            s := ','
          else
            s := '';
          Q.SQL.Add('`' + FData[I] + '`=:' + FData[I] + s);
        end;

//      Q.SQL.Add(',`updated_at`=''' + updated_at + '''');

      if FWhere <> '' then
        Q.SQL.Add('WHERE ' + FWhere);

      for I := 0 to FData.Count - 1 do
        begin
          DataVal := PQValue(FData.Objects[I])^;
          case DataVal.TypeVal of
            0: begin
                 Q.ParamByName(FData[I]).AsString := DataVal.VString;
                 if DataVal.VString = '' then
                   Q.ParamByName(FData[I]).Value := Null;
               end;
            1: Q.ParamByName(FData[I]).LoadFromStream(DataVal.VStream, ftBlob);
            2: Q.ParamByName(FData[I]).AsDateTime := DataVal.VDateTime;
          end;
        end;

      try
        if not Q.Prepared then
          Q.Prepare;
//                 q.SQL.SaveToFile('e:\sql.txt');
        Q.ExecSQL;
        if rec_id > 0 then
          Result := rec_id
        else
          Result := 1;
      except
        on E: Exception do
          Error := ('error: ' + IntToStr(E.HelpContext) + ' text: ' + E.Message);

      end;
      Q.Close;
    end
17 ноя 21, 10:36    [22396833]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1191
svnvlad,
Ты что, самостоятельно не можешь вот эту строчку проверить?
1: Q.ParamByName(FData[I]).LoadFromStream(DataVal.VStream, ftBlob);
Наиболее вероятно, что тут какой-то неожидаемо большой блоб грузится. Проверять надо "DataVal", а не финальный запрос.
И научись использовать Format(), спагетти-конкатенация выглядит и читается ужасно.
Q.SQL.Text := Format('UPDATE `%s` SET ', [FTableName]);
{...}
Error := Format('error: %s'#13'text: %s', [IntToStr(E.HelpContext), E.Message]);
17 ноя 21, 12:43    [22396917]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
svnvlad
Member

Откуда:
Сообщений: 2356
Gluck99
svnvlad,
Ты что, самостоятельно не можешь вот эту строчку проверить?
1: Q.ParamByName(FData[I]).LoadFromStream(DataVal.VStream, ftBlob);
Наиболее вероятно, что тут какой-то неожидаемо большой блоб грузится. Проверять надо "DataVal", а не финальный запрос.
И научись использовать Format(), спагетти-конкатенация выглядит и читается ужасно.
Q.SQL.Text := Format('UPDATE `%s` SET ', [FTableName]);
{...}
Error := Format('error: %s'#13'text: %s', [IntToStr(E.HelpContext), E.Message]);

Глупый вопрос: а как проверять DataVal? При трассировке при наводке курсора появляется дебильная всплывающая строка в одну строку, которая уходит за пределы экрана, и увидеть полный текст никак невозможно. А в инспекторе до нее не достучишься из-за глубокой вложенности, и там в итоге ее просто нет. Выводить MessageBox-ом тоже не получается, потому что это отдельный .pas модуль без dfm.
17 ноя 21, 13:10    [22396936]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
Близнец1980
Member

Откуда:
Сообщений: 101
svnvlad

Глупый вопрос: а как проверять DataVal? При трассировке при наводке курсора появляется дебильная всплывающая строка в одну строку, которая уходит за пределы экрана, и увидеть полный текст никак невозможно. А в инспекторе до нее не достучишься из-за глубокой вложенности, и там в итоге ее просто нет. Выводить MessageBox-ом тоже не получается, потому что это отдельный .pas модуль без dfm.


Записать в файл например.
17 ноя 21, 13:14    [22396940]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
Kast2K
Member

Откуда: Санкт-Петербург
Сообщений: 526
[quot svnvlad#22396936]
Gluck99

Глупый вопрос: а как проверять DataVal? При трассировке при наводке курсора появляется дебильная всплывающая строка в одну строку, которая уходит за пределы экрана, и увидеть полный текст никак невозможно. А в инспекторе до нее не достучишься из-за глубокой вложенности, и там в итоге ее просто нет. Выводить MessageBox-ом тоже не получается, потому что это отдельный .pas модуль без dfm.


SizeOf(DataVal.vStream)

?
17 ноя 21, 13:20    [22396947]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13358
svnvlad
Глупый вопрос: а как проверять DataVal? При трассировке при наводке курсора появляется дебильная всплывающая строка в одну строку, которая уходит за пределы экрана, и увидеть полный текст никак невозможно.
Вам нужен не текст, а размер DataVal.VStream.Size
svnvlad
Выводить MessageBox-ом тоже не получается, потому что это отдельный .pas модуль без dfm.
А какая связь между dfm и MessageBox
17 ноя 21, 13:38    [22396965]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2656
_Vasilisk_> А какая связь между dfm и MessageBox

Ну, в модуле формы "автоматически" модуль Dialogs в uses прописывается...но это не точно... :)
17 ноя 21, 13:43    [22396971]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
ъъъъъ
Member

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

...модуль Windows в uses, в смысле...
:)
17 ноя 21, 14:03    [22396986]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
svnvlad
Member

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

Dialogs.
Я обычно не вручную прописываю, а ставлю курсор на имя процедуры, нажимаю правой кнопкой мыши, и Refactor -> Find unit... И он сам подставляет в Uses.
Не всегда работает, иногда выдает ошибку, вот я и подумал, что невозможно.
* Не MessageBox, а ShowMessage.

Сообщение было отредактировано: 17 ноя 21, 15:44
17 ноя 21, 15:42    [22397043]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
ъъъъъ
Member

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

тогда да, без .dfm никак, никаких вариантов.
17 ноя 21, 15:59    [22397057]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - при сохранении данных стал выдавать ошибку  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13358
ъъъъъ
Ну, в модуле формы "автоматически" модуль Dialogs в uses прописывается...но это не точно... :)
Шаман!
17 ноя 21, 17:02    [22397109]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить