테스트해본 결과 파리미터 생성과는 무관했습니다.
한글로 된 기존 테이블을 영문으로 변경후 아래 코드로 Insert하면 정상적으로 실행되더군요.
procedure TForm1.CONFIG2_ADDDB;
begin
try
With UpdateQry do Begin
Close;
SQL.Clear;
SQL.ADD('CREATE TABLE SRVCONFIG2 ');
SQL.ADD('(ServerName VARCHAR(20), ');
SQL.ADD(' CardIp VARCHAR(15)) ');
ExecSql;
Close;
end;
except On E:Exception do
MessageDlg(#13+E.Message+#13#13+'CONFIG Table 생성오류.', mtError, [mbOK], 0);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
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 SRVCONFIG2 ' +
'(ServerName, CardIp ) VALUES (:SNAME, :CIP) ';
ExecSql(False);
end;
end;
결국 한글 필드명을 가지고 있는 기존테이블의 필드명을 영문으로 바꿔서 해결은 했는데
Delphi2006의 dbxmss30.dll과 2007의 dbxmss30.dll의 한글 처리부분에 차이가 있다는
생각밖에는 ...
박지훈.임프님 답변 감사합니다.
박지훈.임프 님이 쓰신 글 :
: 확실한건 테스트를 해봐야 하지만... 제가 기억하는 거로는...
: 레코드를 인서트하는 코드를 보면, 파라미터를 생성하는 코드가 먼저 오고 그 다음에 그 파라미터를 이용하는 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 업그레이드후 나타난 증상입니다.
: :
: : 테이블 생성은 문제가 없는데 ... 답답한 마음에 몇글자 적어봅니다.
|