Суббота, 27.04.2024, 03:59
Приветствую Вас Гость
Меню сайта


Копилка для дальнейшего развития ресурса.
 
Форма входа
Интересное
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Программирование на Delphi.

Программирование

Главная » FAQ » Базы данных


unit Project1;

interface

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

type
  TfmMain = class(TForm)
    btnNewDB: TButton;
    DBGrid1: TDBGrid;
    btnSearch: TButton;
    Edit1: TEdit;
    procedure btnNewDBClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnSearchClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmMain: TfmMain;

implementation

{$R *.dfm}

uses DB, ADODB, ComObj;

const
  dbName            : String = 'mybase.mdb';
  MasterTable       : String = 'MyMasterTable';

var
  ADOCommand        : TADOCommand;
  ADOConnection     : TADOConnection;
  ADODataSetMaster  : TADODataSet;
  MasterDataSource  : TDataSource;
  strCmdText        : String;
  strConnectString  : String;


procedure TfmMain.FormCreate(Sender: TObject);
begin
  // Строка для подключения к базе
  strConnectString := 'Provider=Microsoft.Jet.OLEDB.4.0' +
                      ';Data Source=' + dbName +
                      ';Jet OLEDB:Engine Type=5';

  // Создаём переменные и подключаемся к базе
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.ConnectionString := strConnectString;
  ADOConnection.LoginPrompt := False;
  ADOConnection.Mode := cmReadWrite;
  ADOConnection.Connected := True;

  ADOCommand := TADOCommand.Create(nil);
  ADOCommand.Connection := ADOConnection;
  ADOCommand.CommandType := cmdText;

  ADODataSetMaster := TADODataSet.Create(nil);
  ADODataSetMaster.Connection := ADOConnection;
  ADODataSetMaster.CommandType := cmdText;
  ADODataSetMaster.CommandText := 'SELECT * FROM ' + MasterTable;
  ADODataSetMaster.Active := True;

  MasterDataSource := TDataSource.Create(nil);
  MasterDataSource.DataSet := ADODataSetMaster;

  // Выводим данные в DBGrid
  DBGrid1.DataSource := MasterDataSource;
end;

procedure TfmMain.btnNewDBClick(Sender: TObject);
var
  ADOX: OLEVariant;
  i: integer;
  j: int64;
begin
  // Создаем базу
  ADOX := CreateOleObject('ADOX.Catalog');
  ADOX.Create(strConnectString);
  ADOX := NULL;

  // Подключаемся к созданной базе
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.ConnectionString := strConnectString;
  ADOConnection.LoginPrompt := False;
  ADOConnection.Mode := cmReadWrite;
  ADOConnection.Connected := True;

  ADOCommand := TADOCommand.Create(nil);
  ADOCommand.Connection := ADOConnection;
  ADOCommand.CommandType := cmdText;

  // Создаём в базе таблицу
  strCmdText := 'CREATE TABLE ' + MasterTable +
                '([id] COUNTER,'+
                '[ИНН] DECIMAL PRIMARY KEY NOT NULL UNIQUE,' +
                '[Имя] VARCHAR(150) WITH COMPRESSION,' +
                '[Адрес] VARCHAR(150) WITH COMPRESSION,' +
                '[Телефон] VARCHAR(150) WITH COMPRESSION)';
  ADOCommand.CommandText := strCmdText;
  ADOCommand.Execute;

  // Просто пример, добавляем данные в таблицу
  j := 665906037862;
  for i := 193 to 196 do begin
    strCmdText := 'INSERT INTO ' + MasterTable +
                  '(ИНН, Имя, Адрес, Телефон) VALUES'+
                  '("' + IntToStr(j) + '", "'+Chr(Ord(i))+'иванов", "улица, дом", "(343)123-45-67")';
    ADOCommand.CommandText := strCmdText;
    ADOCommand.Execute;
    Inc(j, 100000000000);
  end;
end;

procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Освобождаем переменные
  if ADOConnection <> nil then begin
    ADOConnection.Connected := False;
    ADOConnection.Free;
    ADOConnection := nil;
  end;
  if ADOCommand <> nil then begin
    ADOCommand.Free;
    ADOCommand := nil;
  end;
  if ADODataSetMaster <> nil then begin
    ADODataSetMaster.Active := False;
    ADODataSetMaster := nil;
  end;
  if MasterDataSource <> nil then begin
    MasterDataSource.Free;
    MasterDataSource := nil;
  end;
end;

procedure TfmMain.btnSearchClick(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.DisableControls;

  // Пример, поиск в таблице по полю [Имя], по известному началу строки
  ADODataSetMaster.Active := False;
  strCmdText := 'SELECT * FROM '+ MasterTable + ' WHERE [Имя] LIKE "'+ Edit1.Text + '%"';
  ADODataSetMaster.CommandText := strCmdText;
  ADODataSetMaster.Active := True;

  DBGrid1.DataSource.DataSet.EnableControls;
end;

end.

1-5 6-6