Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now / 25 сообщений из 52, страница 1 из 3
23.04.2020, 00:09
    #39950244
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Всем привет!

Когда-то уже сталкивался с подобной проблемой и пришлось переходить на ZEOS компоненты. Прошло более 5 лет и вновь пришлось столкнуться с MySQL, но теперь уже использую компоненты FireDAC и хотелось бы на них и остаться. Приложение работает с хранимыми процедурами. Пытаюсь запустить вот так:

Код: pascal
1.
2.
DM.FDStoredProc1.Close;
DM.FDStoredProc1.ExecProc('US_INSERT', ['Test', 'TestPass', '12345', 'Codeword']);



Первый раз она отработает и всё ок, но второй запуск вернет ошибку: "Commands out of sync; you can't run this command now". Любой запуск процедуры, которая возвращает результат. Погуглил и выяснил, якобы не чистится результат предыдущего результата и с этим связана ошибка. Тогда вопрос, а как его скинуть?
...
Рейтинг: 0 / 0
23.04.2020, 00:26
    #39950247
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Чисто из любопытства: ты и двери всегда закрываешь прежде чем выйти из дома?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.04.2020, 00:34
    #39950251
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Чисто из любопытства: ты и двери всегда закрываешь прежде чем выйти из дома?


Хорошо. Я думаю так будет понятнее. Это предыдущий запрос.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function LoginCheck(Login: string): Integer;
begin

    DM.FDStoredProc1.Close;
    DM.FDStoredProc1.Open('US_SELECT', [Login]);
    Result := DM.FDStoredProc1.RecordCount;

end;



А прописывая всегда Close, я никогда не получу ошибку, если где-то компонент остался открытым. Так как для все подобных запросов я использую один. Которые не требуется для результатирующего постоянного набора. Проще говоря, выполнять всякие вставки, апдейты, удаления и запрос статусов я всегда делаю через один квери.
...
Рейтинг: 0 / 0
23.04.2020, 00:47
    #39950259
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.04.2020, 01:17
    #39950266
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.


Вероятность намного выше, что ты его забудешь где-то закрыть. Нежели начать код с его закрытия. По крайней мере это нормальная практика и в примерах она как раз и демонстрируется.
...
Рейтинг: 0 / 0
23.04.2020, 01:24
    #39950267
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.


Хотя может ты и прав и нужно закрывать запрос сразу после получения результата, чтобы он не "висел" открытым до следующего старта. Но это уже ладно... Проблема у меня сейчас совершенно с другим связана. Прошло более 5 лет, а проблема актуальна до сих пор)
...
Рейтинг: 0 / 0
23.04.2020, 01:50
    #39950272
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Евгений СтронгВероятность намного выше, что ты его забудешь где-то закрыть. Нежели начать код с его закрытия.
это, типа, новый стиль программирования? Объект перед созданием надо уничтожить?
Вы бы тогда лучше писали что-то типа
Код: pascal
1.
2.
if DM.FDStoredProc1.isOpen then
 Achtung!;


чтобы найти места, в которых вы свои датасеты не закрываете вовремя.
...
Рейтинг: 0 / 0
23.04.2020, 04:38
    #39950277
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.

Не знаю как в энтих ваших фиредаках, а в фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.
Независимо от того, открыт он был или нет.
...
Рейтинг: 0 / 0
23.04.2020, 09:31
    #39950316
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
kdv
Евгений СтронгВероятность намного выше, что ты его забудешь где-то закрыть. Нежели начать код с его закрытия.

это, типа, новый стиль программирования? Объект перед созданием надо уничтожить?
Вы бы тогда лучше писали что-то типа
Код: pascal
1.
2.
if DM.FDStoredProc1.isOpen then
 Achtung!;


чтобы найти места, в которых вы свои датасеты не закрываете вовремя.

Это не новый стиль - это правильный стиль! И не понятна попытка умничать тут совсем не к месту, не зная даже кода, который написан перед закрытие. Форум превратился в каких-то осуждающих бабок, вместо того, чтобы ответить по теме. Вот тебе кусок из примера:

Свойство SQL - вероятно, самая важная часть TQuery. Доступ к этому свойству происходит либо через Инспектор Объектов во время конструирования проекта (design time), или программно во время выполнения программы (run time).
Интересней, конечно, получить доступ к свойству SQL во время выполнения, чтобы динамически изменять запрос. Например, если требуется выполнить три SQL запроса, то не надо размещать три компонента TQuery на форме. Вместо этого можно разместить один и просто изменять свойство SQL три раза. Наиболее эффективный, простой и мощный способ - сделать это через параметризованные запросы, которые будут объяснены в следующей части. Однако, сначала исследуем основные особенности свойства SQL, а потом рассмотрим более сложные темы, типа запросов с параметрами.

Свойство SQL имеет тип TStrings, который означает что это ряд строк, сохраняемых в списке. Список действует также, как и массив, но, фактически, это специальный класс с собственными уникальными возможностями. В следующих нескольких абзацах будут рассмотрены наиболее часто используемые свойства.

При программном использовании TQuery, рекомендуется сначала закрыть текущий запрос и очистить список строк в свойстве SQL:

Query1.Close;

Query1.SQL.Clear;


Обратите внимание, что всегда можно “безопасно” вызвать Close. Даже в том случае, если запрос уже закрыт, исключительная ситуация генерироваться не будет.
...
Рейтинг: 0 / 0
23.04.2020, 09:32
    #39950318
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
fraks
Dimitry Sibiryakov

пропущено...

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.

Не знаю как в энтих ваших фиредаках, а в фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.
Независимо от того, открыт он был или нет.


Я не знаю, какие они там получают ошибки. У меня всё прекрасно работает.
...
Рейтинг: 0 / 0
23.04.2020, 12:34
    #39950392
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
fraksв фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.

Они со своим неестественным интеллектом прогнулись под дерьмопримеры, который "везде".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.04.2020, 15:02
    #39950518
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

fraksв фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.

Они со своим неестественным интеллектом прогнулись под дерьмопримеры, который "везде".


Попробовал с компонентами FireDAC вот такую вещь:

Код: pascal
1.
2.
3.
DM.qrySQLNEW.Open('select LOGIN from US where LOGIN = :LOGIN', [Login]);
DM.qrySQLNEW.ExecSQL(sql, [Login, General.MD5Hash(Pass), General.VERSION, Codeword]);
DM.qrySQLNEW.Open('select LOGIN from US where LOGIN = :LOGIN', [Login]);



И вообще никаких Close не надо. Видимо под капотом само всё происходит. И это радует.
...
Рейтинг: 0 / 0
23.04.2020, 15:59
    #39950566
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.04.2020, 18:24
    #39950648
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.


Да, спасибо за совет. Обязательно попробую. Сейчас это актуально.
...
Рейтинг: 0 / 0
29.04.2020, 11:22
    #39952757
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Евгений Стронг
второй запуск вернет ошибку: "Commands out of sync; you can't run this command now".
MySQL не разрешает в одном соединении второй селективный запрос, если для первого с сервера еще не забраны данные
...
Рейтинг: 0 / 0
30.04.2020, 12:31
    #39953246
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.

В UIB, например, несколько Open подряд без Close - вообще штатная операция, когда надо выполнить несколько одинаковых запросов, с разными параметрами.
...
Рейтинг: 0 / 0
30.04.2020, 12:39
    #39953250
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
alekcvp
Dimitry Sibiryakov

Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.

В UIB, например, несколько Open подряд без Close - вообще штатная операция, когда надо выполнить несколько одинаковых запросов, с разными параметрами.


Да он какой-то обиженный. Не понятно, по какой причине прицепился к CLose и Open. Совершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа. Это рекомендация самих разработчиков. А в FireDac сделали вообще прикольно и синтаксического сахара подкинули. Теперь можно в одной строке сразу запустить запрос с параметрами, просто открыв запрос.
...
Рейтинг: 0 / 0
30.04.2020, 12:59
    #39953253
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Евгений СтронгСовершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа.
Это рекомендация самих разработчиков.

А можно ссылку на эту рекомендацию?

Так делают когда датасет привязан к гриду и прочей дб-авари. Но это явно не твой случай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.04.2020, 13:13
    #39953260
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Евгений СтронгСовершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа.
Это рекомендация самих разработчиков.

А можно ссылку на эту рекомендацию?

Так делают когда датасет привязан к гриду и прочей дб-авари. Но это явно не твой случай.


Да это вообще был пример. Я пробовал по-разному. Хотел избежать ошибки. Как решать проблему, с помощью компонентов, так и не понятно. Я уже давно всё переписал на прямой доступ без хранимой и забил на это. Как показывает практика - это и проще. Хранимки оправданы при крупных корпоративных решениях.
...
Рейтинг: 0 / 0
30.04.2020, 13:16
    #39953261
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Евгений СтронгЯ пробовал по-разному. Хотел избежать ошибки. Как решать проблему, с помощью компонентов,
так и не понятно.

Открыть документацию по MySQL API чтобы выяснить когда такая ошибка может возникать не
предлагать? Тогда остаётся только одно: перестать-таки повторно использовать компоненты, а
для выполнения запросов использовать специальный метод TFDConneciton.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.04.2020, 13:28
    #39953264
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Dimitry Sibiryakov

Евгений СтронгЯ пробовал по-разному. Хотел избежать ошибки. Как решать проблему, с помощью компонентов,
так и не понятно.

Открыть документацию по MySQL API чтобы выяснить когда такая ошибка может возникать не
предлагать? Тогда остаётся только одно: перестать-таки повторно использовать компоненты, а
для выполнения запросов использовать специальный метод TFDConneciton.


Читал документацию о том, что проблема возникает по причине того, что сервак не может отдать несколько запросов в рамках одного подключения. И там есть специальный метод IP, который сбрасывает коннект. А на стороне клиента получается надо будет передергивать коннект. Решение мягко скажем не хорошее. Тут постоянный идет выбор между MSSQL и MySQL. У меня по крайней мере. MSSQL нравится, но VPS дороговато выходит по сравнению с Linux. Поэтому и приходится использовать MySQL, но тут свои "грабли". В общем оптимальным получилось делать всё с помощью запросов из клиента.
...
Рейтинг: 0 / 0
30.04.2020, 13:47
    #39953275
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Евгений Стронг
Совершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа. Это рекомендация самих разработчиков.
Евгений Стронг
И там есть специальный метод IP, который сбрасывает коннект.
Да где же вы такие рекомендации находите?

Установите в свойствах подключения ResultMode: Store
...
Рейтинг: 0 / 0
30.04.2020, 13:53
    #39953276
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
_Vasilisk_
Установите в свойствах подключения ResultMode: Store
...
Рейтинг: 0 / 0
30.04.2020, 13:53
    #39953277
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
_Vasilisk_
Евгений Стронг
Совершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа. Это рекомендация самих разработчиков.
Евгений Стронг
И там есть специальный метод IP, который сбрасывает коннект.
Да где же вы такие рекомендации находите?

Установите в свойствах подключения ResultMode: Store


Спасибо. На будущее буду знать. Но постараюсь обходить хранимки стороной) По крайней мере на MySQL.
...
Рейтинг: 0 / 0
30.04.2020, 13:54
    #39953278
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Евгений Стронг
Но постараюсь обходить хранимки стороной)
Не в хранимках дело. Лучше постарайтесь читать документацию
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now / 25 сообщений из 52, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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