Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[12428] Re:Re:[질문]Delphi2007에서 DBExpress사용시 한글로된 필드값변경시 오류
이용남 [tachyon5] 2041 읽음    2009-02-10 17:33
테스트해본 결과 파리미터 생성과는 무관했습니다.
한글로 된 기존 테이블을 영문으로 변경후 아래 코드로 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 업그레이드후 나타난 증상입니다.
: :
: : 테이블 생성은 문제가 없는데 ... 답답한 마음에 몇글자 적어봅니다.

+ -

관련 글 리스트
12407 [질문]Delphi2007에서 DBExpress사용시 한글로된 필드값변경시 오류 이용남 2099 2009/02/04
12422     Re:[질문]Delphi2007에서 DBExpress사용시 한글로된 필드값변경시 오류 박지훈.임프 2011 2009/02/07
12428         Re:Re:[질문]Delphi2007에서 DBExpress사용시 한글로된 필드값변경시 오류 이용남 2041 2009/02/10
12435             Re:Re:Re:[질문]Delphi2007에서 DBExpress사용시 한글로된 필드값변경시 오류 박지훈.임프 2602 2009/02/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.