diff --git a/Demo/WebDemo/Publish/Resources/config.json b/Demo/WebDemo/Publish/Resources/config.json index 158cbe6197218faac257dafcb7e4c79283a8a6d7..9a0062cdbc25586b6983770d98370aeb9ff11dce 100644 --- a/Demo/WebDemo/Publish/Resources/config.json +++ b/Demo/WebDemo/Publish/Resources/config.json @@ -67,8 +67,21 @@ "POOL_CleanupTimeout": "30000", "POOL_ExpireTimeout": "90000", "POOL_MaximumItems": "50" - }, - + }, + "db4": { + "DriverID": "PG", + "Server": "127.0.0.1", + "Port": "5432", + "Database": "test", + "User_Name": "postgres", + "Password": "postgres", + "CharacterSet": "utf8", + "Compress": "False", + "Pooled": "True", + "POOL_CleanupTimeout": "30000", + "POOL_ExpireTimeout": "90000", + "POOL_MaximumItems": "50" + }, "db5": { "DriverID": "Ora", "CharacterSet": "UTF8", diff --git a/MVC5.0/SDK/MVC.DB.pas b/MVC5.0/SDK/MVC.DB.pas index ab0ba003881a8ee2134f5b4bc0e8376bf65fbd74..c7fa70a1da57748a34cd6fd6be4b5f569f64140f 100644 --- a/MVC5.0/SDK/MVC.DB.pas +++ b/MVC5.0/SDK/MVC.DB.pas @@ -42,7 +42,7 @@ type procedure SetOverTime(const Value: TDateTime); function PageMySql(sql: ISQL; pNumber, pSize: Integer): IDataSet; function PageSqlite(sql: ISQL; pNumber, pSize: Integer): IDataSet; - + function PagePostgreSQL(sql: ISQL; pNumber, pSize: Integer): IDataSet; function PageMSSQL08(sql: ISQL; pNumber, pSize: Integer): IDataSet; function PageMSSQL12(sql: ISQL; pNumber, pSize: Integer): IDataSet; function PageMSSQL(sql: ISQL; pNumber, pSize: Integer): IDataSet; @@ -547,6 +547,35 @@ begin end; end; +function TDBItem.PagePostgreSQL(sql: ISQL; pNumber, pSize: Integer): IDataSet; +var + sq: string; + count: integer; + dataset: IDataSet; +begin + dataset := nil; + if (not TryConn) or (Trim(sql.getSelect) = '') or (Trim(sql.getFrom) = '') then + Exit; + try + try + sq := 'select count(1) as N' + sql.getFrom; + sq := filterSQL(sq); + count := Conn.ExecSQLScalar(sq); + sq := sql.getSelect + sql.getFrom + ' ' + sql.getOrder + ' limit ' + inttostr(pNumber * pSize) + ',' + inttostr(pSize); + dataset := Query(sq); + dataset.setCount(count); + except + on e: Exception do + begin + log('SQL执行异常:' + e.Message + '-' + sq); + Result := nil; + end; + end; + finally + Result := dataset; + end; +end; + function TDBItem.PageMSSQL08(sql: ISQL; pNumber, pSize: Integer): IDataSet; var sq, order: string; diff --git a/MVC5.0/SDK/MVC.DM.pas b/MVC5.0/SDK/MVC.DM.pas index dc3c2873accde0f077bce01964cd4626b66a82e3..cba4cea53e9d210c72b3bd8bfc6f917bf90201f4 100644 --- a/MVC5.0/SDK/MVC.DM.pas +++ b/MVC5.0/SDK/MVC.DM.pas @@ -19,7 +19,7 @@ uses System.SysUtils, FireDAC.Stan.ExprFuncs, FireDAC.Phys.SQLiteDef, FireDAC.Phys.SQLite, FireDAC.Phys.OracleDef, FireDAC.Phys.MSSQLDef, FireDAC.Phys.ODBCBase, FireDAC.Phys.MSSQL, FireDAC.Phys.Oracle, - FireDAC.Phys.FBDef, + FireDAC.Phys.FBDef, FireDAC.Phys.PGDef, FireDAC.Phys.PG, // {$IFDEF VER340}FireDAC.Phys.SQLiteWrapper.Stat, {$ENDIF} // {$IFDEF CONSOLE} FireDAC.ConsoleUI.Wait, {$ENDIF} // {$IFDEF SERVICE} FireDAC.ConsoleUI.Wait, {$ENDIF} @@ -30,6 +30,7 @@ uses type TMVCDM = class MySQLDriver: TFDPhysMySQLDriverLink; + PgDriver: TFDPhysPgDriverLink; DBManager: TFDManager; SQLiteDriverLink1: TFDPhysSQLiteDriverLink; OracleDriverLink1: TFDPhysOracleDriverLink; @@ -56,6 +57,7 @@ constructor TMVCDM.Create(); begin DBManager := TFDManager.Create(nil); MySQLDriver := TFDPhysMySQLDriverLink.Create(nil); + PgDriver := TFDPhysPgDriverLink.Create(nil); SQLiteDriverLink1 := TFDPhysSQLiteDriverLink.Create(nil); OracleDriverLink1 := TFDPhysOracleDriverLink.Create(nil); MSSQLDriverLink1 := TFDPhysMSSQLDriverLink.Create(nil); @@ -70,6 +72,7 @@ destructor TMVCDM.Destroy; begin DBManager.free; MySQLDriver.free; + PgDriver.Free; SQLiteDriverLink1.free; OracleDriverLink1.free; MSSQLDriverLink1.free;