powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TADOQuery.ExecSQL как дождаться выполнения запроса
17 сообщений из 17, страница 1 из 1
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433442
FrankBY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько не бился - никак.

Код: pascal
1.
2.
3.
4.
5.
  SQL := 'UPDATE TTLIST SET SUMMA = "' + cxTextEdit2.Text + '" WHERE ID = ' + IntToStr (ID);
  Form1.RUN.Active := False;
  Form1.RUN.SQL.Clear;
  Form1.RUN.SQL.Add(SQL);
  Form1.RUN.ExecSQL;



Запрос выполняется, данные пишутся, но в гриде сразу их не вижу.

В итоге вот такое извращение:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  While Not FLAG Do Begin
    DTA.QL.Active := False;
    DTA.QL.Active := True;
    DTA.QL.Locate('ID', IntToStr (ID), []);
    Caption := 'OK';
    If DTA.QL.FieldValues['SUMMA'] = StrToFloat (cxTextEdit2.Text) Then FLAG := True;
    Sleep (500);
  End;



Соответственно в других запросах, изменяющие данные, приходится писать цикл который отлавливает изменения.

ПОМОГИТЕ!

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433472
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос выполняется, данные пишутся, но в гриде сразу их не вижу.Ну откуда им там взяться ? Грид обновится, когда его датасет будет перечитан заново. Весь или только в текущей строке.
Это популярная проблема: после апдейта увидеть все возможные изменения во всех открытых датасетах.

Нужен навороченный алгоритм, кот. скажет что и где надо передернуть. А где не надо.
Готовых рецептов тут нет. Все решения по своему специфичны.

Старайтесь не показывать одновременно много датасетов, кот. потом придется передергивать по каждому чиху.
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433477
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankBY...

ПОМОГИТЕ!

1) авторЗапрос выполняется, данные пишутся, но в гриде сразу их не вижу. А с какого перепугу вы их там увидите без переоткрытия?
2)авторВ итоге вот такое извращение: - автор If DTA.QL.FieldValues['SUMMA'] = StrToFloat (cxTextEdit2.Text) спасибо: поржал. От души спасибо!!!

З.ы. ТС, ты определись: что у тебя есть, и что ты на выходе получить хочешь...
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433479
FrankBY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV,

Ну откуда им там взяться ? Грид обновится, когда его датасет будет перечитан заново. Весь или только в текущей строке.

Так я же переоткрываю запрос:

DTA.QL.Active := False;
DTA.QL.Active := True;

Но в гриде сразу нет данных, а только через секунду-две...
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433481
FrankBY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,

If DTA.QL.FieldValues['SUMMA'] = StrToFloat (cxTextEdit2.Text)


а что с этим не так... всё ж работает
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433491
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если обновить результат нужно только в одной строке датасета, то для этого у некот. умных датасетов (SDAC, FireDAC) есть соотв. методы. И тогда будет быстро.
Для АДО тоже вроде как можно перечитать одну строку, но мои эксперименты с АДО как-то неоднозначно закончились. Не помню подробностей. Давно было. :)
АДО - геморный ацтой.
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433493
FrankBY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV,

Уже столько всего перерыл - так и не нашёл решения...
Дело даже не в том сколько строк перечитывать, а когда.
Как узнать, что данные уже попали в таблицу после запроса на добавление/удаление/редактирование
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433495
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankBYLSV,

Уже столько всего перерыл - так и не нашёл решения...
Дело даже не в том сколько строк перечитывать, а когда.
Как узнать, что данные уже попали в таблицу после запроса на добавление/удаление/редактированиеВообще то данные уже там.
Правда помняцца мне глюки с интербейсом (оч. давно), когда мгновенное перезачитывание на видело новых данных. Но через пару сек. уже видело. Бред конечно....
Это не ваш случай ?

зы: интербейс и его форки тоже говно.... :)
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433496
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankBYGerasimenko,

If DTA.QL.FieldValues['SUMMA'] = StrToFloat (cxTextEdit2.Text)


а что с этим не так... всё ж работает

1) DTA.QL.FieldValues['SUMMA'] - Variant, автоматические преобразования типа в приведенном контексте к вещественному типу
2) StrToFloat (cxTextEdit2.Text) - явное преобразование строки к вещественному типу http://programmersclub.ru/strtofloat/
3) cxTextEdit2.Text работает.... А если поменять в региональных настройках разделитель (или вы используете SysUtils.DateSeparator) или в самом cxTextEdit2.Text
4) сравнение двух вещественных типов, полученных разными способами не вызывает оптимизма
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433503
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankBYLSV,

Уже столько всего перерыл - так и не нашёл решения...
Дело даже не в том сколько строк перечитывать, а когда.
Как узнать, что данные уже попали в таблицу после запроса на добавление/удаление/редактирование
TDataSet.DisableControls / TDataSet.EnableControls конечно используются?
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433511
Noskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FrankBYLSV,

Уже столько всего перерыл - так и не нашёл решения...
Дело даже не в том сколько строк перечитывать, а когда.
Как узнать, что данные уже попали в таблицу после запроса на добавление/удаление/редактирование
База какая? Не MS Access случаем?
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433521
FrankBY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Noskov,

1) DTA.QL.FieldValues['SUMMA'] - Variant, автоматические преобразования типа в приведенном контексте к вещественному типу
2) StrToFloat (cxTextEdit2.Text) - явное преобразование строки к вещественному типу http://programmersclub.ru/strtofloat/
3) cxTextEdit2.Text работает.... А если поменять в региональных настройках разделитель (или вы используете SysUtils.DateSeparator) или в самом cxTextEdit2.Text
4) сравнение двух вещественных типов, полученных разными способами не вызывает оптимизма
--
С этим согласен. Но работает, и пока проблем не наблюдалось...
Будет время исправлю.


TDataSet.DisableControls / TDataSet.EnableControls конечно используются?
--
Датасет не использую...
В примере DTA.QL - это запрос TQuery через TADOConnection


База какая? Не MS Access случаем?
--
Именно она
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433523
FrankBY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV,

Вообще то данные уже там.
Правда помняцца мне глюки с интербейсом (оч. давно), когда мгновенное перезачитывание на видело новых данных. Но через пару сек. уже видело. Бред конечно....
Это не ваш случай ?

Именно это и есть мой случай )))

Делаешь переоткрыте TQuery через 2-3 сек (кнопочкой на форме) - все данные на месте
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433525
FrankBY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,

3) cxTextEdit2.Text работает.... А если поменять в региональных настройках разделитель (или вы используете SysUtils.DateSeparator) или в самом cxTextEdit2.Text

На форме при вводе чисел обрабатываю нажатия кнопок.
Точка меняется на запятую
И при получении данных из таблицы в textedit пишу всегда ",", а не "."

Но это всё моего вопроса не решает ))
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39433568
Noskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FrankBYNoskov,
База какая? Не MS Access случаем?
--
Именно она

Надо кэш обновить перед тем, как переоткрывать датасет:
Код: pascal
1.
2.
 JE := CreateOleObject('JRO.JetEngine');
 JE.RefreshCache(ADOConnection.ConnectionObject);
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39695259
Добра..
Сам искал решение и... нашел
Access + Delphi дожидаемся выполнения запроса .ExecSQL;
Вместо
Код: pascal
1.
Form1.RUN.ExecSQL;


Пишем
Код: pascal
1.
2.
3.
4.
5.
if Form1.RUN.ExecSQL then
  begin
    DTA.QL.Active := False;
    DTA.QL.Active := True;
  end;



Вот так все оказалось просто!
...
Рейтинг: 0 / 0
TADOQuery.ExecSQL как дождаться выполнения запроса
    #39695336
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей ПримГородДобра..
Вот так все оказалось просто!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TADOQuery.ExecSQL как дождаться выполнения запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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