쿼리 컴포넌트 사원조회 프로그램에서 잘이해가 않되는 부분이 있어서
부탁드립니다 테이블 컴포넌트는 이해가 되는데 이건 잘 모르겠습니다...
unit uMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, ComCtrls, Grids, DBGrids, StdCtrls, DBCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
btnAll: TButton;
DBNavigator1: TDBNavigator;
Label1: TLabel;
edtName: TEdit;
btnSearch: TButton;
DBGrid1: TDBGrid;
qryEmp: TQuery;
dtsrcEmp: TDataSource;
Panel2: TPanel;
edtYear: TEdit;
Label2: TLabel;
btnYear: TButton;
Panel3: TPanel;
edtSalary: TEdit;
Label3: TLabel;
btnSalary: TButton;
qryParam: TQuery;
dtsrcParam: TDataSource;
procedure btnAllClick(Sender: TObject);
procedure btnYearClick(Sender: TObject);
procedure btnSalaryClick(Sender: TObject);
procedure btnSearchClick(Sender: TObject);
procedure Form1Close(Sender: TObject; var Action: TCloseAction);
procedure edtNameKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.btnAllClick(Sender: TObject);
begin
qryParam.close;
if not qryEmp.Prepared then
qryEmp.Prepare;
qryEmp.Open;
DBGrid1.DataSource:=dtsrcEmp;
DBNavigator1.DataSource:=dtsrcEmp;
end;
----------------여기서 부터 잘모르겠거든요 부탁드립니다---------------------------
procedure TForm1.btnYearClick(Sender: TObject);
var
Date:TDateTime;
begin {파라미터 이름이 디자인 타임에 지정한 것과 다르면, 즉 다른 sql문을 동적으로
할당해서 실행한 적이 있는 경우에만 원래의 sql문 다시 할당}--주석문이 이해가 안가구요
원래의 sql 문은 뭔지요
if qryParam.Params[0].Name <> 'Year' then
begin
qryparam.Close;
qryParam.SQL.Clear;
qryParam.SQL.Add('select * from employee where hire_date > :year'); {qryparam.sql에 employee테이블
에서 hire_date... 조건을 만족하는것을 추가하라는것같은데 year앞의:는 뭔가요
qryParam.Params[0].DataType:=ftDate;
--- 위의 문장은 배열 같은데 배열이 가르키는 것이 뭔지 필드인지 필드에 들어가는 내용인지 죄
송합니다 너무 몰라서 ---
end;
{파라미터 값을 지정한 후 쿼리 열기}
qryEmp.close;
Date:=StrToDate(edtYear.Text+'-01-01');
qryParam.Close;
qryParam.ParamByName('Year').Value:= Date;
qryParam.Open;
DBGrid1.DataSource:=dtsrcParam;
DBNavigator1.DataSource:=dtsrcParam;
end;
procedure TForm1.btnSalaryClick(Sender: TObject);
begin
qryEmp.close;
qryparam.Close;
qryParam.SQL.Clear;
qryParam.SQL.Add('select * from employee where salary > :salary');
qryParam.Params[0].DataType:=ftFloat;
qryParam.Params[0].Value:=StrToFloat(edtSalary.text);
qryparam.Open;
DBGrid1.DataSource:=dtsrcParam;
DBNavigator1.DataSource:=dtsrcParam;
end;
procedure TForm1.btnSearchClick(Sender: TObject);
begin
if not(edtName.text='') then begin
qryEmp.Open;
qryEmp.Locate('first_name',edtName.text,[loPartialKey,loCaseInsensitive]);
end
else
ShowMessage('사원 이름을 입력하세요');
DBGrid1.DataSource:=dtsrcEmp;
DBNavigator1.DataSource:=dtsrcEmp;
end;
procedure TForm1.Form1Close(Sender: TObject; var Action: TCloseAction);
begin
qryEmp.close;
qryParam.close;
end;
---------------------------------여기까지요-----------------------------------
procedure TForm1.edtNameKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
btnSearch.Click;
end;
end.
>
> procedure TForm1.btnYearClick(Sender: TObject);
> var
> Date:TDateTime;
> begin {파라미터 이름이 디자인 타임에 지정한 것과 다르면, 즉 다른 sql문을 동적으로
> 할당해서 실행한 적이 있는 경우에만 원래의 sql문 다시 할당}--주석문이 이해가 안가구요
> 원래의 sql 문은 뭔지요
> if qryParam.Params[0].Name <> 'Year' then
> begin
> qryparam.Close;
> qryParam.SQL.Clear;
> qryParam.SQL.Add('select * from employee where hire_date > :year'); {qryparam.sql에 employee테이블
에서 hire_date... 조건을 만족하는것을 추가하라는것같은데 year앞의:는 뭔가요}
qryParam.Params[0].DataType:=ftDate;
위의 문장은 배열 같은데 배열이 가르키는 것이 뭔지 필드인지 필드에 들어가는 내용인지 죄 송합니다 너무 몰라서 ---
배열이 아니고요.. 이걸 보통 파라미터라하지요....
앞에 동적할당이라는 말이 있습니다.. 만약에 조회하고자 하는 입사일자가 항상
일정하지는 않습니다....
그때 마다 원하는 조건을 입력할 필요가 있습니다... :Year는
이때 원하는 입사일자에 대한 입력부분입니다.. 보통 Tedit계열 컴퍼너트에서
받아오겠지요....
위의 코딩과 다른 한예로
ParamByName('Year').AsString := edit1.Text;