{*********************************************************} { } { 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.