±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 [angel] ParamByName vs SQL Text
Ÿ¶ôõ»ç
(±è¼ºÈÆ)
2014-12-13 ¿ÀÈÄ 1:45:02
Ä«Å×°í¸®: ÆÁ
3981ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
¾È³çÇϼ¼¿ä. Å¸¶ôõ»ç ÀÔ´Ï´Ù.
µ¨ÆÄÀÌ ÀÔ¹®¼­°¡ ¾ø´Ù°í Çؼ­ ¾²°í ÀÖ½À´Ï´Ù.

º¸Åë Ãß°¡, ¼öÁ¤, Á¶È¸ Äõ¸®¹® ÀÌ¿ë½Ã ´ÙÀ½ µÑ Áß Çϳª¸¦ ÀÌ¿ë ÇÕ´Ï´Ù.
´ÙÀ½ µÑÀÇ Â÷À̸¦ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

1¹ø)  Query1.SQL.Add('SELECT * FROM Å×À̺í WHERE ID = :pID'); 
  Query1.ParamByName('pID').AsString := 'TEST';

2¹ø)  Query1.SQL.Add('SELECT * FROM Å×À̺í WHERE ID = 'TEST');


1. Ã³¸® ¼Óµµ´Â °°½À´Ï´Ù.

1¹ø ¹æ¹ýÀº Äõ¸®¹®ÀÇ :pID ¸¦ Replace Çϴ ½Ã°£ÀÌ ´õ °É¸®Áö¸¸,
Äõ¸® Á¶È¸¿¡¼­ °¡Àå ¸¹ÀÌ ½Ã°£ÀÌ ¼Ò¿ä µÇ´Â ºÎºÐÀÌ DB ¿¡¼­ µ¥ÀÌÅÍ Á¶È¸ Çϴ ºÎºÐ ÀÔ´Ï´Ù.
Äõ¸®¹® ¸¸µå´Â ½Ã°£Àº »ó´ëÀûÀ¸·Î ¹«½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.


2. Prepare.

1¹ø ¹æ¹ýÀº Prepare ·Î Äõ¸®¹® ÆĽ̠½Ã°£À» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.
Prepare Àº DB side ¿¡¼­ ÀϾ´Ï´Ù. (application side ¾Æ´Ô) 
DB °¡ Äõ¸®¹® ÆĽ̠Çϴ ½Ã°£À» ÁÙ¿© ÁÝ´Ï´Ù.
ÇÏÁö¸¸, 1¹øÀÇ ÀÌÀ¯·Î ¼Óµµ Â÷À̴ ¹«½Ã ÇÒ¸¸ ÇÕ´Ï´Ù..
ex)
  Query1.Prepare;
  for i := 0 to MyList.Count - 1 do
  begin
    Query1.ParamByName('pID').AsString := MyList.Strings[i];
    Query1.Execute;
  end;
  Query1.Unprepare;

ÇÏÁö¸¸, °³¹ß ¿ä±¸ »çÇ×ÀÌ ´Ù¾çÇÏ°Ô º¯ÇÒ ¼ö À־, ÀÌÀü ÇÁ·ÎÁ§Æ®¿¡ ½áº»ÀûÀÌ ¾ø½À´Ï´Ù.


3. SQL ¿¹¾à¾î »ç¿ë

ÅؽºÆ® ¾È¿¡ SQL ¿¹¾à¾îÀΠ", ' [ ] #13#10 join from and" µîÀÌ Æ÷ÇԵǾî ÀÖÀ¸¸é 
2¹øÀÇ ¹æ¹ýÀ¸·Î´Â Äõ¸®¹® ¿¡·¯ ³³´Ï´Ù.

¹Ýµå½Ã 1¹øÀÇ ¹æ¹ýÀ¸·Î µ¥ÀÌÅ͠󸮠ÇؾߠÇÕ´Ï´Ù.


4. Blob type

Blob type ÀÇ Çʵ忡 µ¥ÀÌŸ ÆÄÀÏ À̳ª À̹ÌÁö ÆÄÀÏÀ» À» ¾÷·Îµå³ª ´Ù¿î·Îµå Çϴ °æ¿ì´Â
2¹øÀÇ ¹æ¹ýÀ¸·Î´Â Ã³¸®ÇÒ ¼ö ¾ø½À´Ï´Ù.

¹Ýµå½Ã 1¹øÀÇ ¹æ¹ýÀ¸·Î µ¥ÀÌÅ͸¦ Ã³¸® ÇؾߠÇÕ´Ï´Ù.


5. °³¹ß ÆíÀǼº

°³¹ß ÆíÀǼºÀº 2¹øÀÇ ¹æ¹ýÀÌ ÁÁ½À´Ï´Ù.

¿¹Á¦·Î Á¦°¡ °³¹ßÇÑ ¼­¹ö ÇÁ·Î±×·¥ÀÇ ÇÔ¼ö ÀÔ´Ï´Ù.

SQL Error °¡ ³ª¸é DoCheckOpen(qryAsk, sQry) ¿¡ beak point ¸¦ °É¾î¼­ 
sQry ³»¿ëÀ» SQL ÇÁ·Î±×·¥ ¿¡¼­ ½ÇÇà½ÃÄÑ Äõ¸®¹®ÀÇ ¿À·ù¸¦ Ã£¾Æ ³À´Ï´Ù..

** ¼Ò½º Áß¿¡ SQL¹®À» ÄÚ¸àÆ®·Î ³²°Ü µÐ °ÍÀº, DB Å×À̺í ÇʵåÀÇ º¯°æÀ¸·Î ¿¡·¯°¡ ³¯ °æ¿ì ³ª,
DB Å×À̺í ÀÇ ³»¿ë È®ÀÎÀ» À§Çؼ­ ÀÔ´Ï´Ù.

** È¸»ç ÇÁ·Î±×·¥ À̶󼭠Å×ÀÌºí ¸í°ú Çʵå¸íÀº ¸ðµÎ »èÁ¦ Çß½À´Ï´Ù.


procedure TfrmDataServer.DoGetUserList(AContext: TIdContext; const AData: string);
var
  sSqlText, sQry: string;
  sID: string;
  MyUser: TUser;
begin
  sID := AData;
  MyUser := FUserList.IndexOf(AContext, sID);
  if MyUser = nil then
  begin
    __DoSendData(AContext, '9000' + '0000' + '»ç¿ëÀÚ¸¦ Ã£À» ¼ö ¾ø½À´Ï´Ù.' + sID);
    exit;
  end;
{
SELECT ....
  LEFT JOIN ... B
  ON .....
    LEFT JOIN ... C
    ON ...
  WHERE ...
  ORDER BY ...
}

  sSqlText :=
    'SELECT ...'
      + '  LEFT JOIN ... B'
      + '  ON ...'
      + '    LEFT JOIN ... C'
      + '    ON ...'
      + '  WHERE ...'
      + '  ORDER BY ...';

  sQry := Format(sSqlText, [gCompCode]);

  if not DoCheckOpen(qryAsk, sQry) then
  begin
    MyUser.FCode := 9009;
    MyUser.FText := gDBError;
    MyUser.DoSendData;
    exit;
  end;

  MyUser.FCode := 1010;
  MyUser.FText := 'OK';
  MyUser.FDataSet1 := qryAsk;
  MyUser.DoSendData;
end;

.....

function DoCheckOpen(AQuery: TFDQuery; const AText: string): boolean;
begin
  Result := true;
  integer(gDBError) := 0;
  try
    AQuery.Close;
    AQuery.SQL.Text := AText;
    AQuery.Open;
    AQuery.Last;
  except
    on E: exception do
    begin
  &nb