Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219

ADOQuery: Open/Close или Active:=True/False?

07.08.2020, 20:10. Показов 7468. Ответов 20

Студворк — интернет-сервис помощи студентам
Привет всем!

Работая над проектом, заглючил SELECT-DISTINCT, добавленный с ордером через SQL.Add в две строки.
Изменил SQL.Add -> SQL.Text. Так вот, вопросы:
  • Стоит делать Close -> SQL.Text -> Open или SQL.Text -> Open? (мне говорили, что SQL.Text автоматически закрывает запрос)
  • Стоит ли делать Open/Close вместо Active:=True/False?
  • Является ли панацеей вместо ExecSQL/Open выполнять Active:=False->True? (хотя я считаю, что это не стоит делать)
  • Стоит ли для того, чтобы дефолтные запросы не сбивали нужные нам (запрограммированные кодом), сделать все query Active:=False и включать их при необходимости? А нужно ли после Active:=False->True делать Close/Open?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.08.2020, 20:10
Ответы с готовыми решениями:

ADOQuery.Close выдает ошибку: BOF или EOF имеют значение True ... Для выполнения операции требуется текущая запись.
Пожалуйста, помогите справиться с ADOQuery: ADOQuery.Close выдает ошибку: BOF или EOF имеют значение True ... Для выполнения операции...

DevExpress, как вместо True или False вывести картинку
Добрый день. Уважаемые гуру, кто знает или обладает примером, помогите пожалуйста разобраться сxGrid. Не могу понять как вместо chekbox...

Active=true
куда именно прописать на форме что бы для ADOTable установить Active=true????

20
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
07.08.2020, 22:35
Лучший ответ Сообщение было отмечено Komandor_Yan как решение

Решение

- В случае с присвоением текста запроса свойству Text Close не нужен;

- Вот что говорят гуру: "В коде приложения для открытия и закрытия Query рекомендуется вызывать его методы Open/Close, а не управлять свойством Active. Во-первых, это одно и то же, а во-вторых, Open/Close лучше читаются и не допускают неоднозначностей (как например, Query.Active:=MyVar)";

- Замена ExecSQL на Active := True НЕ ДОПУСТИМА. ExecSQL выполняют модифицирующие запросы, а Active := True/False
(лучше вызовы Open/Close) открывают/закрывают набор данных при селективных запросах;

- При отладке работы приложения с БД можно включать свойство датасетов Active в True, но готовые приложения нужно настроить так, чтобы они подключались к БД и к данным только при его запуске. Т.е. при отключенных свойствах Active в датасетах.
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
08.08.2020, 00:43  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
готовые приложения нужно настроить так, чтобы они подключались к БД и к данным только при его запуске. Т.е. при отключенных свойствах Active в датасетах.
Т.е. при разработке все включено, но при альфа-релизе выставляем все datasource (или query?) в Active:=False, а на инициализацию программы инициируем включение?
За всё остальное - спасибо!!!!!
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
08.08.2020, 02:49
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
Т.е. при разработке все включено
Включено то что нужно и тогда когда это нужно для конкретной отладки.
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
а на инициализацию программы инициируем включение
Включение/выключение выполняем тогда, когда нужно по алгоритму работы.

Добавлено через 1 час 8 минут
Цитата Сообщение от Скандербег Посмотреть сообщение
В случае с присвоением текста запроса свойству Text Close не нужен
Вот не знал такого. Всегда явно вызывал Close перед любым изменением текста запроса.
Правда свойство Text я практически никогда и не пользовал.
Длинная строка запроса не очень "смотрибельна". Я всегда старался "форматировать" запрос. Типа
SQL
1
2
3
4
SELECT Some1, Some2 FROM SomeTable
WHERE ...
AND ...
ORDER/GROUP BY
И почему-то пользовался именно SQL.Add. Ведь такое "форматирование" можно было сделать и для свойства Text. По глупости наверно.
И теперь меня гложат смутные сомнения - а почему метод SQL.Add не закрывает текущий запрос? Или он тоже закрывает?
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
08.08.2020, 03:19  [ТС]
northener, вот из-за этого я начал кромсать свой проект. Оказывается, вроде закрывает.
У меня возникла проблема повеселее. У меня теперь отказывается программа нормально забирать дистинкты и пр. из БД. Такое ощущение, что когда я осваивал отладчик, я сломал сопроцессор (конечно нет, но какую-то переменную я там раз менял зачем-то((( ). Капец, теперь придется по-видимому среду сносить и ставить заново.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
08.08.2020, 13:00
Сомневаюсь, что хоть какая-то настройка IDE Delphi может хоть как-то влиять на результат запроса к БД. Если вы видите явно неадекватное поведение IDE, то как минимум ее желательно перезагрузить, причем обязательно посмотреть, а не осталась ли ее копия висеть в процессах. Чудить может еще проект, а не IDE и тогда уже тестировать проблему надо в новом проекте.
Например у меня есть версия отличных компонент, но среди них есть один, который начинает буянить, когда его пытаются удалить с формы, причем так отчаянно сопротивляется, что только перезагрузка IDE приводит все в норму.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
08.08.2020, 14:09
нет никакой связи между редактором кода программы и SQL запросами
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
08.08.2020, 15:53  [ТС]
Мне капец как больно, т.к. любой SQL-запрос отказывается изменяться и адекватно работать.
Начать новый проект...
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
08.08.2020, 16:07
запроса не существует
это концепция
поэтому и отказываться ни от чего он не в силах
поэтому для понимания остальными требуется соблюдать нехитрые требования
1. я хочу сделать..
2. для этого я придумал ...
3. что я сделал...
4. что должно получиться ...
5. что на самом деле получилось...
тогда шансы на помощь сильно отличаются от нуля
а описывать переживания и гуманизировать неодушевленное - для этого есть литература и искусство
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
08.08.2020, 16:08
Может показать проект (выложить сюда) и сказать какая версия Delphi.
Возможно кто-то на ВЫ с MySQL и поможет конкретно.
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
09.08.2020, 00:31  [ТС]
krapotkin, да, согласен...

Скандербег, Delphi 10.3CE эмбарка. Выложить скорее не получится, чем получится - у меня сервер привязан на localhost, не сэкспортирую.
Думаю, что придется просто заново перерисовать и переписать проект - м.б. нахимичил, когда решил все юниты упаковать в папки и затем заново подключить их.

Добавлено через 4 минуты
думаю о том, чтобы все query выставить в false Active и просто включать их при работе приложения в определенные моменты
А если query не был открыт ранее и я его закрою, ошибки будут или приложение просто сжует закрытие закрытого?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
09.08.2020, 01:30
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
А если query не был открыт ранее и я его закрою, ошибки будут
Вы за кого принимаете разработчиков Дельфи? Совсем уж за двоешников?
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
09.08.2020, 08:56
если будут ошибки, их можно поправить)
а вот если их нет, а программа не работает, это сложнее)))
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.08.2020, 17:03  [ТС]
northener, да ладно Вам, что Вы сразу наезжаете? Я же не знаю backstage делфи.

krapotkin, были ошибки AV, когда на закрытие главной формы ругается процедура дефолта+закрытия второй формы, в которой был просто Close и SQL.Clear.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
12.08.2020, 20:32
ошибки AV чаще всего элементарные
ставим точку останова и проверяем в отладчике какие переменные = NIL или чуть посложнее, если нет привычки вызывать FreeAndNil() вместо Free - т.е. уже разрушены, но значение непустое
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
13.08.2020, 00:11  [ТС]
уууу, разрушать формы через Free - я пока тут не гуру)

Пока стремаюсь переводить на динамическое создание - как сдам работу, так и переведу на динамику. Не хочу экспериментировать - сначала структуру БД начал кромсать, затем код править начал, решил в проекте растусовать в отдельную папку все юниты с дфм-ками,в матсопроцессоре наизменялся - вот и пошло-поехало
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
13.08.2020, 03:38
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
уууу, разрушать формы через Free - я пока тут не гуру)
А при чём тут формы?
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
13.08.2020, 22:55  [ТС]
northener, я привык, что обычно так высвобождают форму сразу, чтобы высвободить все её элементы. Может я что-то путаю.
Но в основном высвобождают через Free динамические элементы (уже пробовал высвобождать Edit - не помогло).
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
14.08.2020, 01:25
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
northener, я привык, что обычно так высвобождают форму сразу, чтобы высвободить все её элементы.
Теоретически да. Если вы сами создали в рантайме некую форму и она вам нужна только некоторое время, то нормальным поведением считается что уничтожить её вы должны сами сразу как только необходимость в ней отпала.
Если вы сами создали в рантайме некую форму и она вам нужна вплоть до окончания работы приложения, то лучше отдать её уничтожение на волю её владельцу. И тут важно кого/что вы указали владельцем Owner в методе Create
Если вы указали там nil, значит всю ответственность за уничтожение этой формы вы взяли на себя. Вам и отвечать.
Ну и вдобавок. При закрытии приложения/главной формы вся память освобождается автоматически.
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
15.08.2020, 12:02  [ТС]
А при закрытии второстепенной освобождать нужно принудительно память или все query и прочие элементы автоматически закрываются, удаляют SQL.text и прощаются с этой формой?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2020, 12:02
Помогаю со студенческими работами здесь

SQL->Active: True не ставится
В чем проблема? Вывел все нужные компоненты для работы с бд, создал форму, вывел DataSource, Query, DBGrid, все подключил, при установки...

Изменение true на false и добавление данных
Делаю курсовой по Делфи на тему "АРМ инспектора отдела кадров". Решил сделать данные про всех сотрудников в одной таблице Access. Есть две...

Invalid table name. Не могу сделать true свойство Active
Выдает ошибку BDE 10039, как это исправить, не понимаю.. сидел, делал.. все работало,а потом, почему-то перестало. procedure...

Вероятно заместо True надо False только где?
Добрый вечер) Возникла 1 проблемка. у меня есть БД связано через АДО. всё отлично работает. Запрет на редактирование при двойном...

Как в ADO в таблице с логическим типом изменить значение с true на false после какого либо события?
У меня в Delphi есть таблица "Список номеров". Мне нужно, чтобы при заключении договора в в таблице "Номерной фонд" в поле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru