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

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

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


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