Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 11
Delphi 6-7

Перебор двух таблиц (ADO)

26.05.2018, 20:42. Показов 2110. Ответов 7
Метки ado (Все метки)

Студворк — интернет-сервис помощи студентам
Хай всем. Есть проблема. Есть две таблицы расположенные на одной форме связь ADO, table и source все прилагается,в двух таблицах есть столбец с датами, я делаю обработчик на кнопку, которая находиться на другой форме в которой я должен сравнить строку с датой из одной таблицы, со строкой с датой из второй таблицы и вывести разницу в днях между этими датами, если разницы нет ничего не делать. У меня есть набросок, все бы хорошо, но он сравнивает только последние записи в таблицах, прошу помощи, я не гуру сразу не ругайте.

Это одна часть моей задумки, вторая состоит в том, чтобы по нажатию все той-же кнопки, каждая разница записывалась в таблицу отдельной строкой, т.е. если две даты различаются, то в таблицу добавляется две строки и в каждой указывается разница между датой.
Таблицы с которыми работаю: TPogP, TPogF.
Delphi
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
procedure TFPogPen.btn1Click(Sender: TObject);
var i,n,s:Integer; d,b:TDateTime;
begin
i:=DM.Tpogp.RecNo;
n:=DM.TPogF.RecNo;
DM.TPogP.DisableControls;
DM.TPogF.DisableControls;
DM.TPogP.First;
DM.TPogf.First;
while not (DM.TPogP.Eof or DM.TPogF.Eof) do
begin
  d:=FPogash.DBGridEh1.DataSource.DataSet.FieldByName('Дата').AsDateTime;
  b:=FPogash.DBGridEh2.DataSource.DataSet.FieldByName('Дата').AsDateTime;
    if (d<b) then
      begin
        s:=DaysBetween(b,d);
        lbl4.caption:=inttostr(s);
      end
    else lbl4.Caption:='o';
  dm.TPogP.Next;
  dm.TPogF.Next;
end;
DM.TPogF.RecNo:=n;
DM.Tpogp.RecNo:=i;
DM.TPogF.EnableControls;
DM.TPogP.EnableControls;
end;
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2018, 20:42
Ответы с готовыми решениями:

Связка двух таблиц, выборка, ADO
Добрый день! Есть 2 таблицы в Access: клиенты и заказы. В Access связь между &quot;клиенты.личный номер&quot; и &quot;заказы.№ клиента&quot;....

Запрос на соединение двух таблиц связью "один ко многим" в ADO
Как правильно записать запрос на создание связи между таблицами типа &quot;один ко многим&quot;? Пишу такой запрос: ...

Динамическое соединение таблиц ADO
Имеются две таблички Departament(её поля NumDepartament(ключевое,числовое),NameDepartament(строковое)) и Dolgnost (её поля NumDolgnost(не...

7
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
26.05.2018, 22:28
Лучший ответ Сообщение было отмечено jeniaiking как решение

Решение

Цитата Сообщение от jeniaiking Посмотреть сообщение
но он сравнивает только последние записи в таблицах
Этот неизвестный "ОН" сравнивает все записи, но показывает Вам только последнюю... А как Вы хотели, если выводите в метку... На первой итерации цикла вы сравнили, полученный результат записали в метку. На следующем шаге Вы сравнили другие значения, а результат сравнения записали опять в ту же метку... Где предыдущий результат? Правильно, его перезаписали... И так до конца, пока, в итоге не покажет результат сравнения последних записей...
Варианты решения:
1. Дописывать, а не переписывать текст в метке
Delphi
1
2
3
4
5
6
Label4.Caption := '';
while not (DM.TPogP.Eof or DM.TPogF.Eof) do
...
 lbl4.caption := lbl4.Caption + inttostr(s) + ' '; 
end
else lbl4.Caption := lbl4.Caption + 'o ';
2. Использовать что-либо многострочное, например Мемо
Delphi
1
2
3
4
5
6
Memo1.Lines.Clear;
while not (DM.TPogP.Eof or DM.TPogF.Eof) do
...
 Memo1.Lines.Add(inttostr(s)); 
end
else Memo1.Lines.Add('o ');
0
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 11
26.05.2018, 23:39  [ТС]
Label я использую только для проверки результата, до этого изменив даты так, что в одной из строк дата была больше, и проверяю по одному значению, НЕ ДЕЛАЮ СРАЗУ МНОГо, а по одному, и попутно проверяю в лейбле результат, когда я меняю дату в ласт строке то все работает, а когда в первой или второй, то ничего не выводит .

Добавлено через 32 минуты
Цитата Сообщение от D1973 Посмотреть сообщение
1. Дописывать, а не переписывать текст в метке
DelphiВыделить код
1
2
3
4
5
6
Label4.Caption := '';
while not (DM.TPogP.Eof or DM.TPogF.Eof) do
...
*lbl4.caption := lbl4.Caption + inttostr(s) + ' ';
end
else lbl4.Caption := lbl4.Caption + 'o ';
Я сделал как вы описали в первом методе, оно выводит все значения между датами, только тогда, когда все значения во второй таблице больше, а когда одно из них равно, то просто выводит последнее.

Добавлено через 22 минуты
Я решил проблему, просто убрав условие, оно мешало считать отдельные даты, прерывая цикл, спасибо )
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,170
Записей в блоге: 3
27.05.2018, 00:28
а зачем построчно сравнивать 2 набора данных, когда это можно сделать 1 запросом?
0
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 11
27.05.2018, 00:31  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
а зачем построчно сравнивать 2 набора данных, когда это можно сделать 1 запросом?
Чтобы в таблицу занести отдельно разницу между каждой отдельной строкой.
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,170
Записей в блоге: 3
27.05.2018, 00:35
это тоже можно сделать этим же запросом
0
27.05.2018, 02:09

Не по теме:

Цитата Сообщение от qwertehok Посмотреть сообщение
это тоже можно сделать этим же запросом
Да но это другой скилл. Чтобы его освоить нужно пройти несколько уровней, а времени нет. Но хуже всего что трейнеров для этой задачи тоже нет. :)

0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
27.05.2018, 08:27
время вещь у всех одинаковая,
если кому-то нет времени разбираться как правильно,
то у кого-то нет времени помогать делать неправильно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2018, 08:27
Помогаю со студенческими работами здесь

Соединение двух таблиц, фильтрация данных по данным из этих 2 таблиц
Помогите, пожалуйста, написать запрос SQL в Delphi 7. Есть форма, на ней кнопка и DBGrid. DBGrid привязан к таблице Table_Dislokaciua....

Access ADO открытие таблиц в FormCreate
Всем доброго дня! Возникла необходимость освоить работу в Delphi с БД но как то с самого начала не заладилось :-( Вообщем есть БД...

Cоздать бд отдела кадров с ADO Delphi7 использование таблиц с Access
Помогите!!!!!! мне мне нужно создать бд отдела кадров предприятия. я создала 3таблиц на аксесе и их связяла с связью один ко многим и...

Перебор таблиц на другой форме
Здравствуйте, скажите как правильно написать поиск таблицы и действие с ней на другой форме. Имеется 9 таблиц на форме №1, нужно в них...

ADO подключение таблиц из МДБ
Есть Combobox и кнопка В Combobox записываю все имена табличек из МДБ ADOConnection1-&gt;GetTableNames(ComboBox1-&gt;Items,true); ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru