Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру / 24 сообщений из 24, страница 1 из 1
21.04.2020, 00:05
    #39949144
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Всем привет!

Использую компоненты ADO + DBGridEh. При изменении данных в ячейке - происходит автоматический update. Каким образом он генерится - для меня загадка. Вопрос в следующем, как после изменения данных в ячейке запустить хранимую процедуру с параметрами? Какое событие использовать? На данный момент используется событие:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TDM.dsDynamicsDataChange(Sender: TObject; Field: TField);
begin

if DM.dsDynamics.DataSet.Modified then
 begin
     DM.dsDynamics.DataSet.Post;
 end;



А мне нужно запустить свою хранимку, да ещё и считать ряд полей из DataSet. А после события Post уже ничего не срабатывает. А считать нужно именно после события, так как происходит обновление Grid и данные в DataSet уже будут иными.
...
Рейтинг: 0 / 0
21.04.2020, 00:07
    #39949146
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Евгений Стронг
как после изменения данных в ячейке запустить хранимую процедуру с параметрами?

AfterPost
...
Рейтинг: 0 / 0
21.04.2020, 10:47
    #39949231
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Вам необходима возможность написания своих запросов delete, update, insert и select для датасета. ADO вам этого не позволит, берите firedac или unidac. Там обновления через хранимки делаются нормально. В unidac чуть нормальнее чем в firedac
...
Рейтинг: 0 / 0
21.04.2020, 14:57
    #39949387
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
энди
Вам необходима возможность написания своих запросов delete, update, insert и select для датасета. ADO вам этого не позволит, берите firedac или unidac. Там обновления через хранимки делаются нормально. В unidac чуть нормальнее чем в firedac


А почему не позволит? Вот выше подсказали событие query, которое будет вызываться после вставки данных и я запущу хранимую процедуру. Какие преимущества у FireDAC, в таком случае? Плюс я на сколько понял в версии Community Edition нет возможности использовать коннект с сервером. Только локальные БД.
...
Рейтинг: 0 / 0
21.04.2020, 15:13
    #39949395
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Евгений Стронг
А почему не позволит? Вот выше подсказали событие query, которое будет вызываться после вставки данных и я запущу хранимую процедуру.

Какая СУБД? Есть-ли там триггеры?
...
Рейтинг: 0 / 0
21.04.2020, 16:04
    #39949427
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
wadman
Евгений Стронг
А почему не позволит? Вот выше подсказали событие query, которое будет вызываться после вставки данных и я запущу хранимую процедуру.

Какая СУБД? Есть-ли там триггеры?


MSSQL. Кстати, отличная мысль... Можно ведь на изменение поля завязать триггер. У меня на самом деле ситуация такая, что необходимо сохранять историю изменений. Брать предыдущее значение и записывать в отдельную таблицу с ещё дополнительными данными из редактируемой таблицы. Поэтому скорее всего я это и сделаю с помощью триггера. По сути с Delphi мне надо будет просто дернуть одну процу с новым значением. И это я так понимаю нужно сделать в AfterPost компонента Query
...
Рейтинг: 0 / 0
21.04.2020, 16:27
    #39949444
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Евгений Стронг
wadman
пропущено...

Какая СУБД? Есть-ли там триггеры?


MSSQL. Кстати, отличная мысль... Можно ведь на изменение поля завязать триггер. У меня на самом деле ситуация такая, что необходимо сохранять историю изменений. Брать предыдущее значение и записывать в отдельную таблицу с ещё дополнительными данными из редактируемой таблицы. Поэтому скорее всего я это и сделаю с помощью триггера. По сути с Delphi мне надо будет просто дернуть одну процу с новым значением. И это я так понимаю нужно сделать в AfterPost компонента Query

Дельфи тут совсем не при чем. Адо (как наследник датасета) должен автоматом рефрешнуть измененную строку.

А логирование всегда делается на стороне сервера, т.к. изменения могут пройти без этого приложения.
...
Рейтинг: 0 / 0
21.04.2020, 18:33
    #39949543
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
wadman
Евгений Стронг
пропущено...


MSSQL. Кстати, отличная мысль... Можно ведь на изменение поля завязать триггер. У меня на самом деле ситуация такая, что необходимо сохранять историю изменений. Брать предыдущее значение и записывать в отдельную таблицу с ещё дополнительными данными из редактируемой таблицы. Поэтому скорее всего я это и сделаю с помощью триггера. По сути с Delphi мне надо будет просто дернуть одну процу с новым значением. И это я так понимаю нужно сделать в AfterPost компонента Query

Дельфи тут совсем не при чем. Адо (как наследник датасета) должен автоматом рефрешнуть измененную строку.

А логирование всегда делается на стороне сервера, т.к. изменения могут пройти без этого приложения.


У меня суть в том, что я хочу создать пользователя на сервере, который будет иметь возможность только запускать хранимки. А для того, чтобы сделать апдейт прямой в таблицу - нужны соответствующие права. Поэтому и идея стартовать только хранимую процедуру не использовать автоматический апдейт датасета.
...
Рейтинг: 0 / 0
21.04.2020, 19:43
    #39949598
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Евгений Стронг
При изменении данных в ячейке - происходит автоматический update. Каким образом он генерится - для меня загадка.


Т.е. ты хочешь сказать, что есть какой-то старый работающий код, которые при изменении данных в таблице что-то где-то ещё меняет?
...
Рейтинг: 0 / 0
21.04.2020, 19:55
    #39949604
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
X11
Евгений Стронг
При изменении данных в ячейке - происходит автоматический update. Каким образом он генерится - для меня загадка.


Т.е. ты хочешь сказать, что есть какой-то старый работающий код, которые при изменении данных в таблице что-то где-то ещё меняет?


Я имел ввиду про возможности датасета, который такой умный, что сам делает апдейт после изменения значения в Grid. Но посмотрел по профайлеру - там такой апдейт... Что лучше его самостоятельно написать и обернуть в процедуру. Плюс, как я писал выше, вся программа будет работать на ХП. То есть уже работает, остался вот этот один момент.
...
Рейтинг: 0 / 0
21.04.2020, 20:25
    #39949621
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
wadman
Есть-ли там триггеры?


я бы тоже попробовал использовать триггеры
...
Рейтинг: 0 / 0
21.04.2020, 23:38
    #39949763
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
X11,

Сделал я запуск хранимой процедуры на событие AfterPost компонента ADOQuery и теперь у меня и отрабатывает автоматически апдейт от dataset и запускается после этого моя хранимая процедура. Как теперь отключить этот автоматический апдейт? Знает кто?
...
Рейтинг: 0 / 0
22.04.2020, 00:04
    #39949781
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Зачем использовать DB контролы, если в них не нужно изменять значения таблиц ?
...
Рейтинг: 0 / 0
22.04.2020, 01:01
    #39949801
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
DimaBr
Зачем использовать DB контролы, если в них не нужно изменять значения таблиц ?


Ну так уж сложилось в процессе разработки. И это достаточно удобно для отображения данных. Сейчас вопрос в том, как отключить этот автоматический апдейт и использовать свою процедуру по событию.
...
Рейтинг: 0 / 0
22.04.2020, 01:11
    #39949805
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
1. Не используйте DBGrid
2. Редактируйте строку в отдельных контролах не привязанных к датасету
3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним
4. Перейдите на другие компоненты доступа
...
Рейтинг: 0 / 0
22.04.2020, 01:28
    #39949810
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
DimaBr
1. Не используйте DBGrid
2. Редактируйте строку в отдельных контролах не привязанных к датасету
3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним
4. Перейдите на другие компоненты доступа


Пока только 1 вариант я виду как можно адаптировать - это отключить DBGRidEh от Dataset и в таком случае он станет не связанным с БД напрямую.
...
Рейтинг: 0 / 0
22.04.2020, 01:34
    #39949812
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Евгений Стронг
отключить DBGRidEh от Dataset и в таком случае он станет не связанным с БД напрямую.

Тогда он и данные отображать не будет
...
Рейтинг: 0 / 0
22.04.2020, 01:45
    #39949815
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
DimaBr
Евгений Стронг
отключить DBGRidEh от Dataset и в таком случае он станет не связанным с БД напрямую.

Тогда он и данные отображать не будет


Никогда так не пробовал конечно, но думал что можно по принципу WPF в C#, где создается Table, а грид привязывается у готовому набору данных. Или же циклом по результатирующему набору и добавлять записи. Я использую компоненты EhLib и там присутствуют компоненты для работы с БД. Почитаю документацию, может там есть что мне надо.
...
Рейтинг: 0 / 0
22.04.2020, 06:00
    #39949843
istrebitel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Вариант1: поставить всем полям тип fkInternalCalc по идее после этого ничего не должно лететь в базу.
Вариант2: Раз у вас используется EhLib подключите грид через цепочку TMemTableEh -> TSQLDataDriverEh -> DataSet (в TSQLDataDriverEh.ProviderDataSet).
...
Рейтинг: 0 / 0
22.04.2020, 10:05
    #39949878
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
энди
ADO вам этого не позволит, берите firedac или unidac. Там обновления через хранимки делаются нормально.
Точно ? У меня не получалось. Правда версия старовата.
...
Рейтинг: 0 / 0
22.04.2020, 13:20
    #39949975
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
istrebitel
Вариант1: поставить всем полям тип fkInternalCalc по идее после этого ничего не должно лететь в базу.
Вариант2: Раз у вас используется EhLib подключите грид через цепочку TMemTableEh -> TSQLDataDriverEh -> DataSet (в TSQLDataDriverEh.ProviderDataSet).


Спасибо за подсказку. Воспользовался вторым вариантом. Прописал процедуры в свойствах ADODataDriverEh1 и всё работает, как надо. А dataset привязал к MemTableEh1.
...
Рейтинг: 0 / 0
22.04.2020, 14:13
    #39949995
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
L_argo,

точно, оба умеют на updatesql вешать хранимки, unidac делает это проще
...
Рейтинг: 0 / 0
22.04.2020, 15:14
    #39950029
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
Евгений Стронг

Спасибо за подсказку. Воспользовался вторым вариантом. Прописал процедуры в свойствах ADODataDriverEh1 и всё работает, как надо. А dataset привязал к MemTableEh1.

Я вам предлагал этот же вариант
1. Не используйте DBGrid
2. Редактируйте строку в отдельных контролах не привязанных к датасету
3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним
4. Перейдите на другие компоненты доступа
...
Рейтинг: 0 / 0
22.04.2020, 23:54
    #39950241
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
DimaBr
Евгений Стронг

Спасибо за подсказку. Воспользовался вторым вариантом. Прописал процедуры в свойствах ADODataDriverEh1 и всё работает, как надо. А dataset привязал к MemTableEh1.

Я вам предлагал этот же вариант
1. Не используйте DBGrid
2. Редактируйте строку в отдельных контролах не привязанных к датасету
3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним
4. Перейдите на другие компоненты доступа


Да, спасибо. Я просто пробовал остальные и ответил уже последнему :-)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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