Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951

Цикл по DataSet или как взять текущий элемент

27.11.2019, 10:23. Показов 1586. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, ребят!
Ситуация следующая.
Я заполняю DataSet(VirtualTable) данными.
Мне нужно добавить интервалы чисел в DataSet.
Но перед тем как отправить данные в базу требуется проверка не пересекаются ли интервалы.
Для того чтобы предотвратить это, мной написана функция.
Проблема следующая: при переборе DataSet и проверке, видимо моя новая строка тоже перебирается и прога выдает что как бы интервалы пересекаются или такой есть уже.
Что делать?

Фрагмент основной процедуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for(form->VirtualTableCarStandColors->First(); !form->VirtualTableCarStandColors->Eof;
                                form->VirtualTableCarStandColors->Next())
                        {
                                if(form->VirtualTableCarStandColors->UpdateStatus()==usModified)
                                {       
                                        if(ValidatePeriod( StrToInt(form->VirtualTableCarStandColors->FieldByName("cdcs_beg")->AsString),
                                                           StrToInt(form->VirtualTableCarStandColors->FieldByName("cdcs_end")->AsString),
                                                           form->VirtualTableCarStandColors,
                                                           form->VirtualTableCarStandColors->RecNo)
                                                          )
                                        
                                        {
                                                updateList+="<ROW>\n";
                                                updateList+="<STATUS value=\""+IntToStr(form->VirtualTableCarStandColors->UpdateStatus())+"\"></STATUS>\n";
                                                updateList+="<CDCS_ID value=\""+IntToStr(form->VirtualTableCarStandColors->FieldByName("cdcs_id")->AsInteger)+"\"></CDCS_ID>\n";
                                                updateList+="<CDCS_BEG value=\""+form->VirtualTableCarStandColors->FieldByName("cdcs_beg")->AsString+"\"></CDCS_BEG>\n";
                                                updateList+="<CDCS_END value=\""+form->VirtualTableCarStandColors->FieldByName("cdcs_end")->AsString+"\"></CDCS_END>\n";
                                                updateList+="<CDCS_NOTATION value=\""+form->VirtualTableCarStandColors->FieldByName("cdcs_beg")->AsString+"-"+form->VirtualTableCarStandColors->FieldByName("cdcs_end")->AsString+"\"></CDCS_NOTATION>\n";
                                                updateList+="<CDCS_DESCR value=\""+form->VirtualTableCarStandColors->FieldByName("cdcs_beg")->AsString+"-"+form->VirtualTableCarStandColors->FieldByName("cdcs_end")->AsString+"\"></CDCS_DESCR>\n";
                                                updateList+="<CDCS_COLOR value=\""+form->VirtualTableCarStandColors->FieldByName("group_color")->AsString+"\"></CDCS_COLOR>\n";
                                                updateList+="</ROW>\n";
                                        }
                                }
                        }
Код функции проверки пересечения(Но он не так нужен):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//Проверка не повторяется ли период, проверка на пересечение интервалов   
bool TFormDisplayCars::ValidatePeriod( int periodBegin, int periodEnd, TDataSet *dataSet, int fieldNum)
{
        AnsiString beginField="cdcs_beg";
        AnsiString endField="cdcs_end";
 
        for(dataSet->First(); !dataSet->Eof; dataSet->Next())
                {
                        if(dataSet->RecNo != fieldNum)
                        {
                                //Начало периода совпадает с существующим в таблице
                                if(dataSet->FieldByName(beginField)->AsInteger==periodBegin)
                                {
                                        ShowMessage("Граница начала интервала не уникальна!");
                                        return false;
                                }
                                else
                                //Конец периода совпадает с существующим в таблице
                                if(dataSet->FieldByName(endField)->AsInteger==periodEnd)
                                {
                                        ShowMessage("Граница конца интарвала не уникальна!");
                                        return false;
                                }
                                else
                                //Начало периода входит в какой-то из периодов
                                if(dataSet->FieldByName(beginField)->AsInteger < periodBegin &&
                                dataSet->FieldByName(endField)->AsInteger > periodBegin)
                                {
                                        ShowMessage("Начало интервала входит в один из уже существующих интервалов");
                                return false;
                                }
                                else
                                //Конец периода входит в какой-то из периодов
                                if(dataSet->FieldByName(beginField)->AsInteger < periodEnd &&
                                dataSet->FieldByName(endField)->AsInteger > periodEnd)
                                {
                                        ShowMessage("Конец интервала входит в один из уже существующих интервалов");
                                        return false;
                                }
                                else return true;
                        }
                        else return true;
 
                }
 
}
Видимо как-то не так отрабатывает form->VirtualTableCarStandColors->RecNo

Добавлено через 27 минут
Если говорить проще, то как исключить добавленную строку из перебора?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2019, 10:23
Ответы с готовыми решениями:

Как записать текущий Header колонки dataSet (или dataGridView) в xml?
Доброго времени суток. Пишу таблицу dataGridView в xml-файл через метод dataSet.WriteXml, всё прекрасно работает, но заголовки...

Как взять текущий день и кинуть его значения в тег?
Как взять текущий день и кинуть его значения в тег? &lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta...

Текущий элемент списка - текущий элемент формы
Добрый день. Логика такая Список - выделенный элемент - текущий элемент - подробная информация. Пробывал делать через мастер,...

1
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
27.11.2019, 17:11  [ТС]
Никто не знает?

Добавлено через 2 минуты
В общем, еще больше упрощу вопрос.
Мы можем узнать были ли изменены строки в VirtualTable вот так:
C++
1
form->VirtualTableCarStandColors->UpdateStatus()==usModified
Как узнать какие именно строки были изменены? прохождение с взятием старых значений не подойдет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2019, 17:11
Помогаю со студенческими работами здесь

ArrayList - Как получить текущий индекс с которым работает цикл?
Всем привет. Есть ArrayList со строками. Идет отображение всех элементов из ArrayList с помощью цикла for(). Как получить текущий индекс с...

Как получить текущий элемент
..... el=MainWebView-&gt;page()-&gt;mainFrame()-&gt;findAllElements(&quot;a&quot;).toList();//тут я получаю все элементы с тегом А ...

Как сослаться на текущий элемент управления
Элемент управления получил фокус. Как на него универсально сослаться? Me!Me? :)

Как записать текущий элемент QListWidget в метку?
Как можно записать текущий текст списка(QListWidget) в метку(QLabel)?

Как узнать текущий элемент при клике на listbox
В общем у меня есть элементы в Listbox1 item1 item2 item3 item4 item12 item123 item1234 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru