unit NeolTestMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.Grids, Vcl.ExtCtrls, 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.VCLUI.Wait, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.PGDef, FireDAC.Phys.PG, FireDAC.Comp.UI, RegisterClasses_base, wItem, EmpMst, Math; type TfrmNeolTestMain = class(TForm) LabeledEdit1: TLabeledEdit; LabeledEdit4: TLabeledEdit; StringGrid1: TStringGrid; Memo1: TMemo; BitBtn1: TBitBtn; LabeledEdit5: TLabeledEdit; BitBtn2: TBitBtn; BitBtn3: TBitBtn; FDConnection1: TFDConnection; FDQuery1: TFDQuery; FDGUIxWaitCursor1: TFDGUIxWaitCursor; FDPhysPgDriverLink1: TFDPhysPgDriverLink; LabeledEdit3: TLabeledEdit; LabeledEdit2: TLabeledEdit; SpeedButton1: TSpeedButton; Memo2: TMemo; procedure BitBtn3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure StringGrid1DblClick(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } FobjEmp: TEmpMst; FqryList: TList; function xGetObjEmpInfo: TList; procedure xShowInfo(tmpList: TList); procedure xFreeAll(tmpList: TList); public { Public declarations } procedure xAutoResizeStringGridColumns(Grid: TStringGrid; Canvas: TCanvas); function xAddSqlMark(velStr: String): String; function xAddSqlDoubleMark(velStr: String): string; end; var frmNeolTestMain: TfrmNeolTestMain; implementation uses Editor; {$R *.dfm} procedure TfrmNeolTestMain.BitBtn1Click(Sender: TObject); begin FDPhysPgDriverLink1.VendorLib := 'C:\WorkTest\NEOL-MES\pglib\libpq.dll'; FDConnection1.Connected := False; FDConnection1.Params.Clear; FDConnection1.Params.DriverID := 'PG'; FDConnection1.Params.Database := Trim(LabeledEdit1.Text); FDConnection1.Params.UserName := Trim(LabeledEdit2.Text); FDConnection1.Params.Password := Trim(LabeledEdit3.Text); FDConnection1.Params.Add('Server=' + Trim(LabeledEdit4.Text)); FDConnection1.Params.Add('Port=' + Trim(LabeledEdit5.Text)); FDConnection1.Params.Add('CharacterSet=UTF8'); try FDConnection1.Connected := True; Memo1.Lines.Add('¿¬°á ¼º°ø'); Memo1.Lines.Add('"Q1" ¹öưÀ» ´©¸¥ ÈÄ "Äõ¸®" ¹öưÀ» ´©¸£¼¼¿ä!!'); except on E: Exception do Memo1.Lines.Add('¿¬°á ½ÇÆÐ: ' + E.Message); end; end; procedure TfrmNeolTestMain.BitBtn2Click(Sender: TObject); var i: Integer; tmpList: TList; tmpItem: TwItem; tmpEmp: TEmpMst; begin try FDQuery1.Close; FDQuery1.SQL.Text := Memo1.Lines.Text; FDQuery1.Open; except on E: Exception do ShowMessage('Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; if FqryList <> nil then xFreeAll(FqryList); FqryList := xGetObjEmpInfo; xShowInfo(FqryList); xAutoResizeStringGridColumns(StringGrid1, Canvas); end; procedure TfrmNeolTestMain.BitBtn3Click(Sender: TObject); begin if FDConnection1.Connected then FDConnection1.Connected := False; Application.Terminate; end; procedure TfrmNeolTestMain.FormCreate(Sender: TObject); begin RegisterMyClasses_base; FobjEmp := nil; FqryList := nil; end; procedure TfrmNeolTestMain.FormDestroy(Sender: TObject); begin if FqryList <> nil then xFreeAll(FqryList); end; procedure TfrmNeolTestMain.FormShow(Sender: TObject); var tmpStrs: TStrings; begin Memo1.Lines.Clear; Memo2.Lines.Clear; tmpStrs := TStringList.Create; tmpStrs.Add('OBID'); tmpStrs.Add('Name'); tmpStrs.Add('wClassName'); tmpStrs.Add('CreateDate'); tmpStrs.Add('CreateTime'); tmpStrs.Add('CreatorID'); tmpStrs.Add('IsValid'); tmpStrs.Add('OrdCode'); tmpStrs.Add('Position'); tmpStrs.Add('Role'); tmpStrs.Add('InDate'); tmpStrs.Add('OutDate'); tmpStrs.Add('Status'); tmpStrs.Add('EmpTelNum'); tmpStrs.Add('EmpAddress'); tmpStrs.Add('Descriptions'); StringGrid1.ColCount := tmpStrs.Count; StringGrid1.Rows[0].AddStrings(tmpStrs); tmpStrs.Free; xAutoResizeStringGridColumns(StringGrid1, Canvas); end; procedure TfrmNeolTestMain.SpeedButton1Click(Sender: TObject); begin Memo1.Lines.Clear; Memo1.Lines.Add('SELECT * FROM "EmpMst" WHERE "IsValid"=' + xAddSqlMark('t') + ';'); end; procedure TfrmNeolTestMain.SpeedButton2Click(Sender: TObject); begin Memo1.Lines.Clear; end; procedure TfrmNeolTestMain.StringGrid1DblClick(Sender: TObject); var cidx, ridx: Integer; curEmp: TEmpMst; tmpForm: TfrmEditor; begin cidx := StringGrid1.Rows[0].IndexOf('OBID'); ridx := StringGrid1.Row; if StringGrid1.Objects[cidx,ridx] = nil then Exit; curEmp := TEmpMst(StringGrid1.Objects[cidx,ridx]); tmpForm := TfrmEditor.Create(Self); tmpForm.objEmp := curEmp; if tmpForm.ShowModal = mrOk then begin BitBtn2.OnClick(Sender); end; tmpForm.Free; tmpForm:=nil; end; function TfrmNeolTestMain.xAddSqlDoubleMark(velStr: String): string; begin Result := ''; Result := '"' + velStr + '"'; end; function TfrmNeolTestMain.xAddSqlMark(velStr: String): String; begin Result := ''; Result := '''' + velStr + ''''; end; procedure TfrmNeolTestMain.xAutoResizeStringGridColumns(Grid: TStringGrid; Canvas: TCanvas); var Col, Row: Integer; MaxWidth: Integer; CellText: string; begin for Col := 0 to Grid.ColCount - 1 do begin MaxWidth := 0; for Row := 0 to Grid.RowCount - 1 do begin CellText := Grid.Cells[Col, Row]; MaxWidth := Max(MaxWidth, Canvas.TextWidth(CellText)); end; Grid.ColWidths[Col] := MaxWidth + 10; end; end; procedure TfrmNeolTestMain.xFreeAll(tmpList: TList); var i: Integer; tmpEmp: TEmpMst; begin i := 0; while i < tmpList.Count do begin tmpEmp := TEmpMst(tmpList.Items[0]); tmpEmp.Free; tmpList.Delete(0); end; tmpList.Free; tmpList:=nil; end; function TfrmNeolTestMain.xGetObjEmpInfo: TList; var curEmp: TEmpMst; begin Result := TList.Create; while not FDQuery1.Eof do begin curEmp := TEmpMst.Create(Self); curEmp.OBID := FDQuery1.FieldByName('OBID').AsString; curEmp.Name := FDQuery1.FieldByName('Name').AsString; curEmp.wClassName := FDQuery1.FieldByName('wClassName').AsString; curEmp.CreateDate := FDQuery1.FieldByName('CreateDate').AsString; //curEmp.CreateTime := FDQuery1.FieldByName('CreateTime').AsString; curEmp.CreateTime := FormatDateTime('hh:nn:ss', FDQuery1.FieldByName('CreateTime').AsDateTime); curEmp.CreatorID := FDQuery1.FieldByName('CreatorID').AsString; curEmp.IsValid := FDQuery1.FieldByName('IsValid').AsString; curEmp.OrdCode := FDQuery1.FieldByName('OrdCode').AsString; curEmp.Position := FDQuery1.FieldByName('Position').AsString; curEmp.Role := FDQuery1.FieldByName('Role').AsString; curEmp.InDate := FDQuery1.FieldByName('InDate').AsString; curEmp.OutDate := FDQuery1.FieldByName('OutDate').AsString; curEmp.Status := FDQuery1.FieldByName('Status').AsString; curEmp.EmpTelNum := FDQuery1.FieldByName('EmpTelNum').AsString; curEmp.EmpAddress := FDQuery1.FieldByName('EmpAddress').AsString; curEmp.Descriptions := FDQuery1.FieldByName('Descriptions').AsString; Result.Add(curEmp); FDQuery1.Next; end; end; procedure TfrmNeolTestMain.xShowInfo(tmpList: TList); var i, cidx, ridx: Integer; tmpEmp: TEmpMst; begin ridx := 0; StringGrid1.RowCount := tmpList.Count+1; for i := 0 to tmpList.Count-1 do begin tmpEmp := TEmpMst(tmpList.Items[i]); Inc(ridx); cidx := StringGrid1.Rows[0].IndexOf('OBID'); StringGrid1.Objects[cidx,ridx] := tmpEmp; StringGrid1.Cells[cidx,ridx] := tmpEmp.OBID; cidx := StringGrid1.Rows[0].IndexOf('Name'); StringGrid1.Cells[cidx,ridx] := tmpEmp.Name; cidx := StringGrid1.Rows[0].IndexOf('wClassName'); StringGrid1.Cells[cidx,ridx] := tmpEmp.wClassName; cidx := StringGrid1.Rows[0].IndexOf('CreateDate'); StringGrid1.Cells[cidx,ridx] := tmpEmp.CreateDate; cidx := StringGrid1.Rows[0].IndexOf('CreateTime'); StringGrid1.Cells[cidx,ridx] := tmpEmp.CreateTime; cidx := StringGrid1.Rows[0].IndexOf('CreatorID'); StringGrid1.Cells[cidx,ridx] := tmpEmp.CreatorID; cidx := StringGrid1.Rows[0].IndexOf('IsValid'); StringGrid1.Cells[cidx,ridx] := tmpEmp.IsValid; cidx := StringGrid1.Rows[0].IndexOf('OrdCode'); StringGrid1.Cells[cidx,ridx] := tmpEmp.OrdCode; cidx := StringGrid1.Rows[0].IndexOf('Position'); StringGrid1.Cells[cidx,ridx] := tmpEmp.Position; cidx := StringGrid1.Rows[0].IndexOf('Role'); StringGrid1.Cells[cidx,ridx] := tmpEmp.Role; cidx := StringGrid1.Rows[0].IndexOf('InDate'); StringGrid1.Cells[cidx,ridx] := tmpEmp.InDate; cidx := StringGrid1.Rows[0].IndexOf('OutDate'); StringGrid1.Cells[cidx,ridx] := tmpEmp.OutDate; cidx := StringGrid1.Rows[0].IndexOf('Status'); StringGrid1.Cells[cidx,ridx] := tmpEmp.Status; cidx := StringGrid1.Rows[0].IndexOf('EmpTelNum'); StringGrid1.Cells[cidx,ridx] := tmpEmp.EmpTelNum; cidx := StringGrid1.Rows[0].IndexOf('EmpAddress'); StringGrid1.Cells[cidx,ridx] := tmpEmp.EmpAddress; cidx := StringGrid1.Rows[0].IndexOf('Descriptions'); StringGrid1.Cells[cidx,ridx] := tmpEmp.Descriptions; end; end; end.