unit DataModule;

interface

uses
  Windows, SysUtils, Classes, DB, ADODB, Forms, Dialogs;

const cnMaxLen = 255;

type
  TDM = class(TDataModule)
    ADOTable1: TADOTable;
    ds: TDataSource;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);

  private
    function DajNazweKomputera() : String;
	 function GetConnectionString() : String;

  public

  end;

var
  DM: TDM;

implementation

{$R *.dfm}
{------------------------------------------------------------------------------}
function TDM.DajNazweKomputera() : String;
var
	sCompName     : String;
   dwCompNameLen : DWord;

begin
	dwCompNameLen := cnMaxLen - 1;
   SetLength(sCompName, cnMaxLen);
   GetComputerName(Pchar(sCompName), dwCompNameLen);
   SetLength(sCompName, dwCompNameLen);

   Result := sCompName;

   if dwCompNameLen = cnMaxLen-1 then
   begin
      Result := '';
   end
   else begin
      Result := UpperCase(Result[1]) + LowerCase(Copy(Result,2,Length(Result)-1));
   end;
end;

function TDM.GetConnectionString() : String;
var
   cs : String;
   fn : String;
   fh : TextFile;

begin
	cs := '';
   fn := ExtractFilePath(Application.ExeName) + 'cs.txt';
   if FileExists(fn) then
   begin
   	try
			Reset(fh, fn);
      	Readln(fh, cs);
      	cs := Trim(cs);
      finally
	      CloseFile(fh);
      end;
   end;

   Result := cs;
end;

procedure TDM.DataModuleDestroy(Sender: TObject);
begin
   ADOTable1.Close();
end;

procedure TDM.DataModuleCreate(Sender: TObject);
var
	isOK    : Boolean;
   cs      : String;
   bBrakCS : Boolean;
   nazwak  : String;

begin
	ADOTable1.Close();
   ADOTable1.TableDirect := true;
   ADOTable1.ReadOnly    := true;

   (*
   próba połączenia z lokalnym serwerem SQL Server 2005 Express

   dla lokalnego połączenia z MS SQL Server 2005 Express - z bazą danych Biblioteka - CS jest zbudowane nastepująco:                                                        tutaj nazwa komputera + \SQLEXPRESS

   //                                                                                                             tutaj nazwa komputera + \SQLEXPRESS
	Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Biblioteka;Data Source=NAZWA_KOMPUTERA\SQLEXPRESS

	*)
   nazwak := DajNazweKomputera();
	// Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Biblioteka;Data Source=DOM-KB174DDLM\SQLEXPRESS
   cs := 'Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Biblioteka;Data Source=' + nazwak + '\SQLEXPRESS';

   isOK := false;
	try
      if cs <> '' then
      begin
	      ADOTable1.ConnectionString := cs;
         ADOTable1.Open();
         isOK := true;
      end
      else begin
         bBrakCS := true;
      end;
	except
		ShowMessage('Błąd połączenia z serwerem bazy danych');
      Application.Terminate();
   end;

   // jeżeli połączenie zlokalnym serwerem się udało
   if isOK then
   begin
   	exit;
   end;


	// jeżeli połaczenie z lokalnym serwerem się nie udało to pobieram CS z pliku CS.TXT
   isOK := false;
	try
      if cs <> '' then
      begin
         ADOTable1.ConnectionString := cs;
         ADOTable1.Open();
         isOK := true;
      end
      else begin
         bBrakCS := true;
      end;
	except
		ShowMessage('Błąd połączenia z serwerem bazy danych - ZDEFINUJ WŁASNY ConnectionString');
      Application.Terminate();
   end;
end;

end.
