Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC - при сохранении данных стал выдавать ошибку / 22 сообщений из 22, страница 1 из 1
16.11.2021, 12:36
    #40112306
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
До этого работало нормально. Сегодня вдруг несколько запросов периодически стали выкидывать эту ошибку, отправляя на Exception.
Где эти параметры посмотреть?
На сервере max_allowed_packet = 16777216
Сам запрос совсем небольшой, состоит в основном из id-шников, цифровых значений и дат.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
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)
...
Рейтинг: 0 / 0
16.11.2021, 13:04
    #40112312
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad,

написано же.
...
Рейтинг: 0 / 0
16.11.2021, 13:43
    #40112323
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
ъъъъъ
svnvlad,

написано же.

Неужели этот запрос занимает 16 мб?
...
Рейтинг: 0 / 0
16.11.2021, 13:47
    #40112325
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad,

какая-нибудь строка.
...
Рейтинг: 0 / 0
16.11.2021, 16:55
    #40112368
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad
Неужели этот запрос занимает 16 мб?
Таким упёртым людям помогать нет желания. Понятно и ежу, что текст запроса до присвоения параметров не может занимать > 16777216, сл-но, надо смотреть, какие значения принимают параметры. Т.е. проблема не в запросе, а в коде получения значений для параметров и их присвоении. Но этого кода вы не соизволили предоставить, сл-но, думайте дальше сами.
...
Рейтинг: 0 / 0
16.11.2021, 17:14
    #40112371
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
А можно и просто поменять СУБД на такую, которая способна пересылать значения
более чем одним пакетом. MySQL не пуп земли...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.11.2021, 18:16
    #40112384
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
Dimitry Sibiryakov
... MySQL не пуп земли...

Кому как... вон, "наталья 87" пишет, что основная проблема у Firebird - хостинг с ним трудно найти... а c MySQL - найти легко. :)
...
Рейтинг: 0 / 0
16.11.2021, 18:37
    #40112385
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
ъъъъъа c MySQL - найти легко. :)

Ага, но при этом он будет shared, без доступа извне и через полгода закроется,
слив твои пароли и базу спамерам. Плавали, знаем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.11.2021, 23:43
    #40112426
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
Gluck99
svnvlad
Неужели этот запрос занимает 16 мб?
Таким упёртым людям помогать нет желания. Понятно и ежу, что текст запроса до присвоения параметров не может занимать > 16777216, сл-но, надо смотреть, какие значения принимают параметры. Т.е. проблема не в запросе, а в коде получения значений для параметров и их присвоении. Но этого кода вы не соизволили предоставить, сл-но, думайте дальше сами.

Я пока не нашел способ увидеть итоговый запрос после присвоения параметров.
...
Рейтинг: 0 / 0
17.11.2021, 01:53
    #40112438
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad
Gluck99
пропущено...
Таким упёртым людям помогать нет желания. Понятно и ежу, что текст запроса до присвоения параметров не может занимать > 16777216, сл-но, надо смотреть, какие значения принимают параметры. Т.е. проблема не в запросе, а в коде получения значений для параметров и их присвоении. Но этого кода вы не соизволили предоставить, сл-но, думайте дальше сами.

Я пока не нашел способ увидеть итоговый запрос после присвоения параметров.
Ёпта, а параметры ты увидеть тоже не можешь? Они сами собой формируются?
Оберни глючное место клиентского кода в try-except, и как поймаешь такое исключение - смотри параметры.
...
Рейтинг: 0 / 0
17.11.2021, 07:02
    #40112441
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
для просмотра запроса и его параметров можно воспользоваться 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

всё прекрасно показывает.
...
Рейтинг: 0 / 0
17.11.2021, 10:36
    #40112460
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
ъъъъъ
svnvlad
пропущено...

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

Ага, сами собой
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
  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
...
Рейтинг: 0 / 0
17.11.2021, 12:43
    #40112507
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad,
Ты что, самостоятельно не можешь вот эту строчку проверить?
Код: pascal
1.
1: Q.ParamByName(FData[I]).LoadFromStream(DataVal.VStream, ftBlob);

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

Наиболее вероятно, что тут какой-то неожидаемо большой блоб грузится. Проверять надо "DataVal", а не финальный запрос.
И научись использовать Format(), спагетти-конкатенация выглядит и читается ужасно.
Код: pascal
1.
2.
3.
Q.SQL.Text := Format('UPDATE `%s` SET ', [FTableName]);
{...}
Error := Format('error: %s'#13'text: %s', [IntToStr(E.HelpContext), E.Message]);


Глупый вопрос: а как проверять DataVal? При трассировке при наводке курсора появляется дебильная всплывающая строка в одну строку, которая уходит за пределы экрана, и увидеть полный текст никак невозможно. А в инспекторе до нее не достучишься из-за глубокой вложенности, и там в итоге ее просто нет. Выводить MessageBox-ом тоже не получается, потому что это отдельный .pas модуль без dfm.
...
Рейтинг: 0 / 0
17.11.2021, 13:14
    #40112523
Близнец1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad

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


Записать в файл например.
...
Рейтинг: 0 / 0
17.11.2021, 13:20
    #40112527
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
[quot svnvlad#22396936]
Gluck99

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


Код: pascal
1.
SizeOf(DataVal.vStream)


?
...
Рейтинг: 0 / 0
17.11.2021, 13:38
    #40112536
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad
Глупый вопрос: а как проверять DataVal? При трассировке при наводке курсора появляется дебильная всплывающая строка в одну строку, которая уходит за пределы экрана, и увидеть полный текст никак невозможно.
Вам нужен не текст, а размер DataVal.VStream.Size
svnvlad
Выводить MessageBox-ом тоже не получается, потому что это отдельный .pas модуль без dfm.
А какая связь между dfm и MessageBox
...
Рейтинг: 0 / 0
17.11.2021, 13:43
    #40112542
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
_Vasilisk_> А какая связь между dfm и MessageBox

Ну, в модуле формы "автоматически" модуль Dialogs в uses прописывается...но это не точно... :)
...
Рейтинг: 0 / 0
17.11.2021, 14:03
    #40112553
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
_Vasilisk_,

...модуль Windows в uses, в смысле...
:)
...
Рейтинг: 0 / 0
17.11.2021, 15:42
    #40112591
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
ъъъъъ,

Dialogs.
Я обычно не вручную прописываю, а ставлю курсор на имя процедуры, нажимаю правой кнопкой мыши, и Refactor -> Find unit... И он сам подставляет в Uses.
Не всегда работает, иногда выдает ошибку, вот я и подумал, что невозможно.
* Не MessageBox, а ShowMessage.
...
Рейтинг: 0 / 0
17.11.2021, 15:59
    #40112598
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
svnvlad,

тогда да, без .dfm никак, никаких вариантов.
...
Рейтинг: 0 / 0
17.11.2021, 17:02
    #40112634
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC - при сохранении данных стал выдавать ошибку
ъъъъъ
Ну, в модуле формы "автоматически" модуль Dialogs в uses прописывается...но это не точно... :)
Шаман!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC - при сохранении данных стал выдавать ошибку / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]