Последняя версия DataExpress 3 beta от 11 августа 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

TdxForm или TdxSQLQuery

Вопросы о применении того или иного класса или функции.
jurist23rus
Эксперт
Сообщения: 2261
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

TdxForm или TdxSQLQuery

Сообщение jurist23rus » Чт янв 18, 2018 6:17 pm

Два класса. Похожи как братья, хотя имеют разных предков. Но не суть.
Мне вот, что интересно. Если стоит задача работать с записями БД, то каким из классов предпочтительней пользоваться. Какой работает быстрее, качественнее, глубже ну и т.д.? Или разницы между ними особой нет и вопрос выбора - это вопрос вкуса, ну и знания SQL конечно?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 3656
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: TdxForm или TdxSQLQuery

Сообщение admin » Чт янв 18, 2018 6:47 pm

Второй намного быстрее, потому что вы сами составляете запрос, можете определять состав полей, способы соединения с таблицами и прочее. Запись также будет очень быстрая, потому что данные отправляются в базу пачкой (метод ApplyUpdates). TdxForm работает с данными интерактивно, так сказать, т. е. выполняет вычисления выражений, проверяет права доступа, состояние компонентов, отображает окно редактирования и т. д. А похожи они потому, что оба используют датасет.

jurist23rus
Эксперт
Сообщения: 2261
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: TdxForm или TdxSQLQuery

Сообщение jurist23rus » Чт янв 18, 2018 7:21 pm

А в чём отличие методов TdxSQLQuery.Append и TdxSQLQuery.ApplyUpdates? Как применять последний?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 3656
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: TdxForm или TdxSQLQuery

Сообщение admin » Чт янв 18, 2018 7:55 pm

В TdxSQLQuery данные и их изменения кешируются в памяти. Append добавляет новую запись в набор и переводит набор в состояние вставки. При вставке будет обращение к генератору для получения id записи, если свойство UseGenerator равно True (по умолчанию). Метод Post сохраняет запись в памяти, но в базу не отправляет. Когда надо сохранить данные в базе, вызывается метод ApplyUpdates.

jurist23rus
Эксперт
Сообщения: 2261
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: TdxForm или TdxSQLQuery

Сообщение jurist23rus » Чт янв 18, 2018 8:22 pm

Хм... То есть ApplyUpdates, которой нет в TdxForm тоже выполняется, но скрытно от пользователя? А в какой момент? И ещё, метод ApplyUpdates сохраняет данные на жёсткий диск, то есть после его вызова изменится сам файл базы данных?

Что в таком случае делает CancelUpdates? Отменяет уже сделанные в базе изменения?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 3656
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: TdxForm или TdxSQLQuery

Сообщение admin » Чт янв 18, 2018 8:31 pm

jurist23rus писал(а):Хм... То есть ApplyUpdates, которой нет в TdxForm тоже выполняется, но скрытно от пользователя? А в какой момент?
В момент Post, уже до того, как скрипт обработает OnAfterPost.
jurist23rus писал(а):И ещё, метод ApplyUpdates сохраняет данные на жёсткий диск, то есть после его вызова изменится сам файл базы данных?
Да.
jurist23rus писал(а):Что в таком случае делает CancelUpdates? Отменяет уже сделанные в базе изменения?

Отменяет все изменения сделанные в наборе, т. е. в памяти, не в базе. Я даже не знаю понадобится ли он когда-нибудь.

jurist23rus
Эксперт
Сообщения: 2261
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: TdxForm или TdxSQLQuery

Сообщение jurist23rus » Чт янв 18, 2018 8:48 pm

CancelUpdates отменит любые изменения в наборе независимо от их качества и количества? Например: в набор с его открытия добавлены несколько записей, удалены несколько записей и отредактированы несколько записей. Будут отменены все действия с момента открытия набора или с какого-то другого момента?

Что произойдёт если UseGenerator := false? Как я понимаю не будет создан id записи. Разве такое может быть в базе, а если может быть, то как это использовать на практике?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 3656
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: TdxForm или TdxSQLQuery

Сообщение admin » Чт янв 18, 2018 9:45 pm

1. С момента открытия или последнего ApplyUpdates.
2. В этом случае в поле id надо записывать значение самостоятельно. Обращение к генератору тоже создает задержку при медленном соединении. Вообще можно работать с полученными данными локально, изменяя набор, но не записывая данные в базу. Например, делать какие-то сложные расчеты с несколькими проходами по набору. Такая возможность будет редко использоваться, но она есть, как побочный функционал.

jurist23rus
Эксперт
Сообщения: 2261
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: TdxForm или TdxSQLQuery

Сообщение jurist23rus » Пт янв 19, 2018 3:29 pm

Такие инструкции языка SQL как: создание таблиц (CREATE TABLE), вставка строк (INSERT), обновление данных (UPDATE), удаление данных (DELETE, TRUNCATE), удаление таблиц (DROP) поддерживаются? А если нет, то есть ли это в планах?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Контактная информация:

Re: TdxForm или TdxSQLQuery

Сообщение YurAnt » Пт янв 19, 2018 3:49 pm

Всё, что в SQLExecute пропишете...