Delphi 5와 Access를 묶어 작업하고 있습니다
먼저 Main 창에서 New 창을 띄워 새로운 레코드를 Insert하는 단순한 구성입니다
그런데 문제는 New 창에서 Insert한 후 Main 창을 Refresh하여도 일정시간이 지나야
Insert된 Data를 가져온다는 것입니다
Insert하는 시점에서 Main 창을 Refresh하여 Insert된 것을 반영하지 않으면
안돼는데 3~5초가 지나야 제대로 된 Data를 가져옵니다
제가 뭣인가 설정을 빼먹었나요?
아래 1) 은 ADO를 이용한 ADOQuery를 이용한 Source의 일부이며
아래 2) 는 BDE를 이용한 Query를 이용한 Source의 일부입니다
고수님들의 한수 지도바랍니다
아래 1) ADOQuery를 이용
MyQuery.Append;
MyQuery.FieldValues['Cust_No'] := Edit_CustNo.Text;
MyQuery.FieldValues['Bill_To'] := Edit_BillTo.Text;
MyQuery.FieldValues['Loc_Addr'] := Edit_LocAddr.Text;
MyQuery.FieldValues['Biz_Mode'] := StrToIntDef(Edit_BizMode.Text,0);
MyQuery.FieldValues['AR_Term'] := StrToIntDef(Edit_ARTerm.Text,0);
if(UpperCase(CBox_Contact.Text) = 'TRUE') then
MyQuery.FieldValues['Contact'] := true
else
MyQuery.FieldValues['Contact'] := false;
MyQuery.FieldValues['Shi'] := Edit_SHI.Text;
MyQuery.FieldValues['Our_Comment'] := Edit_Comment.Text;
MyQuery.Post;
아래 2)Query 이용
MyQuery.close;
MyQuery.sql.clear;
qryString := 'INSERT INTO TCom_Customer';
qryString := qryString + ' (Cust_No, Bill_To, Loc_Addr, Biz_Mode,';
qryString := qryString + ' AR_Term, Contact, Shi, Our_Comment)';
qryString := qryString + ' VALUES
(:pCustNo, :pBillTo, :pLocAddr, :pBizMode,';
qryString := qryString + ' :pARTerm, :pContact, :pShi, :pComment)';
MyQuery.sql.Add(qryString);
MyQuery.ParamByName('pCustNo').AsString := Edit_CustNo.Text;
MyQuery.ParamByName('pBillTo').AsString := Edit_BillTo.Text;
MyQuery.ParamByName('pLocAddr').AsString := Edit_LocAddr.Text;
MyQuery.ParamByName('pBizMode').AsInteger := StrToIntDef
(Edit_BizMode.Text,0);
MyQuery.ParamByName('pARTerm').AsInteger := StrToIntDef(Edit_ARTerm.Text,0);
if(UpperCase(CBox_Contact.Text) = 'TRUE') then
MyQuery.ParamByName('pContact').AsBoolean := true
else
MyQuery.ParamByName('pContact').AsBoolean := false;
MyQuery.ParamByName('pSHI').AsString := Edit_SHI.Text;
MyQuery.ParamByName('pComment').AsString := Edit_Comment.Text;
try
MyQuery.ExecSQL;
except
on E: Exception do
if not (E is ENoResultSet) then begin
raise;
MyQuery.close;
MyQuery.Free;
exit;
end
end;
MyQuery.close;
> Delphi 5와 Access를 묶어 작업하고 있습니다
> 먼저 Main 창에서 New 창을 띄워 새로운 레코드를 Insert하는 단순한 구성입니다
> 그런데 문제는 New 창에서 Insert한 후 Main 창을 Refresh하여도 일정시간이 지나야
> Insert된 Data를 가져온다는 것입니다
>
> Insert하는 시점에서 Main 창을 Refresh하여 Insert된 것을 반영하지 않으면
> 안돼는데 3~5초가 지나야 제대로 된 Data를 가져옵니다
>
> 제가 뭣인가 설정을 빼먹었나요?
>
> 아래 1) 은 ADO를 이용한 ADOQuery를 이용한 Source의 일부이며
> 아래 2) 는 BDE를 이용한 Query를 이용한 Source의 일부입니다
>
> 고수님들의 한수 지도바랍니다
>
> 아래 1) ADOQuery를 이용
> MyQuery.Append;
> MyQuery.FieldValues['Cust_No'] := Edit_CustNo.Text;
> MyQuery.FieldValues['Bill_To'] := Edit_BillTo.Text;
> MyQuery.FieldValues['Loc_Addr'] := Edit_LocAddr.Text;
> MyQuery.FieldValues['Biz_Mode'] := StrToIntDef(Edit_BizMode.Text,0);
> MyQuery.FieldValues['AR_Term'] := StrToIntDef(Edit_ARTerm.Text,0);
> if(UpperCase(CBox_Contact.Text) = 'TRUE') then
> MyQuery.FieldValues['Contact'] := true
> else
> MyQuery.FieldValues['Contact'] := false;
>
> MyQuery.FieldValues['Shi'] := Edit_SHI.Text;
> MyQuery.FieldValues['Our_Comment'] := Edit_Comment.Text;
> MyQuery.Post;
>
>
> 아래 2)Query 이용
>
> MyQuery.close;
> MyQuery.sql.clear;
> qryString := 'INSERT INTO TCom_Customer';
> qryString := qryString + ' (Cust_No, Bill_To, Loc_Addr, Biz_Mode,';
> qryString := qryString + ' AR_Term, Contact, Shi, Our_Comment)';
> qryString := qryString + ' VALUES
> (:pCustNo, :pBillTo, :pLocAddr, :pBizMode,';
> qryString := qryString + ' :pARTerm, :pContact, :pShi, :pComment)';
> MyQuery.sql.Add(qryString);
> MyQuery.ParamByName('pCustNo').AsString := Edit_CustNo.Text;
> MyQuery.ParamByName('pBillTo').AsString := Edit_BillTo.Text;
> MyQuery.ParamByName('pLocAddr').AsString := Edit_LocAddr.Text;
> MyQuery.ParamByName('pBizMode').AsInteger := StrToIntDef
> (Edit_BizMode.Text,0);
> MyQuery.ParamByName('pARTerm').AsInteger := StrToIntDef(Edit_ARTerm.Text,0);
>
> if(UpperCase(CBox_Contact.Text) = 'TRUE') then
> MyQuery.ParamByName('pContact').AsBoolean := true
> else
> MyQuery.ParamByName('pContact').AsBoolean := false;
> MyQuery.ParamByName('pSHI').AsString := Edit_SHI.Text;
> MyQuery.ParamByName('pComment').AsString := Edit_Comment.Text;
>
> try
> MyQuery.ExecSQL;
> except
> on E: Exception do
> if not (E is ENoResultSet) then begin
> raise;
> MyQuery.close;
> MyQuery.Free;
> exit;
> end
> end;
> MyQuery.close;
전 초보인데 도움이 되셨으면 합니다.
query1.DisableControls;
{요부분에 refresh할 것들을 써주시면 되지 않을듯 합니다.}
query1.EnableControls;
--레코드를 서버에서 한번 읽어서 뿌려준다면 예를 들어 레코드 20000건이라면 20000번
읽어서 그리드에 뿌려주는 일을 20000번 합니다. DisableControls;이란놈은 사용자 눈엔 보이지 않게 하면서 20000번을 내부적으로 읽어서 query1.EnableControls;요렇게 하면 한번에 보이죠. 제가 우편번호로 테스트 해