Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

parambyname fieldbyname 차이점


김승연

질문

4 answers to this question

Recommended Posts

  • 0

FireDAC의 FDQuery의 FieldByName, ParamByNAme을 말씀하시는게 맞을까요?

우선

ParamByName은 SQL을 작성할 떄, 조건이나, 데이터를 삽입할때 사용합니다.

예를 들어, ItemTbl에 Col1, Col2라는 항목을 Insert할 때 다음같이 사용합니다.

FDQuery.SQLText := 'INSERT INTO ItemTBL Col1, Col2 VALUES(:Col1, :Col2)';
FDquery.ParamByName['Col1'].AsString := 'test';
FDquery.ParamByName['Col2'].AsInteger := 1;
...
FDquery.ExecSQL;
// ※ Param을 지정할 때에는 앞에 ':'을 붙여야 합니다.

 

 

FieldByName은 Select문을 검색하고 난 후, 값을 가져올때 사용합니다.

예를 들어, ItemTbl이라는 테이블에 Col1, Col2를 조회한다음, 해당 컬럼들을 가져올 때 다음같이 사용합니다.

var
 str : String;
 int : Integer;
....
FDQuery.SQLText := 'SELECT Col1, Col2 FROM ItemTbl';
while NOT FDQuery.EOF do
begin
  str := FieldByName('Col1').AsString;
  int := FieldByName('Col2').AsInteger;
  Next;
end;

 

Edited by Miniuser
이 댓글 링크
다른 사이트에 공유하기

  • 0

@Miniuser 님의 설명이 잘되어 었으므로, 저는 몇가지만 추가하겠습니다. (역시, Query 오브젝트에 대한 질문이라고 이해하고 설명함)

아래 사항을 알면 도움이 될 것입니다. (FDQuery를 기준으로 설명) 

  1. TFDQuery는 TDataSet이다 (TDataSet의 자손이기 때문, 참새가 동물이듯)
  2. TFDQuery는  조상인 TDataSet을 확장하여 자신에게 데이터를 담기 위한 쿼리(query, 질의)를 가질 수 있다.  
  3. 그래서, FDQuery는 (데이터를 가져오기 위한) 질의(query)를 가질 수 있고, (앞에서 설명했듯이, 쿼리한 결과를 담는) 데이터 집합이기도 하다.

즉, TFDQuery에서는이 두 가지를 모두 사용할 수 있습니다.  FieldByName과 ParamByName을 각각 조금 더 부연하자면: 

FieldByName: 데이터집합에서 사용됨

FieldByName (Field By Name)은 TFDQuery의 프로퍼티 (정확히는, 조상인 TDataSet의 프로퍼티)이며, 필드의 이름을 콕 찍어서 지정하면, 해당 TField 오브젝트를 반환합니다.

  • @Miniuser 님의 답변에 있는 예문에서는 반환된 TField의 AsString 프로퍼티를 사용하여 해당 필드에 들어있는 값을 문자열로 받아오고 있습니다.
  • field는 흔히 클래스의 멤버 변수를 의미합니다. 

 

ParamByName: 쿼리 파라미터에서 사용됨

ParamByName (Parameter By Name)은 TFDQuery의 메서드 (정확히는 조상인 TFDDataSet의 메서드)이며, 파라미터의 이름을 콕 찍어서 지정하면, 해당 TFDParam 오브젝트를 반환합니다.

  • @Miniuser 님의 답변에 있는 예문에서는 반환된 TDParam의 AsString 프로퍼티를 사용하여 해당 파라미터에 문자열 값을 지정하고 있습니다.
  • Parameter는 함수를 사용할 때 그 함수에게 전달하려는 무언가(주로 값)를 의미합니다.
    바꿔 말하면, 함수를 정의하는 쪽에서 보면, 외부에서 지정할 수 있도록 함수 선언에 붙여 놓은 변수라고 할 수 있습니다.
    (Para-는 동전의 양면과 같이 무언가에 붙어있는 것,  -Meter는 길이, 값과 같이 측정되는 무엇)

 

참고로, Query 클래스는 각 프레임워크에 따라 이름과 방식이 조금 다르지만, 기본적인 틀은 같습니다. (FireDAC 프레임워크의 TFDQuery, BDE 프레임워크의 TQueryDBExpress 프레임워크의 TSQLQuery 예를 들어 이 3 가지 클래스 모두 TDataSet의 자손입니다)

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.