unit uLibrary; interface uses System.Classes, Uni; procedure LoadDatabaseSettings( uc: TUniConnection; iniFilename: string ); procedure DoQuery( uq: TUniQuery; sql: string ); function CalculateAge( const dob, dt: TDateTime ): Integer; implementation uses System.SysUtils, System.IniFiles, Vcl.Forms, Data.DB; procedure LoadDatabaseSettings( uc: TUniConnection; iniFilename: string ); var iniFile: TIniFile; begin iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + iniFilename ); try uc.Server := iniFile.ReadString('Database', 'Server', uc.Server); uc.Database := iniFile.ReadString('Database', 'Database', uc.Database); uc.Username := iniFile.ReadString('Database', 'Username', uc.Username); uc.Password := iniFile.ReadString('Database', 'Password', uc.Password); finally iniFile.Free; end; end; procedure DoQuery(uq: TUniQuery; sql: string); begin uq.Close; uq.SQL.Text := sql; uq.Open; end; function CalculateAge( const dob, dt: TDateTime): Integer; var age: Integer; y1, m1, d1, y2, m2, d2: Word; begin Result := 0; if dt < dob then Exit; DecodeDate( dob, y1, m1, d1); DecodeDate( dt, y2, m2, d2); age := y2 - y1; // Feb 29 //if ( (m1=2) and (d1=29) ) and ( not IsLeapYear(y2) ) then // d1 := 28; if (m1 = 2) and (d1 = 29) and (not (IsLeapYear (y2))) then begin m1 := 3; d1 := 1; end; if (m2 < m1) or ((m2 = m1) and (d2 < d1)) then Dec(age); Result := age end; end.