사용환경 : WIN98, DELPHI 4, MS-SQL SERVER 7.0
안녕하세요...
실력이 미흡하여 다시 질문을 올립니다.
고수님들의 많은 도움을 부탁드립니다.
폼이 active 될때 search_today라는 함수를 통해서
오늘날짜의 data를 추출해 내려고 하는데
아래와 같이 하게되면 Access Violation Error가 납니다.
그런데 FormActivate에서 "setmode:=3, search_today'를
뺀 후 불러오기를 하면 잘 되는데, 첨 폼의 Active될때
아래와 같이 자료를 추출해 낼 수 있는 방법이 없을까요?
여기에 대해 아시는 고수님의 도움을 받고자 합니다.
(ondatechange 쪽 문제같은데, 저로서는 뾰쪽한 수가 없습니다.)
{ 소스 입니다.}
procedure Tfrm_nego.FormActivate(Sender: TObject);
begin
frm_dm_nego.qry_negopo.Active := true;
frm_dm_nego.tbl_nego.Active := true;
text_clear;
setmode := 3; //오늘날짜 자료 추출
search_today;
end;
procedure Tfrm_nego.search_today;
var
sSql : string;
begin
with frm_dm_nego.qry_negotoday do
begin
close;
sql.Clear;
sSql := 'select *, substring(id#,3,11) as iid from licnego ';
sSql := sSql + ' where negodate = :dday';
sSql := sSql + ' order by buyer';
Sql.Add(sSql);
case setmode of
2 : ParamByName('dday').AsDatetime:= strtodatetime(qry_param);
3 : ParamByName('dday').AsDatetime:= strtodatetime(formatdatetime('yyyy-mm-dd',now));
4 : ParamByName('dday').AsDatetime:= strtodatetime(de_negodate.Text) ;
end;
open;
end;
end;
procedure Tfrm_nego.tb_loadClick(Sender: TObject); //불러오기
begin
setmode := 2;
Application.CreateForm(Tfrm_dateselect, frm_dateselect);
frm_dateselect.ShowModal;
if frm_dateselect.ModalResult = mrOK then
begin
qry_param := u_dateselect.d_select;
frm_dateselect.Close;
frm_dateselect.Free;
end;
search_today;
tbsave.Enabled := true;
if frm_dm_nego.qry_negotoday.RecordCount = 0 then
begin
messagedlg('자료가 없습니다.',mtinformation,[mbok],0);
text_clear;
end;
end;
// data 모듈에서의 datasource 입니다.
procedure Tfrm_dm_nego.ds_negotodayDataChange(Sender: TObject; Field: TField);
begin
case u_nego.setmode of
2..4 : begin
with qry_negotoday, frm_nego do
begin
if recordcount <> 0 then
begin
de_negodate.text := DateTimeToStr(FieldByName('negodate').asdatetime) ;
ke_id.Text := copy(FieldByName('id#').AsString,3,11) ;
rlc_buyer.DisplayValue := FieldByName('buyer').AsString ;
rlc_po.DisplayValue := FieldByName('po#').AsString ;
rlc_cat.DisplayValue := FieldByName('quota').AsString ;
kfe_qty.value := FieldByName('qty').asfloat ;
kfe_qty1.value := FieldByName('qty1').asfloat ;
kfe_up.value := FieldByName('up').asfloat;
kfe_amnt.value := FieldByName('amnt').asfloat ;
ke_sunsa.text := FieldByName('sunsa').AsString ;
ke_haja.text := FieldByName('haja').AsString ;
ke_remark.text := FieldByName('remark').AsString ;
end else
exit;
end;
end;
end;
end;
OnDataChange Event의 맨 처음 부분에 다음을 추가해 보세요.
if Field = nil then Exit;
에러가 나지 않는다면 작동은 제대로 되는지 테스트 해 보시구요.
그때쯤 되면 이유를 알 수 있을 겁니당~~ ^^;;
그럼 좋은 코딩 하세요.
강동길 wrote:
> 사용환경 : WIN98, DELPHI 4, MS-SQL SERVER 7.0
> 안녕하세요...
> 실력이 미흡하여 다시 질문을 올립니다.
> 고수님들의 많은 도움을 부탁드립니다.
>
> 폼이 active 될때 search_today라는 함수를 통해서
> 오늘날짜의 data를 추출해 내려고 하는데
> 아래와 같이 하게되면 Access Violation Error가 납니다.
> 그런데 FormActivate에서 "setmode:=3, search_today'를
> 뺀 후 불러오기를 하면 잘 되는데, 첨 폼의 Active될때
> 아래와 같이 자료를 추출해 낼 수 있는 방법이 없을까요?
> 여기에 대해 아시는 고수님의 도움을 받고자 합니다.
> (ondatechange 쪽 문제같은데, 저로서는 뾰쪽한 수가 없습니다.)
>
>
> { 소스 입니다.}
> procedure Tfrm_nego.FormActivate(Sender: TObject);
> begin
> frm_dm_nego.qry_negopo.Active := true;
> frm_dm_nego.tbl_nego.Active := true;
> text_clear;
> setmode := 3; //오늘날짜 자료 추출
> search_today;
> end;
>
> procedure Tfrm_nego.search_today;
> var
> sSql : string;
> begin
> with frm_dm_nego.qry_negotoday do
> begin
> close;
> sql.Clear;
> sSql := 'select *, substring(id#,3,11) as iid from licnego ';
> sSql := sSql + ' where negodate = :dday';
> sSql := sSql + ' order by buyer';
> Sql.Add(sSql);
> case setmode of
> 2 : ParamByName('dday').AsDatetime:= strtodatetime(qry_param);
> 3 : ParamByName('dday').AsDatetime:= strtodatetime(formatdatetime('yyyy-mm-dd',now));
> 4 : ParamByName('dday').AsDatetime:= strtodatetime(de_negodate.Text) ;
> end;
> open;
> end;
> end;
>
> procedure Tfrm_nego.tb_loadClick(Sender: TObject); //불러오기
> begin
> setmode := 2;
> Application.CreateForm(Tfrm_dateselect, frm_dateselect);
> frm_dateselect.ShowModal;
> if frm_dateselect.ModalResult = mrOK then
> begin
> qry_param := u_dateselect.d_select;
> frm_dateselect.Close;
> frm_dateselect.Free;
> end;
> search_today;
> tbsave.Enabled := true;
> if frm_dm_nego.qry_negotoday.RecordCount = 0 then
> begin
> messagedlg('자료가 없습니다.',mtinformation,[mbok],0);
> text_clear;
> end;
> end;
>
>
> // data 모듈에서의 datasource 입니다.
> procedure Tfrm_dm_nego.ds_negotodayDataChange(Sender: TObject; Field: TField);
> begin
> case u_nego.setmode of
> 2..4 : begin
> with qry_negotoday, frm_nego do
> begin
> if recordcount <> 0 then
> begin
> de_negodate.text := DateTimeToStr(FieldByName('negodate').asdatetime) ;
> ke_id.Text := copy(FieldByName('id#').AsString,3,11) ;
> rlc_buyer.DisplayValue := FieldByName('buyer').AsString ;
> rlc_po.DisplayValue := FieldByName('po#').AsString ;
> rlc_cat.DisplayValue := FieldByName('quota').AsString ;
> kfe_qty.value := FieldByName('qty').asfloat ;
> kfe_qty1.value := FieldByName('qty1').asfloat ;
> kfe_up.value := FieldByName('up').asfloat;
> kfe_amnt.value := FieldByName('amnt').asfloat ;
> ke_sunsa.text := FieldByName('sunsa').AsString ;
> ke_haja.text := FieldByName('haja').AsString ;
> ke_remark.text := FieldByName('remark').AsString ;
> end else
> exit;
> end;
> end;
> end;
> end;