|
|
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Всем привет! Использую компоненты ADO + DBGridEh. При изменении данных в ячейке - происходит автоматический update. Каким образом он генерится - для меня загадка. Вопрос в следующем, как после изменения данных в ячейке запустить хранимую процедуру с параметрами? Какое событие использовать? На данный момент используется событие: Код: pascal 1. 2. 3. 4. 5. 6. 7. А мне нужно запустить свою хранимку, да ещё и считать ряд полей из DataSet. А после события Post уже ничего не срабатывает. А считать нужно именно после события, так как происходит обновление Grid и данные в DataSet уже будут иными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 00:05 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Евгений Стронг как после изменения данных в ячейке запустить хранимую процедуру с параметрами? AfterPost ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 00:07 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Вам необходима возможность написания своих запросов delete, update, insert и select для датасета. ADO вам этого не позволит, берите firedac или unidac. Там обновления через хранимки делаются нормально. В unidac чуть нормальнее чем в firedac ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 10:47 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
энди Вам необходима возможность написания своих запросов delete, update, insert и select для датасета. ADO вам этого не позволит, берите firedac или unidac. Там обновления через хранимки делаются нормально. В unidac чуть нормальнее чем в firedac А почему не позволит? Вот выше подсказали событие query, которое будет вызываться после вставки данных и я запущу хранимую процедуру. Какие преимущества у FireDAC, в таком случае? Плюс я на сколько понял в версии Community Edition нет возможности использовать коннект с сервером. Только локальные БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 14:57 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Евгений Стронг А почему не позволит? Вот выше подсказали событие query, которое будет вызываться после вставки данных и я запущу хранимую процедуру. Какая СУБД? Есть-ли там триггеры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 15:13 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
wadman Евгений Стронг А почему не позволит? Вот выше подсказали событие query, которое будет вызываться после вставки данных и я запущу хранимую процедуру. Какая СУБД? Есть-ли там триггеры? MSSQL. Кстати, отличная мысль... Можно ведь на изменение поля завязать триггер. У меня на самом деле ситуация такая, что необходимо сохранять историю изменений. Брать предыдущее значение и записывать в отдельную таблицу с ещё дополнительными данными из редактируемой таблицы. Поэтому скорее всего я это и сделаю с помощью триггера. По сути с Delphi мне надо будет просто дернуть одну процу с новым значением. И это я так понимаю нужно сделать в AfterPost компонента Query ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 16:04 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Евгений Стронг wadman пропущено... Какая СУБД? Есть-ли там триггеры? MSSQL. Кстати, отличная мысль... Можно ведь на изменение поля завязать триггер. У меня на самом деле ситуация такая, что необходимо сохранять историю изменений. Брать предыдущее значение и записывать в отдельную таблицу с ещё дополнительными данными из редактируемой таблицы. Поэтому скорее всего я это и сделаю с помощью триггера. По сути с Delphi мне надо будет просто дернуть одну процу с новым значением. И это я так понимаю нужно сделать в AfterPost компонента Query Дельфи тут совсем не при чем. Адо (как наследник датасета) должен автоматом рефрешнуть измененную строку. А логирование всегда делается на стороне сервера, т.к. изменения могут пройти без этого приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 16:27 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
wadman Евгений Стронг пропущено... MSSQL. Кстати, отличная мысль... Можно ведь на изменение поля завязать триггер. У меня на самом деле ситуация такая, что необходимо сохранять историю изменений. Брать предыдущее значение и записывать в отдельную таблицу с ещё дополнительными данными из редактируемой таблицы. Поэтому скорее всего я это и сделаю с помощью триггера. По сути с Delphi мне надо будет просто дернуть одну процу с новым значением. И это я так понимаю нужно сделать в AfterPost компонента Query Дельфи тут совсем не при чем. Адо (как наследник датасета) должен автоматом рефрешнуть измененную строку. А логирование всегда делается на стороне сервера, т.к. изменения могут пройти без этого приложения. У меня суть в том, что я хочу создать пользователя на сервере, который будет иметь возможность только запускать хранимки. А для того, чтобы сделать апдейт прямой в таблицу - нужны соответствующие права. Поэтому и идея стартовать только хранимую процедуру не использовать автоматический апдейт датасета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 18:33 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Евгений Стронг При изменении данных в ячейке - происходит автоматический update. Каким образом он генерится - для меня загадка. Т.е. ты хочешь сказать, что есть какой-то старый работающий код, которые при изменении данных в таблице что-то где-то ещё меняет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 19:43 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
X11 Евгений Стронг При изменении данных в ячейке - происходит автоматический update. Каким образом он генерится - для меня загадка. Т.е. ты хочешь сказать, что есть какой-то старый работающий код, которые при изменении данных в таблице что-то где-то ещё меняет? Я имел ввиду про возможности датасета, который такой умный, что сам делает апдейт после изменения значения в Grid. Но посмотрел по профайлеру - там такой апдейт... Что лучше его самостоятельно написать и обернуть в процедуру. Плюс, как я писал выше, вся программа будет работать на ХП. То есть уже работает, остался вот этот один момент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 19:55 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
wadman Есть-ли там триггеры? я бы тоже попробовал использовать триггеры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 20:25 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
X11, Сделал я запуск хранимой процедуры на событие AfterPost компонента ADOQuery и теперь у меня и отрабатывает автоматически апдейт от dataset и запускается после этого моя хранимая процедура. Как теперь отключить этот автоматический апдейт? Знает кто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2020, 23:38 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Зачем использовать DB контролы, если в них не нужно изменять значения таблиц ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 00:04 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
DimaBr Зачем использовать DB контролы, если в них не нужно изменять значения таблиц ? Ну так уж сложилось в процессе разработки. И это достаточно удобно для отображения данных. Сейчас вопрос в том, как отключить этот автоматический апдейт и использовать свою процедуру по событию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 01:01 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
1. Не используйте DBGrid 2. Редактируйте строку в отдельных контролах не привязанных к датасету 3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним 4. Перейдите на другие компоненты доступа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 01:11 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
DimaBr 1. Не используйте DBGrid 2. Редактируйте строку в отдельных контролах не привязанных к датасету 3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним 4. Перейдите на другие компоненты доступа Пока только 1 вариант я виду как можно адаптировать - это отключить DBGRidEh от Dataset и в таком случае он станет не связанным с БД напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 01:28 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Евгений Стронг отключить DBGRidEh от Dataset и в таком случае он станет не связанным с БД напрямую. Тогда он и данные отображать не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 01:34 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
DimaBr Евгений Стронг отключить DBGRidEh от Dataset и в таком случае он станет не связанным с БД напрямую. Тогда он и данные отображать не будет Никогда так не пробовал конечно, но думал что можно по принципу WPF в C#, где создается Table, а грид привязывается у готовому набору данных. Или же циклом по результатирующему набору и добавлять записи. Я использую компоненты EhLib и там присутствуют компоненты для работы с БД. Почитаю документацию, может там есть что мне надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 01:45 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Вариант1: поставить всем полям тип fkInternalCalc по идее после этого ничего не должно лететь в базу. Вариант2: Раз у вас используется EhLib подключите грид через цепочку TMemTableEh -> TSQLDataDriverEh -> DataSet (в TSQLDataDriverEh.ProviderDataSet). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 06:00 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
энди ADO вам этого не позволит, берите firedac или unidac. Там обновления через хранимки делаются нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 10:05 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
istrebitel Вариант1: поставить всем полям тип fkInternalCalc по идее после этого ничего не должно лететь в базу. Вариант2: Раз у вас используется EhLib подключите грид через цепочку TMemTableEh -> TSQLDataDriverEh -> DataSet (в TSQLDataDriverEh.ProviderDataSet). Спасибо за подсказку. Воспользовался вторым вариантом. Прописал процедуры в свойствах ADODataDriverEh1 и всё работает, как надо. А dataset привязал к MemTableEh1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 13:20 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
L_argo, точно, оба умеют на updatesql вешать хранимки, unidac делает это проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 14:13 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
Евгений Стронг Спасибо за подсказку. Воспользовался вторым вариантом. Прописал процедуры в свойствах ADODataDriverEh1 и всё работает, как надо. А dataset привязал к MemTableEh1. Я вам предлагал этот же вариант 1. Не используйте DBGrid 2. Редактируйте строку в отдельных контролах не привязанных к датасету 3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним 4. Перейдите на другие компоненты доступа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 15:14 |
|
||
|
Delphi Rio 10.3 Изменение данных в DataSet через хранимую процедуру
|
|||
|---|---|---|---|
|
#18+
DimaBr Евгений Стронг Спасибо за подсказку. Воспользовался вторым вариантом. Прописал процедуры в свойствах ADODataDriverEh1 и всё работает, как надо. А dataset привязал к MemTableEh1. Я вам предлагал этот же вариант 1. Не используйте DBGrid 2. Редактируйте строку в отдельных контролах не привязанных к датасету 3. Загрузите датасет в память (ClientDataset, dxMemData, rxMemoryData и т.д.) и работайте с ним 4. Перейдите на другие компоненты доступа Да, спасибо. Я просто пробовал остальные и ответил уже последнему :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2020, 23:54 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39949598&tid=2038391]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
32ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 321ms |

| 0 / 0 |
