아래와 같은문장을 써서 insert시키는데....
insert가 두번되어 값이 겹쳐 들어가염....
모가 잘못된건지...
제발염... ㅡ.ㅜ
with query1 do
begin
sql.clear;
SQL.Add( 'SELECT * FROM jumin2' );
SQL.Add( ' WHERE ( bupin = ''' + sList.Strings[1] + ''' )' );
open;
if ( RecordCount = 0 ) then
begin
SQL.Clear;
SQL.Add( 'INSERT INTO JUMIN2' );
SQL.Add( ' ( BUPINNO, BTAMT, GAMT, BTMMT, GMMT, ANBUN, JGASE, GASE, ' );
SQL.Add( ' JUMINSE, GASANSE, TTOT, SDAY, EDAY, UPDAY, PDAY, BANK, saupno )' );
SQL.Add( ' VALUES ( ''' + sList.Strings[1] + ''',' ); //사업장관리번호
SQL.Add( ' ''' + sList.Strings[21] + ''',' ); //법인 총종업원수
SQL.Add( ' ''' + sList.Strings[23] + ''',' ); //관내 종업원수
SQL.Add( ' ''' + sList.Strings[22] + ''',' ); //법인총면적
SQL.Add( ' ''' + sList.Strings[24] + ''',' ); //관내과세면적
SQL.Add( ' ''' + sList.Strings[27] + ''',' ); //안분비율
SQL.Add( ' '' 1111 '',' ); //전체과세표준
SQL.Add( ' '' 1111 '',' ); //과세표준
SQL.Add( ' ''' + sList.Strings[31] + ''',' ); //주민세
SQL.Add( ' ''' + sList.Strings[32] + ''',' ); //가산세
SQL.Add( ' ''' + sList.Strings[38] + ''',' ); //합계
SQL.Add( ' ''' + sList.Strings[33] + ''',' ); //귀속사업시작일
SQL.Add( ' ''' + sList.Strings[34] + ''',' ); //귀속사업종료일
SQL.Add( ' ''' + sList.Strings[35] + ''',' ); //법인세신고일
SQL.Add( ' ''' + sList.Strings[36] + ''',' ); //지급일
SQL.Add( ' ''' + copy(sList.Strings[37],4,20) + ''',' ); //은행
SQL.Add( ' ''' + sList.Strings[5] + ''')' ); //사업자번호행
ExecSQL;
end
else
MessageDlg( #13+'이미 입력되어 있는 사업장입니다!',mtWarning,[mbok],0 );
end;
Query1.CLOSE;
Query1.OPEN;
Query1.Locate('bupinNo', sList.Strings[1], [loPartialKey]);
end;
잘못된 부분... 레코드가 0일 경우에...sql 안에는 insert 문이 들어가 있습니다.
execSQL을 실행하고 나서..
밑에 부분에서. 다시 Close; open 을 시켜주네요..
open 때문에 한번 더 들어가는 겁니다.
되도록이면...
먼저 레코드카운트를 확인하고 나서.. 쿼리를 닫으세요..
if recordcount.... then
begin
Close;
SQl.Clear;
... insert문
end else begin
.. 중복처리
end;
이제 다시 쿼리를 여시는것 같은데.. 이전에 insert 문이 들어가 있으니까..
다지워주고 select 문을 다시 써줍니다..
( 이것도 되도록 insert가 되는 query 하고 select 가 되는 쿼리는 따로 두시는게 프로그램하시는데 편하실껍니다. 같이 해도 상관없구요 )
2. 쿼리 사용하실때..
SQL.Add(' ''' + sList.Strings[21] + ''',' ); //법인 총종업원수
// 이렇게 쓰지 마세요...
SQL.Add( ':JUMINSE');
paramByNAme('JUMINSE').AsString := sList.Strings[21];
이러한 방식으로 사용하세요..
훨신 안정적입니다.. 코딩은 더 길어지지만요.. 지금 사용하시는
코딩보다는 훨신 안정적이고 에러에 강하니 이방법을 사용하세요..
그럼...