www.pudn.com > Excel.zip > MainD.pas


unit MainD; 
 
interface 
 
uses 
  SysUtils, Classes, DB, ADODB, DBTables; 
 
type 
  TMainDm = class(TDataModule) 
    ExcelConn: TADOConnection; 
    ExcelDs: TADODataSet; 
    ExcelSrc: TDataSource; 
    ExcelCmd: TADOCommand; 
    DemoDb: TDatabase; 
    ItemsTable: TTable; 
    procedure ExcelDsAfterOpen(DataSet: TDataSet); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
    procedure CreateExcelFile; 
    procedure LoadData; 
    procedure OpenExcelFile; 
    procedure RefreshExcelData; 
  end; 
 
var 
  MainDm: TMainDm; 
 
implementation 
 
uses Variants, MainF; 
 
{$R *.dfm} 
 
const 
  ConnStr1         = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; 
  ConnStr2         = ';Extended Properties=excel 8.0;"";'; 
  XlsName          = 'Items'; 
  XlsDir           = 'w:\di\excel\'; 
  XlsPath          = XlsDir + XlsName + '.xls'; 
  XlsTemplatePath  = XlsDir + XlsName + 'Template.xls'; 
  XlsWorksheet     = XlsName + '$'; 
 
procedure TMainDm.CreateExcelFile; 
var 
  TempFs:           TFileStream; 
  ExcelFs:          TFileStream; 
begin 
  ExcelConn.Close; 
  TempFs := TFileStream.Create(XlsTemplatePath, fmOpenRead); 
  try 
    ExcelFs := TFileStream.Create(XlsPath, fmCreate); 
    try 
      ExcelFs.CopyFrom(TempFs, 0); 
    finally 
      ExcelFs.Free; 
    end; //try 
  finally 
    TempFs.Free; 
  end; //try 
end; 
 
procedure TMainDm.OpenExcelFile; 
begin 
  ExcelConn.ConnectionString := ConnStr1 + XlsPath + ConnStr2; 
  ExcelDs.CommandText := XlsWorksheet; 
  ExcelDs.Open; 
end; 
 
procedure TMainDm.LoadData; 
var 
  I:          Integer; 
begin 
  MainForm.StatusBar.SimpleText := 'Loading...'; 
  ExcelDs.DisableControls; 
  try 
    ItemsTable.Open; 
    while not ItemsTable.EOF do 
    begin 
      ExcelDs.Insert; 
      for I := 0 to ItemsTable.Fields.Count - 1 do 
        ExcelDs.Fields[I].Assign(ItemsTable.Fields[I]); 
      ExcelDs.Post; 
      ItemsTable.Next; 
    end; //while 
  finally 
    ExcelDs.EnableControls; 
    MainForm.StatusBar.SimpleText := ''; 
  end; //try 
end; 
 
procedure TMainDm.RefreshExcelData; 
var 
  CurrentRec:          Integer; 
begin 
  CurrentRec := ExcelDs.RecNo; 
  ExcelDs.Close; 
  ExcelDs.Open; 
  ExcelDs.RecNo := CurrentRec; 
end; 
 
procedure TMainDm.ExcelDsAfterOpen(DataSet: TDataSet); 
var 
  I:           Integer; 
begin 
  for I := 0 to ExcelDs.Fields.Count - 1 do 
    ExcelDs.Fields[I].DisplayWidth := 15; 
end; 
 
end.