¾È³çÇϼ¼¿ä. Ÿ¶ôõ»ç ÀÔ´Ï´Ù. µ¨ÆÄÀÌ ÀÔ¹®¼°¡ ¾ø´Ù°í Çؼ ¾²°í ÀÖ½À´Ï´Ù.
º¸Åë Ãß°¡, ¼öÁ¤, Á¶È¸ Äõ¸®¹® ÀÌ¿ë½Ã ´ÙÀ½ µÑ Áß Çϳª¸¦ ÀÌ¿ë ÇÕ´Ï´Ù. ´ÙÀ½ µÑÀÇ Â÷À̸¦ ¾Ë¾Æº¸°Ú½À´Ï´Ù.
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
|