|
|
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Добрейшего времени суток. Возник следующий вопрос. Есть некий проект в котором при заполнении спецификации документов, данные сначала вносятся в TdxMemData, а при нажатии кнопки "сохранить" инсертятся в базу, пере инсертом выполняется некая функция, проверяющая строки на дубли по двум полям (пункт отправки / пункт прибытия). Требуется без существенных изменений переместить поиск дублей на вставку новой строки. Насколько я понял, в Дельфи при событии BeforePost dxMemData будет находится в состоянии Insert/Edit и перебрать его строки не получится. Вопрос собственно как правильно сделать. Пока мысль только в сторону индусисзма и создания параллельного словаря со ключом "пункт отправки" + "/" + "пункт прибытия") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 19:41 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 19:48 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эра, Там проверка проводится до записи данных в базу, до нажатия кнопки сохранить данные просто "висят" в памяти dxMemData. В данный момент так реализовано так 1 проход. эти два ключевых поля пишутся в двумерный массив размерностью (количество строк, 2) 2 проход данные строки dxMemData сравниваются с элементами массива, если есть совпадение выдается сообщение о дубликатах, если нет то начинается операция по инсерту данных в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 19:55 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Crazy_WolfЕсть некий проект в котором при заполнении спецификации документов, данные сначала вносятся в TdxMemData, а при нажатии кнопки "сохранить" инсертятся в базу, пере инсертом выполняется некая функция, проверяющая строки на дубли по двум полям (пункт отправки / пункт прибытия). Требуется без существенных изменений переместить поиск дублей на вставку новой строки. Насколько я понял, в Дельфи при событии BeforePost dxMemData будет находится в состоянии Insert/Edit и перебрать его строки не получится. Вопрос собственно как правильно сделать. Пока мысль только в сторону индусисзма и создания параллельного словаря со ключом "пункт отправки" + "/" + "пункт прибытия")А почему бы поиск дублей не переложить на БД? Сделать уникальный индекс по полю и ловить исключения при вставке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:03 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
DimonkaА почему бы поиск дублей не переложить на БД? Сделать уникальный индекс по полю и ловить исключения при вставке. Честно говоря эта штука досталась на время отпуска коллеги и сильно все менять не хочется, ибо раз у него такая концепция пусть такая и будет. Может быть таки можно как-нибудь "пробежаться" в цикле по dxMemData в BeforePost? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:07 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Crazy_WolfТребуется без существенных изменений переместить поиск дублей на вставку новой строки. Первый вариант с проверкой всего списка уже перед сохранением -- самый оптимальный вариант -- после показа проблемных записей дать пользователю шанс их исправить. Править код нет необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:16 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Crazy_Wolf, как и у любых других датасетов: дизэйблишь контролы, делаешь закладку, ищешь (Locate()), восстанавливаешь по закладке, энэйблишь контролы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:26 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Crazy_Wolf...Пока мысль только в сторону индусисзма и создания параллельного словаря ... Да, если дело в скорости - так и делай. Словарь только с ключом, ибо данные тебе не нужны, лишь факт "уже в наличии". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:28 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраCrazy_Wolf, как и у любых других датасетов: дизэйблишь контролы, делаешь закладку, ищешь (Locate()), восстанавливаешь по закладке, энэйблишь контролы. А то что в BeforePost запись будет находится в статусе Insert/Edit попытка Locate не вызовет Post? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:32 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Crazy_WolfФэйтл ЭраCrazy_Wolf, как и у любых других датасетов: дизэйблишь контролы, делаешь закладку, ищешь (Locate()), восстанавливаешь по закладке, энэйблишь контролы. А то что в BeforePost запись будет находится в статусе Insert/Edit попытка Locate не вызовет Post? Да, вызовет, точно. Ну, можно скопировать новые значения полей, выполнить Cancel, потом поискать по датасету и сделать что хотелось. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 21:24 |
|
||
|
Как проверить существование строки в TdxMemData
|
|||
|---|---|---|---|
|
#18+
Crazy_WolfНасколько я понял, в Дельфи при событии BeforePost dxMemData будет находится в состоянии Insert/Edit и перебрать его строки не получится. Вопрос собственно как правильно сделать. Тут у тебя "два путя": 1) Проверять в событии AfterPost 2) Проверять дубликаты перед вставкой в СУБД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2018, 15:22 |
|
||
|
|

start [/forum/topic.php?fid=58&tid=2040106]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 434ms |

| 0 / 0 |
