Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как проверить существование строки в TdxMemData / 11 сообщений из 11, страница 1 из 1
16.11.2018, 19:41
    #39734333
Crazy_Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Добрейшего времени суток.
Возник следующий вопрос. Есть некий проект в котором при заполнении спецификации документов, данные сначала вносятся в TdxMemData, а при нажатии кнопки "сохранить" инсертятся в базу, пере инсертом выполняется некая функция, проверяющая строки на дубли по двум полям (пункт отправки / пункт прибытия). Требуется без существенных изменений переместить поиск дублей на вставку новой строки.
Насколько я понял, в Дельфи при событии BeforePost dxMemData будет находится в состоянии Insert/Edit и перебрать его строки не получится. Вопрос собственно как правильно сделать. Пока мысль только в сторону индусисзма и создания параллельного словаря со ключом "пункт отправки" + "/" + "пункт прибытия")
...
Рейтинг: 0 / 0
16.11.2018, 19:48
    #39734335
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Crazy_Wolf,

средствами СУБД. Например, c помощь merge .
...
Рейтинг: 0 / 0
16.11.2018, 19:55
    #39734338
Crazy_Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Фэйтл Эра,
Там проверка проводится до записи данных в базу, до нажатия кнопки сохранить данные просто "висят" в памяти dxMemData.
В данный момент так реализовано так
1 проход.
эти два ключевых поля пишутся в двумерный массив размерностью (количество строк, 2)
2 проход
данные строки dxMemData сравниваются с элементами массива, если есть совпадение выдается сообщение о дубликатах, если нет то начинается операция по инсерту данных в базу.
...
Рейтинг: 0 / 0
16.11.2018, 20:03
    #39734343
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Crazy_WolfЕсть некий проект в котором при заполнении спецификации документов, данные сначала вносятся в TdxMemData, а при нажатии кнопки "сохранить" инсертятся в базу, пере инсертом выполняется некая функция, проверяющая строки на дубли по двум полям (пункт отправки / пункт прибытия). Требуется без существенных изменений переместить поиск дублей на вставку новой строки.
Насколько я понял, в Дельфи при событии BeforePost dxMemData будет находится в состоянии Insert/Edit и перебрать его строки не получится. Вопрос собственно как правильно сделать. Пока мысль только в сторону индусисзма и создания параллельного словаря со ключом "пункт отправки" + "/" + "пункт прибытия")А почему бы поиск дублей не переложить на БД? Сделать уникальный индекс по полю и ловить исключения при вставке.
...
Рейтинг: 0 / 0
16.11.2018, 20:07
    #39734347
Crazy_Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
DimonkaА почему бы поиск дублей не переложить на БД? Сделать уникальный индекс по полю и ловить исключения при вставке.
Честно говоря эта штука досталась на время отпуска коллеги и сильно все менять не хочется, ибо раз у него такая концепция пусть такая и будет. Может быть таки можно как-нибудь "пробежаться" в цикле по dxMemData в BeforePost?
...
Рейтинг: 0 / 0
16.11.2018, 20:16
    #39734352
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Crazy_WolfТребуется без существенных изменений переместить поиск дублей на вставку новой строки.
Первый вариант с проверкой всего списка уже перед сохранением -- самый оптимальный вариант -- после показа проблемных записей дать пользователю шанс их исправить. Править код нет необходимости.
...
Рейтинг: 0 / 0
16.11.2018, 20:26
    #39734359
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Crazy_Wolf,

как и у любых других датасетов: дизэйблишь контролы, делаешь закладку, ищешь (Locate()), восстанавливаешь по закладке, энэйблишь контролы.
...
Рейтинг: 0 / 0
16.11.2018, 20:28
    #39734360
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Crazy_Wolf...Пока мысль только в сторону индусисзма и создания параллельного словаря ...
Да, если дело в скорости - так и делай. Словарь только с ключом, ибо данные тебе не нужны, лишь факт "уже в наличии".
...
Рейтинг: 0 / 0
16.11.2018, 20:32
    #39734362
Crazy_Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Фэйтл ЭраCrazy_Wolf,
как и у любых других датасетов: дизэйблишь контролы, делаешь закладку, ищешь (Locate()), восстанавливаешь по закладке, энэйблишь контролы.
А то что в BeforePost запись будет находится в статусе Insert/Edit попытка Locate не вызовет Post?
...
Рейтинг: 0 / 0
16.11.2018, 21:24
    #39734378
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Crazy_WolfФэйтл ЭраCrazy_Wolf,
как и у любых других датасетов: дизэйблишь контролы, делаешь закладку, ищешь (Locate()), восстанавливаешь по закладке, энэйблишь контролы.
А то что в BeforePost запись будет находится в статусе Insert/Edit попытка Locate не вызовет Post?
Да, вызовет, точно. Ну, можно скопировать новые значения полей, выполнить Cancel, потом поискать по датасету и сделать что хотелось. :)
...
Рейтинг: 0 / 0
19.11.2018, 15:22
    #39735164
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить существование строки в TdxMemData
Crazy_WolfНасколько я понял, в Дельфи при событии BeforePost dxMemData будет находится в состоянии Insert/Edit и перебрать его строки не получится. Вопрос собственно как правильно сделать.
Тут у тебя "два путя":
1) Проверять в событии AfterPost
2) Проверять дубликаты перед вставкой в СУБД
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как проверить существование строки в TdxMemData / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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