확실한건 테스트를 해봐야 하지만... 제가 기억하는 거로는...
레코드를 인서트하는 코드를 보면, 파라미터를 생성하는 코드가 먼저 오고 그 다음에 그 파라미터를 이용하는 SQL문을 지정했습니다. 그런데... SQL문을 지정하는 코드에 이르면, SQL문이 실제로 지정되기 전에 내부적으로 이전 SQL문을 삭제하고 그에 따라 파라미터들을 다 삭제합니다. 파라미터 자체가 아예 없어지는 겁니다. 그런 후에 SQL문이 실제로 지정되는 과정에서 SQL 내부에서 쓰인 파라미터들이 자동으로 다시 생성됩니다.
다시 말해, SQL 문 지정 이전에 파라미터를 생성하고 값을 지정한 것이 그냥 사라지는 거죠.
먼저 SQL 문을 지정한 후에 파라미터 값을 지정해야 합니다.
Params.CreateParam() 함수는 파라미터를 생성하기 위해서 쓰신 것일텐데, SQL 문 지정에서 자동으로 파라미터가 생성되므로 다시 만들면 안될 겁니다. 일반적으로 Params.CreateParam() 함수는 이런 목적으로는 사용되지 않고 특수한 경우가 따로 있습니다.
이용남 님이 쓰신 글 :
: 데이타베이스 : SQL Server2000
: 개발언어 : Delphi2007
:
: 한글 필드명으로 구성된 테이블의 Insert, Update시 오류 발생문제
:
: procedure TForm1.CONFIG_ADDDB;
: begin
: try
: With UpdateQry do Begin
: Close;
: SQL.Clear;
: SQL.ADD('CREATE TABLE SRVCONFIG ');
: SQL.ADD('(서버명 VARCHAR(20), ');
: SQL.ADD(' 카드IP VARCHAR(15)) ');
: ExecSql;
: Close;
: end;
: except On E:Exception do
: MessageDlg(#13+E.Message+#13#13+'CONFIG Table 생성오류.', mtError, [mbOK], 0);
: end;
: end;
:
: 위의 코드로 생성된 테이블에 값을 입력하면
: With UpdateQry do begin
: Close;
: SQL.Clear;
: Params.CreateParam(ftString, 'SNAME', ptInput);
: Params.CreateParam(ftString, 'CIP', ptInput);
: ParamByName('SNAME').AsString := '\\192.168.0.20';
: ParamByName('CIP').AsString := '192.168.0.20';
: SQL.Text := 'INSERT INTO SRVCONFIG ' +
: '(서버명, 카드IP ) VALUES (:SNAME, :CIP) ';
: ExecSql(False);
: end;
:
:
: "필요한 매개변수중 한 개 이상에 값이 주어지지 않았습니다." 라는 오류 발생
: 참고로 Delphi2006에서는 이상없이 잘 실행된 코드인데 Delphi2007 업그레이드후 나타난 증상입니다.
:
: 테이블 생성은 문제가 없는데 ... 답답한 마음에 몇글자 적어봅니다.
|