Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC. Работа с FDScript / 20 сообщений из 20, страница 1 из 1
02.03.2021, 11:03
    #40049763
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
Есть желание выполнять произвольные фрагменты SQL-кода.
Обычный FDQuery выполняет только один оператор.
FDScript нормально выполняет несколько операторов. Но..
Непонятно, как получить кол-во RowAffected.
Spool выводит только значение последнего оператора, а хотелось бы отдельно по всем операторам.
Непонятно, как получать SQL-код каждого шага. Можно ли для этого заюзать FDScriptParser ?

Хотелось бы по каждому выполненному оператору получать что-то типа:

update .....
(affected 10 rows, 20ms)

delete from .....
(affected 2 rows, 10ms)
...
Рейтинг: 0 / 0
02.03.2021, 11:08
    #40049766
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
...
Рейтинг: 0 / 0
02.03.2021, 11:27
    #40049772
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
Я не понял, как он работает.
Он выполняет сразу все операторы.
Т.е. выполняется аналогично ExecuteAll.
...
Рейтинг: 0 / 0
02.03.2021, 11:52
    #40049779
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
02.03.2021 11:27, L_argo пишет:
> Я не понял, как он работает.
> Он выполняет сразу все операторы.
> Т.е. выполняется аналогично ExecuteAll.

а ты терминатор настроил?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.03.2021, 11:57
    #40049780
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
Мимопроходящий

02.03.2021 11:27, L_argo пишет:
> Я не понял, как он работает.
> Он выполняет сразу все операторы.
> Т.е. выполняется аналогично ExecuteAll.

а ты терминатор настроил?
Настройки терминатора ни как на это не повлияли. И в доке сказано, что терминатор необязателен.

Документация у Эмбы вааще идиотская.

Как получить текущий фрагмент выполняемого SQL-кода (тот самый Step) ?
...
Рейтинг: 0 / 0
02.03.2021, 11:59
    #40049783
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
02.03.2021 11:57, L_argo пишет:
> Как получить текущий фрагмент выполняемого SQL-кода (тот самый Step) ?

жди, пока объявится родитель всего этого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.03.2021, 12:06
    #40049784
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
L_argo
Он выполняет сразу все операторы.
Т.е. выполняется аналогично ExecuteAll.
Что показывает отладка?
L_argo
Как получить текущий фрагмент выполняемого SQL-кода (тот самый Step) ?
Вам не нужно его получать. Компонент сам разберет скрипт на операторы. Максимум, что может понадобиться сделать - это перед выполнением добавить
Код: pascal
1.
FDScript.Position := 0;


Весь код должен быть таким
Код: pascal
1.
2.
3.
4.
5.
6.
FDScript.LoadScript(...);
FDScript.Position := 0;
while not FDScript.Eof do begin
  FDScript.ExecuteStep;
  .......
end;
...
Рейтинг: 0 / 0
02.03.2021, 12:09
    #40049787
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
L_argo,

Может у вас в скрипте ошибка? Если он не большой, то сбросьте сюда под кат. Если большой, то сбросьте первые и последние 10 строк скрипта.
...
Рейтинг: 0 / 0
02.03.2021, 14:19
    #40049830
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
_Vasilisk_
L_argo,

Может у вас в скрипте ошибка? Если он не большой, то сбросьте сюда под кат. Если большой, то сбросьте первые и последние 10 строк скрипта.
В скрипте ошибки нет. Он крайне прост и нормально выполняется.

Проблема в возможности вывести инфу про выполнение каждого оператора.
...
Рейтинг: 0 / 0
02.03.2021, 14:22
    #40049832
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
L_argo
В скрипте ошибки нет.
Ага. Ошибка где угодно, только не в вашем коде
L_argo
Он крайне прост и нормально выполняется.
Ну так покажите его
L_argo
Проблема в возможности вывести инфу про выполнение каждого оператора.
Проблема в вашем неумении/нежелании читать, что вам пишут
...
Рейтинг: 0 / 0
02.03.2021, 18:57
    #40049974
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
Ну так покажите егоОК.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
update city
set statusid = statusid+1  
where id = 0;

update city
set statusid = statusid+2
where id = 1;  

update city
set statusid = statusid+3  
where id = 2;

помогло ? :)
Как получить по этому скрипту такой результат:

affected 1 row
affected 1 row
affected 1 row

?
...
Рейтинг: 0 / 0
02.03.2021, 19:10
    #40049981
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
И FDScript.Position := 0
нельзя вот так присвоить. т.к. это TPoint;

SQL-код попадает в FDScript так (из TMemo) :

scRun.SQLScripts.Add.SQL.text := mem.SelText
...
Рейтинг: 0 / 0
02.03.2021, 19:11
    #40049983
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
...
Рейтинг: 0 / 0
02.03.2021, 19:16
    #40049988
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
...
Рейтинг: 0 / 0
02.03.2021, 19:18
    #40049989
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
Ну так осталась сущая мелочь: там же посмотреть как этот feedback ловить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.03.2021, 19:38
    #40049998
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
Dimitry Sibiryakov
Ну так осталась сущая мелочь: там же посмотреть как этот feedback ловить.
Это просто теоретическое размышление ?
Куда именно смотреть ?

У меня 3 оператора отрабатывают за один step.
И в ответе по OnSpoolPut все три оператора вместе. И кол-во строк (affected) указано одно от последнего оператора.
...
Рейтинг: 0 / 0
02.03.2021, 19:50
    #40050006
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
а эта часть документации не поможет?

Getting Feedback
To create an execution log, you can enable spooling as from Delphi code, by using the SpoolOutput and SpoolFileName options, as from a SQL script using the <code>SPOol <name></code> or <code>OUTput <name></code> commands. The content of the spool output is controlled by the EchoCommands, FeedbackCommands, AutoPrintParams, FeedbackScript, IgnoreError, Timing, ColumnHeadings, PageSize, ServerOutput options.

You can use the TFDGUIxScriptDialog component to allow a script execution engine to communicate with an end-user using a dialog. To interact with the end-user TFDScript, use events such as OnConsoleGet, OnConsolePut, OnGetText, OnPause, etc. this dialog provides a standard implementation for these events. To show an execution progress, TFDScript needs to know the total length of all scripts to be executed. For that, call the ValidateAll method before starting a script execution.
...
Рейтинг: 0 / 0
02.03.2021, 20:08
    #40050011
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
энди
а эта часть документации не поможет?

Getting Feedback
To create an execution log, you can enable spooling as from Delphi code, by using the SpoolOutput and SpoolFileName options, as from a SQL script using the <code>SPOol <name></code> or <code>OUTput <name></code> commands. The content of the spool output is controlled by the EchoCommands, FeedbackCommands, AutoPrintParams, FeedbackScript, IgnoreError, Timing, ColumnHeadings, PageSize, ServerOutput options.

You can use the TFDGUIxScriptDialog component to allow a script execution engine to communicate with an end-user using a dialog. To interact with the end-user TFDScript, use events such as OnConsoleGet, OnConsolePut, OnGetText, OnPause, etc. this dialog provides a standard implementation for these events. To show an execution progress, TFDScript needs to know the total length of all scripts to be executed. For that, call the ValidateAll method before starting a script execution.
Это давно прочитано.
...
Рейтинг: 0 / 0
02.03.2021, 22:31
    #40050048
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
L_argo,

Так и что возвращается в событии OnSpoolPut ?
...
Рейтинг: 0 / 0
04.03.2021, 10:59
    #40050566
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC. Работа с FDScript
Cobalt747
L_argo,

Так и что возвращается в событии OnSpoolPut ?
И по ExecuteAll и ExecuteStep однократно все 3 оператора. А счетчик обработанных строк -результат от последнего оператора и время выполнения всего батча.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC. Работа с FDScript / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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