Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Набор данных для отладки

unit DebugSet;

interface

uses
  DbTables, Classes, Controls, Db, SysUtils;

type
  TDebugNotify = procedure(const DegubStr: string) of object;

  TDebugDataSet = class(TTable)
  private
    FDebugNotify: TDebugNotify;
  protected
    // TDataSet virtual abstract methods
    function AllocRecordBuffer: PChar; override;
    procedure FreeRecordBuffer(var Buffer: PChar); override;
    procedure GetBookmarkData(Buffer: PChar;
      Data: Pointer); override;
    function GetBookmarkFlag(Buffer: PChar):
      TBookmarkFlag; override;
    function GetFieldData(Field: TField;
      Buffer: Pointer): Boolean; override;
    function GetRecord(Buffer: PChar; GetMode: TGetMode;
      DoCheck: Boolean): TGetResult; override;
    function GetRecordSize: Word; override;
    procedure InternalAddRecord(Buffer: Pointer;
      Append: Boolean); override;
    procedure InternalClose; override;
    procedure InternalDelete; override;
    procedure InternalFirst; override;
    procedure InternalGotoBookmark(
      Bookmark: Pointer); override;
    procedure InternalHandleException; override;
    procedure InternalInitFieldDefs; override;
    procedure InternalInitRecord(Buffer: PChar); override;
    procedure InternalLast; override;
    procedure InternalOpen; override;
    procedure InternalPost; override;
    procedure InternalSetToRecord(Buffer: PChar); override;
    function IsCursorOpen: Boolean; override;
    procedure SetBookmarkFlag(Buffer: PChar;
      Value: TBookmarkFlag); override;
    procedure SetBookmarkData(Buffer: PChar;
      Data: Pointer); override;
    procedure SetFieldData(Field: TField;
      Buffer: Pointer); override;
    // TDataSet virtual methods (optional)
    procedure InternalRefresh; override;
    function GetRecordCount: Integer; override;
    procedure SetRecNo(Value: Integer); override;
    function GetRecNo: Integer; override;
  public
    property OnDebugNotify: TDebugNotify
      read FDebugNotify write FDebugNotify;
  end;

implementation

procedure TDebugDataSet.InternalOpen;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalOpen');
  inherited;
end;

procedure TDebugDataSet.InternalInitFieldDefs;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalInitFieldDefs');
  inherited;
end;

procedure TDebugDataSet.InternalClose;
begin
  FDebugNotify('InternalClose');
  inherited;
end;

function TDebugDataSet.IsCursorOpen: Boolean;
begin
  Result := inherited IsCursorOpen;
  if Result then
    if Assigned(FDebugNotify) then
      FDebugNotify('IsCursorOpen: True')
    else if Assigned(FDebugNotify) then
      FDebugNotify('IsCursorOpen: False');
end;

procedure TDebugDataSet.InternalGotoBookmark(Bookmark: Pointer);
begin
  FDebugNotify('InternalGotoBookmark' +
    IntToStr(Integer(Bookmark)));
  inherited;
end;

procedure TDebugDataSet.InternalSetToRecord(Buffer: PChar);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalSetToRecord');
  inherited;
end;

function TDebugDataSet.GetBookmarkFlag(
  Buffer: PChar): TBookmarkFlag;
begin
  FDebugNotify('GetBookmarkFlag');
  Result := inherited GetBookmarkFlag(Buffer);
end;

procedure TDebugDataSet.SetBookmarkFlag(Buffer: PChar;
  Value: TBookmarkFlag);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('SetBookmarkFlag');
  inherited;
end;

procedure TDebugDataSet.GetBookmarkData(
  Buffer: PChar; Data: Pointer);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('GetBookmarkData');
  inherited;
end;

procedure TDebugDataSet.SetBookmarkData(
  Buffer: PChar; Data: Pointer);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('SetBookmarkData');
  inherited;
end;

function TDebugDataSet.GetRecordSize: Word;
begin
  Result := inherited GetRecordSize;
  if Assigned(FDebugNotify) then
    FDebugNotify('GetRecordSize: ' + IntToStr(Result));
end;

function TDebugDataSet.AllocRecordBuffer: PChar;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('AllocRecordBuffer');
  Result := inherited AllocRecordBuffer;
end;

procedure TDebugDataSet.InternalInitRecord(Buffer: PChar);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalInitRecord');
  inherited;
end;

procedure TDebugDataSet.FreeRecordBuffer(var Buffer: PChar);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('FreeRecordBuffer');
  inherited;
end;

function TDebugDataSet.GetRecord(Buffer: PChar;
  GetMode: TGetMode; DoCheck: Boolean): TGetResult;
begin
  case GetMode of
    gmNext:
      if Assigned(FDebugNotify) then
        FDebugNotify('GetRecord: Next');
    gmPrior:
      if Assigned(FDebugNotify) then
        FDebugNotify('GetRecord: Prior');
    gmCurrent:
      if Assigned(FDebugNotify) then
        FDebugNotify('GetRecord: Current');
  end;
  Result := inherited GetRecord(Buffer, GetMode, DoCheck);
end;

procedure TDebugDataSet.InternalFirst;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalFirst');
  inherited;
end;

procedure TDebugDataSet.InternalLast;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalLast');
  inherited;
end;

procedure TDebugDataSet.InternalPost;
begin
  if State = dsEdit then
    if Assigned(FDebugNotify) then
      FDebugNotify('InternalPost ***** dsEdit')
    else if Assigned(FDebugNotify) then
      FDebugNotify('InternalPost ***** dsInsert');
  inherited;
end;

procedure TDebugDataSet.InternalAddRecord(
  Buffer: Pointer; Append: Boolean);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalAddRecord ****');
  inherited;
end;

procedure TDebugDataSet.InternalDelete;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalDelete');
  inherited;
end;

function TDebugDataSet.GetFieldData(
  Field: TField; Buffer: Pointer): Boolean;
begin
  Result := inherited GetFieldData(Field, Buffer);
end;

procedure TDebugDataSet.SetFieldData(Field: TField; Buffer: Pointer);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('SetFieldData');
  inherited;
end;

function TDebugDataSet.GetRecordCount: Longint;
begin
  Result := inherited GetRecordCount;
  if Assigned(FDebugNotify) then
    FDebugNotify('GetRecordCount: ' + IntToStr(Result));
end;

function TDebugDataSet.GetRecNo: Longint;
begin
  Result := inherited GetRecNo;
  if Assigned(FDebugNotify) then
    FDebugNotify('GetRecNo: ' + IntToStr(Result));
end;

procedure TDebugDataSet.SetRecNo(Value: Integer);
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('SetRecNo: ' + IntToStr(Value));
  inherited;
end;

procedure TDebugDataSet.InternalRefresh;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalRefresh');
  inherited;
end;

procedure TDebugDataSet.InternalHandleException;
begin
  if Assigned(FDebugNotify) then
    FDebugNotify('InternalHandleException');
  inherited;
end;

end.
unit DebugDSForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs, DebugSet, Grids, DBGrids, DBCtrls, ExtCtrls,
  StdCtrls, Db, DBTables, Menus;

type
  TForm1 = class(TForm)
    Table1: TTable;
    DataSource1: TDataSource;
    ListBox1: TListBox;
    Splitter1: TSplitter;
    Panel1: TPanel;
    DBNavigator1: TDBNavigator;
    DBGrid1: TDBGrid;
    Panel2: TPanel;
    BtnOpen: TButton;
    BtnClose: TButton;
    BtnClear: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnClearClick(Sender: TObject);
    procedure BtnOpenClick(Sender: TObject);
    procedure BtnCloseClick(Sender: TObject);
  private
    TableClone: TDebugDataSet;
  public
    procedure LocalNotify(const DebugText: string);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Table1.Close;
  TableClone := TDebugDataSet.Create(nil);
  TableClone.DatabaseName := Table1.DatabaseName;
  TableClone.TableName := Table1.TableName;
  TableClone.OnDebugNotify := LocalNotify;
  DataSource1.DataSet := TableClone;
end;

procedure TForm1.LocalNotify(const DebugText: string);
var
  nItem: Integer;
begin
  if Assigned(ListBox1) then
  begin
    // add the text to the string
    nItem := ListBox1.Items.Add(DebugText);
    // select the new item
    ListBox1.ItemIndex := nItem;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  TableClone.Close;
  TableClone.Free;
end;

procedure TForm1.BtnClearClick(Sender: TObject);
begin
  ListBox1.Items.Clear;
end;

procedure TForm1.BtnOpenClick(Sender: TObject);
begin
  TableClone.Active := True;
end;

procedure TForm1.BtnCloseClick(Sender: TObject);
begin
  TableClone.Active := False;
end;

end.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay