Показать сообщение отдельно
  #4  
Старый 22.07.2009, 21:50
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

попробуй так select.rar

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, ExtCtrls;

type
  MyType1 = record
    zap1: integer;
    zap2: string;
    zap3: integer;
end;

type
  MyType2 = record
    zap1: integer;
    zap2: string;
    zap3: integer;
  end;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    ADOTable2: TADOTable;
    ADOTable1key: TAutoIncField;
    ADOTable1familiy: TWideStringField;
    ADOTable1imu: TWideStringField;
    ADOTable1vozrast: TWideStringField;
    ADOTable2keyy: TAutoIncField;
    ADOTable2familiy: TWideStringField;
    ADOTable2imu: TWideStringField;
    ADOTable2vozrast: TWideStringField;
    procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    procedure DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  aa: array of MyType1;
  bb: array of MyType2;
implementation

{$R *.dfm}


function findAA(const S:integer):integer;
var
i:integer;
begin
 Result:=0;
  for i:=0 to Length(bb)-1 do
   begin
    if aa[S].zap2 = bb[i].zap2 then
     begin
      Result:= aa[S].zap1;
      exit;
     end;
   end;
end;

function findBB(const S:integer):integer;
var
i:integer;
begin
 Result:=0;
  for i:=0 to Length(aa)-1 do
   begin
    if bb[S].zap2 = aa[i].zap2 then
     begin
      Result:= bb[S].zap1;
      exit;
     end;
   end;
end;

//--------------------------------------------------------------------------

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
i:integer;
begin
if  Length(aa)>0 then
begin
i:=DBGrid1.DataSource.DataSet.RecNo;
if  DBGrid1.DataSource.DataSet.RecNo = aa[i-1].zap3  then
 begin
 dbgrid1.Canvas.Brush.Color := cllime;
  DBGrid1.Canvas.Font.Color := clRed;
   dbGrid1.DefaultDrawDataCell(Rect,Field,State);
end;
end;
end;

procedure TForm1.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
i:integer;
begin
if  Length(bb)>0 then
begin
i:=DBGrid2.DataSource.DataSet.RecNo;
if  DBGrid2.DataSource.DataSet.RecNo = bb[i-1].zap3  then
 begin
 dbgrid2.Canvas.Brush.Color := cllime;
  DBGrid2.Canvas.Font.Color := clRed;
   dbGrid2.DefaultDrawDataCell(Rect,Field,State);
end;
end;
end;

//-----------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
i1, i2, p1, p2 : integer;
begin
DBGrid1.DataSource.DataSet.First;
DBGrid2.DataSource.DataSet.First;
p1 := DBGrid1.DataSource.DataSet.RecordCount-1 ;
p2 := DBGrid2.DataSource.DataSet.RecordCount-1 ;

 for i1:=0  to p1 do
  begin
    SetLength(aa, Length(aa) + 1);
    aa[i1].zap1:= DBGrid1.DataSource.DataSet.RecNo;
    aa[i1].zap2:= DBGrid1.DataSource.DataSet.FieldValues['vozrast'];
    DBGrid1.DataSource.DataSet.Next;
  end;
 for i2:=0  to p2 do
  begin
    SetLength(bb, Length(bb) + 1);
    bb[i2].zap1:= DBGrid2.DataSource.DataSet.RecNo;
    bb[i2].zap2:= DBGrid2.DataSource.DataSet.FieldValues['vozrast'];
    DBGrid2.DataSource.DataSet.Next;
  end;

  for i1:=0  to Length(aa)-1 do
   begin
   aa[i1].zap3 := findAA(i1);
   end;

  for i2:=0  to Length(bb)-1 do
   begin
   bb[i2].zap3 := findBB(i2);
   end;
DBGrid1.DataSource.DataSet.First;
DBGrid2.DataSource.DataSet.First;
end;

end.
вариант не идеальный
Ответить с цитированием