
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
03.01.2019, 13:14
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
Точнее выполняется, но только после закрытия программы и нового запуска. Ситуация такая, на форме лежит StringGrid (Обычный, не DB). По каждой строке имеются чекбоксы (их состояние и должно записываться). Остальные данные добиваются из параллельных потоков. Соответственно StringGrid перерисовывается раз в 5 секунд. Если снимаешь или ставишь галочку на чекбоксе, отрабатывается функция setQueryGroupAbonsState, которая должна записывать их состояние в БД и при следующей перерисовке отобразить на экране. Так вот, процедура setQueryGroupAbonsState вызывается, ей передается нормальное значение, а при перерисовке восстанавливается старое состояние. Если программу закроешь, а потом запустишь по новой, состояние чекбоксов меняется... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ExecQry, которая используется в ней: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Ну и создание самой коннекта к БД: Код: 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. Интересно то, что на Дельфи 5 все работало на автокомите, вообще без проблемм, просто нужно переводить программу на Delphi 7 хотя бы для начала, и началась такая вот канитель. Может кто чего подскажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 13:32
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
BorodaOleg, 1. используй параметры для запросов 2. никогда не гаси сообщения об ошибках так чтобы они не оставляли следов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 13:33
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
BorodaOlegМожет кто чего подскажет? Читай документацию по транзакциям и их использованию, ибо код у тебя совершенно бестолков. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 14:03
|
|||
|---|---|---|---|
Не выполняется UPDATE в Firebird |
|||
|
#18+
BorodaOleg if not FADOQuery.Active then begin FADOQuery.Active:=true; это бред какой-то. Зачем эти строки ПЕРЕД запихиванием в FADOQuery нового запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 14:19
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
Протрезветь советовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 15:15
|
|||
|---|---|---|---|
Не выполняется UPDATE в Firebird |
|||
|
#18+
kdvBorodaOleg if not FADOQuery.Active then begin FADOQuery.Active:=true; это бред какой-то... Потом сразу [src]FADOQuery.Close;/SRC] Наверное, "ругалось", если датасет был неактивен. Вот ТС и воткнул Active := true. В общем, прекрасно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 15:26
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
Ругалась на FADOQuery.Transaction.StartTransaction; - говорила что транзакция активна, при этом FADOQuery.Active было false. Пришлось обходить таким беответственным )) методом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 15:29
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
Датасетов у меня вообще нет, все на SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 16:26
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
Да и вопрос то был поставлен: почему запись в БД идет только при выходе из программы. Построчно проверял, FADOQuery.Transaction.Commit срабатывает, а данные в базу не пишутся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 17:28
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
BorodaOlegПострочно проверял, FADOQuery.Transaction.Commit срабатывает, а данные в базу не пишутся... Или не читаются. Иди уже изучай управление транзакциями и их уровни изоляции. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 21:31
|
|||
|---|---|---|---|
Не выполняется UPDATE в Firebird |
|||
|
#18+
BorodaOleg, и что, в конкурирующем приложении в транзакции read committed rec_version ничего не видать? Сомневаюсь. Собственно, а зачем в приложении на Delphi коннект к Firebird делать через ADO? Это какой-то специфический вид мазохизма, или условие какой-то универсальности (доступа к другим СУБД)? BorodaOlegРугалась на FADOQuery.Transaction.StartTransaction; - говорила что транзакция активна, при этом FADOQuery.Active было false. не вижу связи. Допустим, транзакция активна, и что? Зачем вызывать FADOQuery.Active ? Собственно, TAdoQuery.Active:=True это ОТКРЫТИЕ датасета (аналог метода Open), в котором записан оператор SELECT. Вы примеры хотя бы по TADOQuery смотрели? Вот этот пример, допустим, для кого написан? http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ADODB_TADOQuery.html А вот тут http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ADODB_TADOQuery_ExecSQL.html написано совсем просто: Note: For SELECT statements, call Open instead of ExecSQL or set the Active property to true. p.s. это ко всем датасетам относится (типа, "датасеты не использую", но TADOQuery наследник TDataSet), и для облегчения понимания кода я крайне не рекомендую пользоваться DataSet.Active:=True и DataSet.Active:=False надо вместо этого писать DataSet.Open; и DataSet.Close; тогда код будет более понятен для последующего вспоминания, зачем и что написано месяц и более назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2019, 21:40
|
|||
|---|---|---|---|
Не выполняется UPDATE в Firebird |
|||
|
#18+
BorodaOleg, и еще. функция function CDBase.ExecQry написана так, что предполагает закрытие FADOQuery после выполнения - там написано FADOQuery.Close (хотя и по ошибке стоит после Commit, а должно быть до). Таким образом, при вызове этой функции нахождение FADOQuery в открытом (активном) состоянии является нештатным. Если так - это хороший способ ловить места, где FADOQuery случайно оказался незакрыт. Или не так? Тогда надо было написать на входе if FADOQuery.isOpen then FADOQuery.Close. FADOQuery.SQL:=... И всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.01.2019, 12:17
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
Не вижу проблемы со стороны файрберда, тут каша в дельфовом коде. Поехали в раздел дельфи. Модератор: Тема перенесена из форума "Firebird, InterBase". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.01.2019, 12:27
|
|||
|---|---|---|---|
|
|||
Не выполняется UPDATE в Firebird |
|||
|
#18+
Программа не моя, изначально писалась где - то в 2000 году, видать тогда еще доступ к БД осуществлялся только через ADO или программист который это писал, не знал просто другого способа, отсюда и ADO в названии, на самом деле все компоненты из серии InterBase, просто кому-то до меня было лень менять названия всех процедур )) просто прописали: FADOQuery : TIBQuery; Что касаемо TAdoQuery.Active:=True, уже разобрался, что для проверки активности транзакции совершенно не нужна активная Query к которой эта транзакция привязана. Вообщем - моя глупость. Вся проблема заключалась в том, что я где-то прочитал, что по умолчанию транзакция создается в уровне изолированности read_committed, ну и соответственно был в этом уверен. После того, как вручную прописал в параметрах транзакции: nowait read_committed rec_version все заработало. Я только одного не понимаю, почему все работало под Delphi 5 - там вроде те же компоненты? В любом случае, спасибо всем кто отозвался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.01.2019, 12:50
|
|||
|---|---|---|---|
Не выполняется UPDATE в Firebird |
|||
|
#18+
BorodaOlegADO в названии, на самом деле все компоненты из серии InterBase, просто кому-то до меня было лень менять названия всех процедур )) просто прописали: FADOQuery : TIBQuery; Я бы тебя забанил, но я не модератор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&mobile=1&tid=2039947]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
157ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 483ms |

| 0 / 0 |
