델파이5, MS-SQL Server 7.0을 사용합니다.
ADO컴포넌트를 사용 합니다.
accADO.BeginTrans(); //TADOConnection컴포넌트
with SQLado do begin //ADOQuery
close;
sql.clear;
sql.add('INSERT INTO TESTDB');
SQL.ADD('(생략)');
ExecSQL;
end;
accADO.CommitTrans;
잘 입력 됩니다.
=============================================================
accADO.BeginTrans();
with SQLado do begin //Query1
close;
sql.clear;
sql.add('INSERT INTO TESTDB');
SQL.ADD('(생략)');
ExecSQL;
end;
with SQLado do begin //Query2
close;
sql.clear;
sql.add('INSERT INTO TESTDB');
ExecSQL;
end;
accADO.CommitTrans;
이 경우는 Query2의 부분만 저장이 되네요...
==============================================================================
accADO.BeginTrans(); //TADOConnection컴포넌트
for i := 1 to 10 do begin
with SQLado do begin //ADOQuery
close;
sql.clear;
sql.add('INSERT INTO TESTDB');
SQL.ADD('(생략)');
ExecSQL;
end;
end;
accADO.CommitTrans;
이 경우는 저장이 안되네요...
==============================================================================
실제 상황은 for문도 두어개 됩니다.
그러나 BeginTrans 와 CommitTrans는 최초와 마지막에 사용 하는 것이 맞는것 같고요
그리 했더니 저장이 안됩니다.
저~기 아래 질문을 했었는데 아침부터 계속 안돼서 다시질문을 올립니다.
죄성합니다.
accADO.BeginTrans(); //TADOConnection컴포넌트
for i := 1 to 10 do begin
with SQLado do begin //ADOQuery
ExecSQL;
end;
end;
for i := 1 to 10 do begin
with SQLado do begin //ADOQuery
ExecSQL;
end;
end;
with SQLado do begin //ADOQuery
ExecSQL;
end;
accADO.CommitTrans;
위 구문은 틀린 것인가요? 제대로 하려면 어떻게바꾸어 주어야 하나요?
감사합니다.
웬만큼 되어서 본격적으로 작업 했더니 정작 안되네요???
저 아래 구문중 WITH 문 하나 빼면 DB 두개에 저장이 잘 되는데... 다시 넣으면
전체가 입력이 안됩니다.
에러가 나는것은 아니구요 커밋까지 잘 흘러갑니다. 그러나 정작 데이터는 저장이
안되네요.~~~~~디비 두개 다 저장이 안되네여
음.... 뒷골이 땡겨 진통제 먹고 다시 합니다......
고수님들 다시함 살펴봐 주세요...
ps>잠시 상황설명: MS-SQL디비는 외부업체가 만든 DataBase 입니다.
저는 그 디비에 키값설정해서 한번에 많은 량의 데이터를 입력하고자 합니다.
DB를 살펴보니 데이터 한건을 입력받으면 Table은 4개에 입력이 되고 그중 한테이블에는
레코드가 22개나 생깁니다.
//===========================================================================
DDstr := '';
DDstr :=' INSERT INTO TESTDB1 '+
' (....) ' +
' VALUES '+
' (:P....) ';
//===========================================================================
UDstr := '';
UDstr :=' INSERT INTO TESTDB2 '+
' (....) '+
' VALUES '+
' (:P....) ';
//===========================================================================
accADO.BeginTrans();
try
with QRYt305 do begin
first;
Li_no := 0;
while not eof do begin
for i := 1 to 3 do begin //1청구금액, 2부가세,3합계로 나누기 위해..
inc(Li_no);
if i = 1 then begin
for j := 1 to 6 do begin
with ADOCommand1 do begin //INSERT INTO TESTDB1
commandtext := '';
commandtext := DDstr;
Parameters.ParamByName('P...').Value:= frdt;
Execute;
end;
end;
with ADOCommand2 do begin //INSERT INTO TESTDB2
commandtext := '';
commandtext := UDstr;
Parameters.ParamByName('P...').Value:= frdt;
Execute;
end;
end else
if i = 2 then begin
for j := 1 to 6 do begin
with ADOCommand1 do begin //INSERT INTO TESTDB1
commandtext := '';
commandtext := DDstr;
Parameters.ParamByName('P...').Value:= frdt;
Execute;
end;
end;
with ADOCommand2 do begin //INSERT INTO TESTDB2
commandtext := '';
commandtext := UDstr;
Parameters.ParamByName('P...').Value:= frdt;
Execute;
end;
end else
if i = 3 then begin
for j := 1 to 10 do begin
with ADOCommand1 do begin //INSERT INTO TESTDB1
commandtext := '';
commandtext := DDstr;
Parameters.ParamByName('P...').Value:= frdt;
Execute;
end;
end;
//============요기부터 없으면 제대로 입력됨===========
//============있으면 전부 입력이 안됨=================
with ADOCommand2 do begin //INSERT INTO TESTDB2
commandtext := '';
commandtext := UDstr;
Parameters.ParamByName('P....').Value:= frdt;
Execute;
end;
//============요기까지================================
end;
end;
Next;
end;
end;
accADO.CommitTrans;
except
on E:Exception do begin
accADO.RollBackTrans;
showmessage('입력 실패' + #13+ E.Message);
Exit;
end;
end;
showmessage('성공');