Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2014, 13:19   #1
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию Сравнить дваdbgrid -а

Доброе время суток! помогите решить задачу! Нужно сравнить два набора данных в разных dbgrid-ах, Делаю вот так:

Код:
dbgrd1.DataSource.DataSet.First;
While not dbgrd1.DataSource.DataSet.eof do begin
       datus1:=dbgrd1.DataSource.DataSet.FieldByName('Дата').Value;
       dbgrd2.DataSource.DataSet.First;
           While not dbgrd2.DataSource.DataSet.eof do begin
              datus2:=dbgrd2.DataSource.DataSet.FieldByName('Дата').Value;
              try
                if datus1=datus2 then edt1.Text:='Ура' else
                dbgrd2.DataSource.DataSet.Next;;
              Finally
                    end;
           end;
           try
           if datus1=datus2 then edt1.Text:='Ура' else
           dbgrd1.DataSource.DataSet.Next;
             Finally
          end;
          end;
          end;
Помогите кто чем может!

Последний раз редактировалось Stilet; 05.06.2014 в 14:17.
alex89d вне форума Ответить с цитированием
Старый 05.06.2014, 13:29   #2
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Если данные из одной базы данных, то это проще сделать средствами SQL, в котором данные и сравнивают.
ReportCube вне форума Ответить с цитированием
Старый 05.06.2014, 15:35   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
ok:=false;
dbgrd1.DataSource.DataSet.First;
While not dbgrd1.DataSource.DataSet.eof do begin
  datus1:=dbgrd1.DataSource.DataSet.FieldByName('Дата').Value;
  dbgrd2.DataSource.DataSet.First;
  While not dbgrd2.DataSource.DataSet.eof do begin
    datus2:=dbgrd2.DataSource.DataSet.FieldByName('Дата').Value;
    if datus1=datus2 then ok:=true;
    if ok then break else dbgrd2.DataSource.DataSet.Next;
  end;
  if ok then break else dbgrd1.DataSource.DataSet.Next;
end;
Код:
ok:=false;
dbgrd1.DataSource.DataSet.First;
While not dbgrd1.DataSource.DataSet.eof do begin
  datus1:=dbgrd1.DataSource.DataSet.FieldByName('Дата').Value;
  ok:=dbgrid2.Locate('Дата', datus1, []);
  if ok then break else dbgrd1.DataSource.DataSet.Next;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.06.2014 в 15:39.
evg_m вне форума Ответить с цитированием
Старый 05.06.2014, 15:49   #4
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
Радость

БД разные, поэтому не SQL!
evg_m cпасибо! Очень выручил!
alex89d вне форума Ответить с цитированием
Старый 06.06.2014, 14:46   #5
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
Вопрос

А как вывести уникальные зачения из dbgrid1 и dbgrid2 в memo отсеяв одинаковые!
alex89d вне форума Ответить с цитированием
Старый 06.06.2014, 15:06   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

if ok then break else dbgrd1.DataSource.DataSet.Next; //заменить на
Код:
if not ok then begin
 s:= <текст который хотите добавить>
 memo1.lines.add(s);
end; // обращаю внимание ЗДЕСЬ НЕТ "else"

dbgrd1.DataSource.DataSet.Next; //должна работать всегда !!! (это то чего не было в вашем первоначальном коде)
вывод данных уникальных для DBGrid1 (те из первой для которых нет "дубля" во второй).
для уникальных наоборот надо тот же цикл наоборот.
Код:
procedure ScanUnique(ds1, ds2);
begin
 //здесь цикл с заменой "глобальных" переменных 
 // Dgrid1.DataSource.Dataset ->ds1
 // Dgrid2.DataSource.Dataset ->ds2

end;
Код:
ScanUnique( DBgrid1.Datasource.Dataset, DBgrid2.DataSource.DataSet);
// и наоборот
ScanUnique( DBgrid2.Datasource.Dataset, DBgrid1.DataSource.DataSet);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.06.2014 в 15:14.
evg_m вне форума Ответить с цитированием
Старый 06.06.2014, 15:10   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Разные базы не обязательно препятствие для SQL. СУБД какое?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.06.2014, 15:28   #8
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

И звените за наглость, но можно на примере вложенного файла!
Вложения
Тип файла: rar проверка.rar (333.1 Кб, 8 просмотров)
alex89d вне форума Ответить с цитированием
Старый 06.06.2014, 18:41   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А-а, Excel. SQL выборку из двух таблиц можно применить, но с ограничениями - либо через BDE, либо ADO, но линкуя через другую СУБД, например ACCESS или MS SQL. Думаю ТС это не понравится, поэтому без примеров
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.06.2014 в 18:57.
Аватар вне форума Ответить с цитированием
Старый 06.06.2014, 20:48   #10
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Объедините в одной книге два листа и сравнивайте через SQL как отдельные таблицы
ReportCube вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить q181 Microsoft Office Excel 3 19.12.2011 14:02
сравнить строки Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.08.2011 08:56
Сравнить delfin07 Помощь студентам 0 03.06.2011 01:56
сравнить 2 массива... pobedin Паскаль, Turbo Pascal, PascalABC.NET 8 19.08.2010 09:03
Сравнить время BlackOmen PHP 2 23.09.2008 09:04