안녕하세요
모두들 즐거운 저녁을 보내고계시는지요..
DBExpress에 대해 알지를못해서 문의드립니다..
왜저런것도 모르지 하고 지나치시마시구요..
답변 꼭 부탁드려요..
A서버의 테이블에서 데이타를 읽어와서
B서버의 테이블에 데이타를 인서트 하는겁니다.
A서버 데이타조회: TSQLConnection-TSQLQuery-TDataSetProvider-TClientDataSet-tDataSource-Grid
B서버 데이타조회: TSQLConnection-TSQLQuery-TDataSetProvider-TClientDataSet
A서버 데이타는 문제없이 조회가됩니다.
근데 B서버로 데이타 인서트가 되질않습니다.
TSQLQuery.Close
TSQLQuery.SQL := 인터스문장(INSERT INTO a_table VALUES (:a,:b) )
TSQLQuery.ParamByName('a').AsString := aa;
TSQLQuery.ParamByName('b').AsString := bb;
TSQLQueryExecSQL;
TClientDataSet.Open;
TClientDataSet.ApplyUpdates(-1);
이렇게 처리하였더니
Project Project1.exe raised exception class TDBXError with message 'DBX Error: ParameterNotSet'.
에러가납니다..
DBExpress컴포넌트는 단방향버퍼컴포넌트여서 TDataSetProvider-TClientDataSet을 함께 써야한다고
해서 했는데..도저히 되질않습니다..
사실 DBExpress 도 처음써봤고...그래서 여기저기서 찾아보아도..명쾌하게 알수가없어서
이렇게 직접 질문을올립니다..
그럼 좋은 밤들 되세요..
둘다 ClientDataSet (줄여서 CDS) 을 쓰셨으면 CDS 를 그냥 쓰시면 되요..
INSERT 시만..(EDIT 는 배제 햇습니다.)
A 서버쪽의 CDS를 CDS_A 라 하고 B서버쪽의 CDS를 CDS_B 라 하면요..ㅎㅎ
1. 일단 A서버쪽의 데이터를 오픈합니다.
begin
with CDS_A do begin
Close;
CommandText := 'SELECT aa, bb FROM A_TABLE WHERE .....' ; //쿼리문
Open;
//만약 비어있지 않다면...B서버쪽에 쿼리한 데이터를 입력 합니다.
if not IsEmpty then begin
with CDS_B do begin
Close;
CommandText := 'SELECT aa, bb FROM A_TABLE WHERE 1 = -1 ' ; //where 조건에 1 = -1을 해서 일단 테이블을 오픈합니다.
Open;
//CDS_A 의 조회된 데이터를 루핑돌리며 CDS_B 의 필드에 입력 합니다.
CDS_A.DisableControls; //CDS 를 Controls 를 Enable True 하면 루핑돌는게 화면에 보여서...일단 DisableControls 해놓습니다. (그리드에서 쭉 내려가는게 보여요..ㅎㅎ)
CDS_A.First; //가장 처움레코드부터 루핑돌려야 겠죠?
try
while not CDS_A.Eof do begin
Insert;
FieldByName('a').AsString := CDS_A.FieldByName('a').AsString
FieldByName('b').AsString := CDS_A.FieldByName('a').AsString ;
Post;
CDS_A.Next;
end;
finally
CDS_A.EnableControls;
end;
//입력이 끝나면 CDS_B 의 데이터를 서버에 업데이트 합니다.
if CDS_B.ApplyUpdates(0) > 0 then Exit;
end;
end;
end;
end;
이렇게 해보시면 어떻시겠어요...
입력만 했는데...CDS 의 EDIT 나 DELETE 등도 가능합니다..