lazarus-ccr/components/zmsql/source/zmconnection.pas

190 lines
5.8 KiB
ObjectPascal

{*********************************************************}
{ }
{ ZMSQL }
{ SQL enhanced in-memory dataset }
{ }
{ Original developer: Zlatko Matić, 2011 }
{ e-mail: matalab@gmail.com }
{ Milkovićeva 6, Mala Ostrna, 10370 Dugo Selo, Croatia. }
{ }
{*********************************************************}
{
This file is copyright (c) 2011 by Zlatko Matić
This source code is distributed under
the Library GNU General Public License (see the file
COPYING) with the following modification:
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent modules,
and to copy and distribute the resulting executable under terms of your choice,
provided that you also meet, for each linked independent module, the terms
and conditions of the license of that module. An independent module is a module
which is not derived from or based on this library. If you modify this
library, you may extend this exception to your version of the library, but you are
not obligated to do so. If you do not wish to do so, delete this exception
statement from your version.
If you didn't receive a copy of the file COPYING, contact:
Free Software Foundation
675 Mass Ave
Cambridge, MA 02139
USA
Modifications are made by Zlatko Matić and contributors for purposes of zmsql package.
**********************************************************************}
{-----------------------------------------------------------------------------
The original developer of the code is Zlatko Matić
(matalab@gmail.com or matic.zlatko@gmail.com).
Contributor(s):
Last Modified: 08.02.2015
Known Issues:
History (Change log):global history log is in ZMQueryDataset unit.
-----------------------------------------------------------------------------}
unit ZMConnection;
{$mode objfpc}{$H+}
interface
uses
{$ifdef unix}clocale, cwstring,{$endif}
Classes, SysUtils, janSQL;
type
{ TZMConnection }
TZMConnection = class(TComponent)
private
FConnected: Boolean;
FDatabasePath: String;
//// FDatabasePathFull:String;
FFloatDisplayFormat: String;
FFloatPrecision: Integer;
procedure SetConnected(const AValue: Boolean);
procedure SetDatabasePath(const AValue: String);
//// procedure SetDatabasePathFull(const AValue: String);
procedure SetFloatDisplayFormat(AValue: String);
procedure SetFloatPrecision(AValue: Integer);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure Connect;
procedure Disconnect;
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
//// property DatabasePathFull:String read FDatabasePathFull write SetDatabasePathFull;
procedure GetTableNames(FileList: TStrings);
published
{ Published declarations }
property DatabasePath:String read FDatabasePath write SetDatabasePath;
property Connected:Boolean read FConnected write SetConnected;
property FloatDisplayFormat:String read FFloatDisplayFormat write SetFloatDisplayFormat;
property FloatPrecision:Integer read FFloatPrecision write SetFloatPrecision;
end;
implementation
{ TZMConnection }
procedure TZMConnection.SetDatabasePath(const AValue: String);
begin
if FDatabasePath=AValue then exit;
FDatabasePath:=AValue;
end;
{procedure TZMConnection.SetDatabasePathFull(const AValue: String);
begin
if FDatabasePathFull=AValue then exit;
FDatabasePathFull:=AValue;
end;
}
procedure TZMConnection.SetFloatDisplayFormat(AValue: String);
begin
if FFloatDisplayFormat=AValue then Exit;
FFloatDisplayFormat:=AValue;
end;
procedure TZMConnection.SetFloatPrecision(AValue: Integer);
begin
if FFloatPrecision=AValue then Exit;
FFloatPrecision:=AValue;
end;
procedure TZMConnection.Connect;
var
vApplicationPath, vLastDelimiter:String;
vLastDelimiterPosition:Integer;
begin //Determine the full path
//Set the path
vLastDelimiter:=DirectorySeparator;
//Derermine last delimiter in path.
vLastDelimiterPosition:=LastDelimiter('/\',FDatabasePath);
//If full path
if boolean(vLastDelimiterPosition) then
FDatabasePath{Full} := FDatabasePath + vLastDelimiter
else begin //if relative path
// vApplicationPath:=extractfiledir(application.exename);
vApplicationPath := ExtractFileDir(paramStr(0));
FDatabasePath{Full} := vApplicationPath + vLastDelimiter +
FDatabasePath + vLastDelimiter;
end;
FConnected := True; //// edgarrod71@gmail.com
end;
procedure TZMConnection.Disconnect;
begin
FConnected:=False;
end;
constructor TZMConnection.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TZMConnection.Destroy;
begin
inherited Destroy;
end;
procedure TZMConnection.SetConnected(const AValue: Boolean);
begin
if FConnected=AValue then exit;
if AValue then ///// edgarrod71@gmail.com
Connect ///// Simplified the process
else
Disconnect; ///// and put the ambiguity out
end;
procedure TZMConnection.GetTableNames(FileList: TStrings);
var
SR: TSearchRec;
Path: string;
begin
Path:=FDatabasePath{Full};
if FindFirst(Path + '*.csv', faAnyFile, SR) = 0 then
begin
repeat
if (SR.Attr <> faDirectory) then
begin
FileList.Add(ChangeFileExt(SR.Name, ''));
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;
end.