From 33f296ce36d15215b2dee3cfab82ae40864c175c Mon Sep 17 00:00:00 2001 From: "alemedeiros@bsd.com.br" Date: Tue, 9 Nov 2021 14:27:49 -0300 Subject: [PATCH] novo post --- .gitignore | 4 + CRUDPOODelphi.dpr | 18 + CRUDPOODelphi.dproj | 928 ++++++++++++++++++ CRUDPOODelphi.res | Bin 0 -> 112136 bytes database/dados.sdb3 | Bin 0 -> 12288 bytes src/DAO/CRUDPOO.DAO.Pessoa.pas | 63 ++ src/model/CRUDPOO.Model.Endereco.pas | 19 + src/model/CRUDPOO.Model.Pessoa.pas | 38 + .../connection/CRUDPOO.Model.Connection.dfm | 22 + .../connection/CRUDPOO.Model.Connection.pas | 73 ++ src/view/CRUDPOO.View.Main.dfm | 34 + src/view/CRUDPOO.View.Main.pas | 103 ++ 12 files changed, 1302 insertions(+) create mode 100644 CRUDPOODelphi.dpr create mode 100644 CRUDPOODelphi.dproj create mode 100644 CRUDPOODelphi.res create mode 100644 database/dados.sdb3 create mode 100644 src/DAO/CRUDPOO.DAO.Pessoa.pas create mode 100644 src/model/CRUDPOO.Model.Endereco.pas create mode 100644 src/model/CRUDPOO.Model.Pessoa.pas create mode 100644 src/model/connection/CRUDPOO.Model.Connection.dfm create mode 100644 src/model/connection/CRUDPOO.Model.Connection.pas create mode 100644 src/view/CRUDPOO.View.Main.dfm create mode 100644 src/view/CRUDPOO.View.Main.pas diff --git a/.gitignore b/.gitignore index 9532800..19e2949 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,7 @@ __recovery/ # Boss dependency manager vendor folder https://github.com/HashLoad/boss modules/ + +Win32/ +Win64/ +Linux64/ diff --git a/CRUDPOODelphi.dpr b/CRUDPOODelphi.dpr new file mode 100644 index 0000000..883d067 --- /dev/null +++ b/CRUDPOODelphi.dpr @@ -0,0 +1,18 @@ +program CRUDPOODelphi; + +uses + Vcl.Forms, + CRUDPOO.View.Main in 'src\view\CRUDPOO.View.Main.pas' {Form1}, + CRUDPOO.Model.Pessoa in 'src\model\CRUDPOO.Model.Pessoa.pas', + CRUDPOO.Model.Endereco in 'src\model\CRUDPOO.Model.Endereco.pas', + CRUDPOO.Model.Connection in 'src\model\connection\CRUDPOO.Model.Connection.pas' {Connection: TDataModule}, + CRUDPOO.DAO.Pessoa in 'src\DAO\CRUDPOO.DAO.Pessoa.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/CRUDPOODelphi.dproj b/CRUDPOODelphi.dproj new file mode 100644 index 0000000..ace27f8 --- /dev/null +++ b/CRUDPOODelphi.dproj @@ -0,0 +1,928 @@ + + + {F814A4F4-2804-4B7F-B145-D48057E3D08D} + 19.2 + VCL + True + Debug + Win32 + 1 + Application + CRUDPOODelphi.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + CRUDPOODelphi + + + DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;DataSnapFireDAC;tethering;svnui;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;vcledge;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;bindcompvclwinx;dsnapcon;FireDACMSAccDriver;FireDACInfxDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;ibxbindings;fmxobj;FireDACDSDriver;soapmidas;rtl;emsserverresource;DbxClientDriver;vclwinx;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;DataSnapProviderClient;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;inetdbxpress;fmxase;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + + + DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;vcledge;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;bindcompvclwinx;dsnapcon;FireDACMSAccDriver;FireDACInfxDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;ibxbindings;fmxobj;FireDACDSDriver;soapmidas;rtl;emsserverresource;DbxClientDriver;vclwinx;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;DataSnapProviderClient;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;inetdbxpress;fmxase;$(DCC_UsePackage) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + true + 1033 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + + MainSource + + +
Form1
+ dfm +
+ + + +
Connection
+ dfm + TDataModule +
+ + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + CRUDPOODelphi.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + CRUDPOODelphi.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + True + False + + + 12 + + + + +
diff --git a/CRUDPOODelphi.res b/CRUDPOODelphi.res new file mode 100644 index 0000000000000000000000000000000000000000..cbaeee82fad6747c390db14e22a67e912569562e GIT binary patch literal 112136 zcmeGl2Rv0@_}WpaXlRIrl#(qgRLY2wXqPP-$ciFVTC{|UN|8eUcG33I`uA^AS`+vp-jjV>Hx|>15%_%2t!(0d_73x zPS{fMxB@;WNb5|^W(-hl0kKVi&WUih2mG#tBg7y8TRS=&Q{bH&VEL9-ffx>PXh0Ct zh`tct6k@pmt!{)hu@ETLqvm4^&lW;ld-!hyZ`^9-(*>S0qeF|z%U8U1geRo* z0LdbD`zCo%rt(lfZ9`5P@_`g{fi{s!ngqW|oFE2LwPjA_&>1AM0AkY1RFL--??)+u zkOVv=$x~-HojZTCo3*AB^g9am5`ril4Gr|nzG|O~XvYsvX1T>X5QNkTL%mVv-cLS0 zUFH1XRIAwRwTbT zT-L9QGGlkgX~M(!y7RPOQgzntL+HbY2GPAO`kD|5Z!#x{%JXgGHx@|ZSzskHiThuJ zYtuq`o((YKcOm-b%gA?{X65rqBag7iR_40A#zj*!P&{CJ+(suo!QF-$N!BvN_<)Cj zxq<3>YppN5KE21o)krj8aJH8!Pai8wtBEm-%fF;AvY0L~slByuzFPi{*QZ?!1yp7@ zamV+|_DZJ=r*KjB2lS-yr!NwGFFCJUm8f^SZMHtnQ68qTL4yKh3K!1pkao7RM__f} z$2i+{r-Ssa=M2w@j>tW+@gp^02i*xE*+0e$|x3^ z)PLJTpHG_U7w;>X5SLzM-d4_W%yEqgR7)&*5|F~>e@v@XAUaUs#gPPm zPUeK=@zSK7Ri`{}^XYFyrIsI%z2j%8vF%hk@7+$>Ucx*Rq97&`ZO6K zym!ht6Yl(lbNzD`QzoPzjh{A?uj+C^*7&_V2|=qS5^?2axm^1$oxwaej-SyE=S{&IA{xtI>dA-e#qOl;oWbR^9V;fYM2?opR!r_#2r%#HY6cb$BGUZWz1X zD0posWk7mhhpA6XxXO}V5~Qx&GO4*Dt{Yu6Nm=oKT{G;FNUInNyM0F2V#b~CkT0F> zb$g4jo!Yxk-2s#B8V6UYINM2yTW^f_vu_^Gf23J^O z$t*5keU0vMt1j|gu=Dw(n5SDIn#pT=rtI*b8Oz2eEGg!8wVJg>cbKSd!ejq#`5zNM zNVaRIsUaDroxV-Uh*ap%;T~~`_a1RCL_6f|(s`zLc%nDH{HQyOTyo*#Ebcy*;p=+@ zi@m(IS>uJgfwYQXk@>LEVxzSuZo4%`b^N0=!JRu-zJJiA;$u#-=%M$L3oHd@&)#&S zOZRnYpQ8qiQ{-C9yKU{@>G94JyPV{GU?7k_`9sa<3m>Z@9mno^_wQ@@{mx@=Tv}`( zG0*S6*X=Sjcc0(sTHI@Sx1oYt4@youwZ=8gZ26V(?Y15sIO{yWhKAq@V!-AAa}km2 zX}h}i_M`K?=z{BAeg-O~egL(rzLac!OAryoh^tz4#g zv5JrP@U6JA)SsC#n6gJJm-$I=?^@+pbqSZi
    Aja^Z_!(l|J;&wmFxfX(1njX+TCB+t(z1@+3-W& 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 dJjujut{Y5c;; + public + constructor Create; + destructor Destroy; override; + property Id : Integer read Fid write FId; + property Nome : String read Fnome write Fnome; + property Endereco : TList read FEndereco write FEndereco; + end; + +implementation + +{ TPessoa } + +constructor TPessoa.Create; +begin + FEndereco:= TList.Create; +end; + +destructor TPessoa.Destroy; +begin + FEndereco.DisposeOf; + inherited; +end; + +end. diff --git a/src/model/connection/CRUDPOO.Model.Connection.dfm b/src/model/connection/CRUDPOO.Model.Connection.dfm new file mode 100644 index 0000000..635bb01 --- /dev/null +++ b/src/model/connection/CRUDPOO.Model.Connection.dfm @@ -0,0 +1,22 @@ +object Connection: TConnection + OldCreateOrder = False + OnCreate = DataModuleCreate + Height = 150 + Width = 215 + object FDConnection: TFDConnection + Params.Strings = ( + + 'Database=C:\Users\Criacao\Desktop\CRUDPOODelphi\database\dados.s' + + 'db3' + 'LockingMode=Normal' + 'DriverID=SQLite') + LoginPrompt = False + Left = 72 + Top = 32 + end + object FDQuery: TFDQuery + Connection = FDConnection + Left = 160 + Top = 24 + end +end diff --git a/src/model/connection/CRUDPOO.Model.Connection.pas b/src/model/connection/CRUDPOO.Model.Connection.pas new file mode 100644 index 0000000..0d44ba2 --- /dev/null +++ b/src/model/connection/CRUDPOO.Model.Connection.pas @@ -0,0 +1,73 @@ +unit CRUDPOO.Model.Connection; + +interface + +uses + System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option, + FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, + FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.SQLite, + FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, + FireDAC.Phys.SQLiteWrapper.Stat, FireDAC.VCLUI.Wait, FireDAC.Stan.Param, + FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, + FireDAC.Comp.Client; + +type + TConnection = class(TDataModule) + FDConnection: TFDConnection; + FDQuery: TFDQuery; + procedure DataModuleCreate(Sender: TObject); + private + { Private declarations } + public + procedure PrepareStatement(aSQL: String); + procedure SetValue(aIndex: Integer; aValue: Variant); + procedure ExecSQL; + procedure StartTransation; + procedure Commit; + procedure Rollback; + end; + +implementation + +{%CLASSGROUP 'Vcl.Controls.TControl'} + +{$R *.dfm} + +procedure TConnection.Commit; +begin + FDConnection.Commit; +end; + +procedure TConnection.DataModuleCreate(Sender: TObject); +begin + FDConnection.Connected := true; +end; + +procedure TConnection.ExecSQL; +begin + FDQuery.ExecSQL; +end; + +procedure TConnection.PrepareStatement(aSQL: String); +begin + FDQuery.SQL.Clear; + FDQuery.SQL.Add(aSQL); +end; + +procedure TConnection.Rollback; +begin + FDConnection.Rollback; +end; + +procedure TConnection.SetValue(aIndex: Integer; aValue: Variant); +begin + FDQuery.Params.Add; + FDQuery.Params[aIndex].Value := aValue; +end; + +procedure TConnection.StartTransation; +begin + FDConnection.StartTransaction; +end; + +end. diff --git a/src/view/CRUDPOO.View.Main.dfm b/src/view/CRUDPOO.View.Main.dfm new file mode 100644 index 0000000..9ab99c4 --- /dev/null +++ b/src/view/CRUDPOO.View.Main.dfm @@ -0,0 +1,34 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'Form1' + ClientHeight = 201 + ClientWidth = 384 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Button1: TButton + Left = 8 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Button1' + TabOrder = 0 + OnClick = Button1Click + end + object Memo1: TMemo + Left = 89 + Top = 8 + Width = 280 + Height = 185 + Lines.Strings = ( + 'Memo1') + TabOrder = 1 + end +end diff --git a/src/view/CRUDPOO.View.Main.pas b/src/view/CRUDPOO.View.Main.pas new file mode 100644 index 0000000..b77575f --- /dev/null +++ b/src/view/CRUDPOO.View.Main.pas @@ -0,0 +1,103 @@ +unit CRUDPOO.View.Main; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; + +type + TForm1 = class(TForm) + Button1: TButton; + Memo1: TMemo; + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses + CRUDPOO.Model.Pessoa, CRUDPOO.Model.Endereco, CRUDPOO.DAO.Pessoa; + +{$R *.dfm} + +procedure TForm1.Button1Click(Sender: TObject); +var + lPessoa : TPessoa; + lEndereco : TEndereco; + lDAOPessoa : TDAOPessoa; + I: Integer; +begin + lPessoa := TPessoa.Create; + lDAOPessoa := TDAOPessoa.Create; + try + lPessoa.Id := 2; + lPessoa.Nome := 'Alessandro'; + + lEndereco := TEndereco.Create; + lEndereco.id := 1; + lEndereco.IdPessoa := lPessoa.Id; + lEndereco.Logradouro := 'Rua teste1'; + lPessoa.Endereco.Add(lEndereco); + + lEndereco := TEndereco.Create; + lEndereco.id := 2; + lEndereco.IdPessoa := lPessoa.Id; + lEndereco.Logradouro := 'Rua teste2'; + lPessoa.Endereco.Add(lEndereco); + + lDAOPessoa.CreatePessoa(lPessoa); + for I := 0 to Pred(lPessoa.Endereco.Count) do + begin + + end; + finally + lPessoa.DisposeOf; + lEndereco.DisposeOf; + lDAOPessoa.DisposeOf; + end; +end; + + +//begin +// lPessoa := TPessoa.Create; +// try +// lPessoa.Id := 1; +// lPessoa.Nome := 'João'; +// +// lEndereco := TEndereco.Create; +// lEndereco.id := 1; +// lEndereco.IdPessoa := lPessoa.Id; +// lEndereco.Logradouro := 'Rua teste1'; +// lPessoa.Endereco.Add(lEndereco); +// +// lEndereco := TEndereco.Create; +// lEndereco.id := 2; +// lEndereco.IdPessoa := lPessoa.Id; +// lEndereco.Logradouro := 'Rua teste2'; +// lPessoa.Endereco.Add(lEndereco); +// +// Memo1.Lines.Add('id: '+ lPessoa.Id.ToString); +// Memo1.Lines.Add('Nome: '+ lPessoa.Nome); +// +// Memo1.Lines.Add('-----'); +// for I := 0 to Pred(lPessoa.Endereco.Count) do +// begin +// Memo1.Lines.Add('id: '+ lPessoa.Endereco[I].Id.ToString); +// Memo1.Lines.Add('idPessoa: '+ lPessoa.Endereco[I].IdPessoa.ToString); +// Memo1.Lines.Add('Logradouro: '+ lPessoa.Endereco[I].Logradouro); +// Memo1.Lines.Add('-----'); +// end; +// finally +// lPessoa.DisposeOf; +// lEndereco.DisposeOf; +// end; +//end; + +end.