Q&A

  • 폼생성시에 data추출 <<정말 급해요!!>>
사용환경 : 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;

3  COMMENTS
  • Profile
    OD 2000.04.09 03:08
    안녕하세요. OD입니다.

    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;

  • Profile
    이치형 2000.04.08 21:33
    강동길 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;

    안녕하세요.. 저두 그런 에러가 발생한 적있거든요...

    Acess Vio에러가 발생하면 일단 Search_Today함수의 에 Break Point를 걸어 실행 시키면

    그 지점에서 멈출거잔아요, 그러면 F7를 눌러 Trace를 해보세요.. 그럼 구체적으로 어느 부분

    에서 나는지를 알수 있을 거에요..

    그리구 frm_dm_nego.qry_negotoday콤포넌트가 다른 곳에서 혹시 다른 질의문으로 Open 되어 있지 않나요,, DBGrid와 연결되어가지구,,다시 확인 해 보세요..

    이런 에러는 일단 차근차근 하나씩 하나씩 좁혀 나가야 돼요.. 에러나는 부분 말고

    나머지부분을 Remark 처리하구 하나씩 Remark를 제거해보면서 해보면 에러를 잡을수 있어요

    저는 그렇게 했어요..그리구 다시 메일주세요..

  • Profile
    강동길 2000.04.08 22:32
    이치형님 답변에 감사드립니다.

    에러 위치는 알고 있는데 왜 에러가 나는지 잘 모르거든요...



    qry_negotoday는 Dbgrid에 연결되어 있습니다. search_today에서

    qry_negotoday (query)가 open된 후 datachange 이벤트가 시작되면서



    de_negodate.text := DateTimeToStr(FieldByName('negodate').asdatetime) ;

    에서 에러가 발생하거든요...



    폼이 active되면서 open(search_today) 시키지 않고, 불러오기(tb_load)

    를 할 때는 에러없이 잘 열립니다. 즉 form active를 시키면서 search_today만

    실행 시키면 에러가 뜹니다.



    다시 한번 도움을 주시면 감사드리겠습니다. 그리고 좋은 주말 되세요~ ^.^;





    > > // 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;



    • hj998811
    • 2000.04.08 21:12
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 윤진화
      2000.04.11 06:09
      제 나름대로 간략한 그림그리기 기법을 통해서 그 그려진 그림을 BMP파일로 저장하는 예제를 아래에 올립...
    • 정상락
      2000.04.15 02:13
      윤진화씨 정말로 감사합니다. 덕분에 간단하게 해결이 되었습니다. 진심으로 감사드리며 좋은 하루가 되...
    • 장민석
    • 2000.04.08 20:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이치형
      2000.04.08 21:19
      장민석 wrote: > 잘되던 프로그램이었는데 IP를 바꾸고 나서 다음과 같은 error 가 뜨네요 > 해결방법은 ...
    • 강동길
    • 2000.04.08 20:39
    • 3 COMMENTS
    • /
    • 0 LIKES
    • OD
      2000.04.09 03:08
      안녕하세요. OD입니다. OnDataChange Event의 맨 처음 부분에 다음을 추가해 보세요. if Field = nil the...
    • 이치형
      2000.04.08 21:33
      강동길 wrote: > 사용환경 : WIN98, DELPHI 4, MS-SQL SERVER 7.0 > 안녕하세요... > 실력이 미흡하여 ...
    • 강동길
      2000.04.08 22:32
      이치형님 답변에 감사드립니다. 에러 위치는 알고 있는데 왜 에러가 나는지 잘 모르거든요... qry_nego...
    • 창백한달빛
      2000.04.08 20:49
      hee wrote: > 제목 그대로 입니다. bde나 odbc를 이용하지 않고 직접 연결 하는 방법이 없나해서요. ...
    • 조규춘
      2000.04.08 20:55
      타락천사 wrote: > 안녕하세여.. 타락임다.. 꾸벅.. > > 한델에서 열쒸미 배우고 있섭니다.. 감사함다....
    • 이치형
      2000.04.08 21:10
      타락천사 wrote: > 안녕하세여.. 타락임다.. 꾸벅.. > > 한델에서 열쒸미 배우고 있섭니다.. 감사함다....
    • 타락천사
      2000.04.08 21:06
      안녕하세여.. 타락임다.. ^^ 3개 이상의 조합키가 궁금했는데, 해보니까 돼더군여..^^ ..님 감사합니...
    • 사노테
    • 2000.04.08 19:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이치형
      2000.04.08 20:58
      사노테 wrote: > BDE Administrator을 써서 DataBase DB 라고 하나 만들어 넣고여.. > 아무것두 안하구 ...
    • 타락천사
      2000.04.08 23:56
      안녕하세여. 타락임다.. 꾸벅... 흠.. ..님이 답변해 주셨는데, 제 질문은 그게 아니였는데.. ^^;;;; ...
    • 타락천사
      2000.04.09 02:58
      안녕하세여.. 타락임다.. 꾸벅.. ShortString 과 AnsiString을 구분해서 써야해여.. 제가 통신에 쓰...
    • 황 현
    • 2000.04.08 19:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • mr.Q
    • 2000.04.08 12:16
    • 3 COMMENTS
    • /
    • 0 LIKES
    • mr.Q
      2000.04.08 13:18
      헉~ i1이 하나의 변수인데, 제가 잘못봤습니다. 죄송~
    • 최용일
      2000.04.08 12:32
      울랄랄라~ 델파이 6이 새로 나왔나 보네요... 저두 하나 보내주세요... 델파이 1~5까진 안되는 내용인데...
    • mr.Q
      2000.04.08 12:48
      헉~~ 아직 안주무시나요? 무지 배고픈 밤이네요. ^^ 저 코드를 쓴 사람은, 델4를 썼는데, 문법을 개조한 ...
    • mr.Q
      2000.04.08 12:43
      이렇게 하니 되는군요. implementation {$R *.DFM} var keyTag:integer; procedure TForm1...
    • mr.Q
      2000.04.08 13:16
      일부 수정 mr.Q wrote: > > 이렇게 하니 되는군요. > > implementation > > {$R *.DFM} > va...
    • 이용현
    • 2000.04.08 08:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.08 23:01
      안녕하세요. 최용일입니다. constructor는 객체에 인스턴스를 링크시키는 역활을 할 뿐 어떤 에러 코드...
    • 음냐~
      2000.04.08 08:47
      이 질문은 밑빠진 독에 불부으면 물이 가득차냐는 질문이랑 같습니다. 이용현 wrote: > TFilestream.Cr...
    • 최용일
      2000.04.08 10:52
      안녕하세요. 최용일입니다. 에고~ 에고~ 두가지가 있다고 했는데 한가지만 설명드렸네요. 날이 갈수록 ...
    • 최용일
      2000.04.08 08:15
      안녕하세요. 최용일입니다. 오른쪽 정렬은 아래와 같이 텍스트 출력하는 부분만 약간 수정하시면 될것 ...
    • 황현동
    • 2000.04.08 05:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.04.08 06:17
      황현동 wrote: > 무슨 키 누르면 뭐해라 (폼에서) > > 대충 아주 간단한 예제라도 하나 알려주세요 ...
    • 황현동
    • 2000.04.08 05:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.08 23:16
      안녕하세요. 최용일입니다. FindFirst, FindNext, FindClose함수를 이용하면 구현하실 수 있습니다. ...