Q&A

  • 또 여쭤봅니다..; login form modal 생성
염치불구.. 계속 질문 올립니다..
여기저기 찾아보면서 login form을 모달로 띄우는걸 했는데요..

확인버튼을 눌렀을때,
db의 id/pw랑 다르면 에러 메세지 띄우고 로긴 창이 계속 떠있게 해야하는데
저는 메세지 띄우고 로긴창이 꺼지고 메인창이 뜹니다.
질답이랑 팁에 이런 내용이 있던데..
그래서 나름 한다고 했는데 에러만 자꾸뜨네요 -_-;;;
메모리 참조에러..헉....ㅠ

뭐가 잘못된건지 좀 확인 부탁드릴께요.. ;


이 부분이 project->view source 했을때구요..
=======================================

program RFIDAttend;

uses
  Forms,
  Controls,
  Admin_Main in 'Admin_Main.pas' {form_Main},
  Admin_Login in 'Login\Admin_Login.pas' {form_Login},
  Conne_DM in 'DataModule\Conne_DM.pas' {ConneDMs: TDataModule},
  Prof in 'Prof\Prof.pas' {form_ProfInfo},
  ExitMBox in 'Login\ExitMBox.pas' {form_ExitMbox},
  Student in 'Student\Student.pas' {form_StudInfo},
  OpenDM in 'DataModule\OpenDM.pas' {OpenDMs: TDataModule},
  About in 'Help\About.pas' {ab_About},
  Lesson in 'Class\Lesson.pas' {form_ClassLess},
  Attend in 'Class\Attend.pas' {form_ClassAttend},
  QureyDM in 'DataModule\QureyDM.pas' {QureyDMs: TDataModule};

{$R *.res}
var
  strID, strPW: string;

begin

  Application.Initialize;
// 로그인용 폼을 생성한다.
  with Tform_Login.Create(Application) do  begin
    if ShowModal = mrOK then begin
      // 인자 값을 받는다.
      strID := edit_LoginID.Text;
      strPW := edit_LoginPW.Text;

      // 메인폼을 생성한다.
      Application.CreateForm(Tform_Main, form_Main);
      Application.CreateForm(Tform_ProfInfo, form_ProfInfo);
      Application.CreateForm(Tform_ExitMbox, form_ExitMbox);
      Application.CreateForm(Tform_StudInfo, form_StudInfo);
      Application.CreateForm(TOpenDMs, OpenDMs);
      Application.CreateForm(Tab_About, ab_About);
      Application.CreateForm(Tform_ClassLess, form_ClassLess);
      Application.CreateForm(Tform_ClassAttend, form_ClassAttend);
      Application.CreateForm(TQureyDMs, QureyDMs);
      Hide;
      Free;
      Application.Run;
    end else if ModalResult = mrCancel then begin
      Tform_Login.Create(Application);
    end;
end
===============================================



이 부분이 로긴 창 부분입니다..
=================================================
procedure Tform_Login.bbt_LoginClick(Sender: TObject);
begin
    if (edit_LoginID.Text = '') or (edit_LoginPW.Text = '') then begin
       try
         MessageDlg('ID와 PASSWORD를 모두 입력해 주세요.',mtError,[mbOK],0);
         ModalResult := mrCancel;
         edit_LoginID.Clear;
         edit_LoginPW.Clear;
         edit_LoginID.SetFocus;
         exit;
       except
         MessageDlg('오류발생',mtError,[mbOK],0);
         ModalResult := mrCancel;
         edit_LoginID.SetFocus;
         exit;
       end;
    end else begin
       if ConneDMs.zcconn.Connected = False then ConneDMs.zcconn.Connected := True;
       if QureyDMs.zrq_Admin.Active = False then QureyDMs.zrq_Admin.Active := True;

       if QureyDMs.zrq_Admin.Active = True then begin
          QureyDMs.zrq_Admin.SQL.Clear;
          QureyDMs.zrq_Admin.SQL.Add('Select * from ADMINISTRATOR where UID=''+edit_LoginID.Text+'' and PASSWD=''edit_LoginPW.Text''');
          QureyDMs.zrq_Admin.Open;

          if QureyDMs.zrq_Admin.IsEmpty then begin
             MessageDlg('아이디 혹은 비밀번호를 잘못입력하였습니다.',mtError,[mbOK],0);
             ModalResult := mrCancel;
             edit_LoginID.Clear;
             edit_LoginPW.Clear;
             edit_LoginID.SetFocus;
             exit;
          end else
             ShowMessage('login성공');
             ModalResult := mrOk;
             exit;
          end;
     end;
end;

============================================================

고수님들 잘못된 부분 좀 알려주세요..
4  COMMENTS
  • Profile
    최용일 2008.06.02 22:05
    ModalResult에 값이 설정되면 모달창은 닫히게 됩니다. 이게 모달의 특성이죠...
    bbt_Login버튼에 ModalResult값을 설정하지 마세요. (mrNone)


    procedure Tform_Login.bbt_LoginClick(Sender: TObject);
    begin
    if (edit_LoginID.Text = '') or (edit_LoginPW.Text = '') then begin
    try
    MessageDlg('ID와 PASSWORD를 모두 입력해 주세요.',mtError,[mbOK],0);
    edit_LoginID.Clear;
    edit_LoginPW.Clear;
    edit_LoginID.SetFocus;
    exit;
    except
    MessageDlg('오류발생',mtError,[mbOK],0);
    edit_LoginID.SetFocus;
    exit;
    end;
    end else begin
    if ConneDMs.zcconn.Connected = False then ConneDMs.zcconn.Connected := True;
    if QureyDMs.zrq_Admin.Active = False then QureyDMs.zrq_Admin.Active := True;

    if QureyDMs.zrq_Admin.Active = True then begin
    QureyDMs.zrq_Admin.SQL.Clear;
    QureyDMs.zrq_Admin.SQL.Add('Select * from ADMINISTRATOR where UID=''+edit_LoginID.Text+'' and PASSWD=''edit_LoginPW.Text''');
    QureyDMs.zrq_Admin.Open;

    if QureyDMs.zrq_Admin.IsEmpty then begin
    MessageDlg('아이디 혹은 비밀번호를 잘못입력하였습니다.',mtError,[mbOK],0);
    edit_LoginID.Clear;
    edit_LoginPW.Clear;
    edit_LoginID.SetFocus;
    end else
    ShowMessage('login성공');
    ModalResult := mrOk;
    end;
    end;
    end;


    mrCancel일경우 프로그램을 종료할 수 있도록 해주시는것이....


    Application.Initialize;
    // 로그인용 폼을 생성한다.
    with Tform_Login.Create(Application) do begin
    if ShowModal = mrOK then begin
    // 인자 값을 받는다.
    strID := edit_LoginID.Text;
    strPW := edit_LoginPW.Text;

    // 메인폼을 생성한다.
    Application.CreateForm(Tform_Main, form_Main);
    Application.CreateForm(Tform_ProfInfo, form_ProfInfo);
    Application.CreateForm(Tform_ExitMbox, form_ExitMbox);
    Application.CreateForm(Tform_StudInfo, form_StudInfo);
    Application.CreateForm(TOpenDMs, OpenDMs);
    Application.CreateForm(Tab_About, ab_About);
    Application.CreateForm(Tform_ClassLess, form_ClassLess);
    Application.CreateForm(Tform_ClassAttend, form_ClassAttend);
    Application.CreateForm(TQureyDMs, QureyDMs);
    Hide;
    Free;
    Application.Run;
    end;
    end;
    end

  • Profile
    이정욱 2008.06.02 22:08
    몇가지 방법이 있습니다.

    일단 암호가 틀렸을 경우 로그인 폼의 ModalResult 를 안주면 괜찬습니다.


    procedure Tform_Login.bbt_LoginClick(Sender: TObject);
    begin
    if (edit_LoginID.Text = '') or (edit_LoginPW.Text = '') then begin
    try
    MessageDlg('ID와 PASSWORD를 모두 입력해 주세요.',mtError,[mbOK],0);
    ModalResult := mrCancel;
    edit_LoginID.Clear;
    edit_LoginPW.Clear;
    edit_LoginID.SetFocus;
    exit;
    except
    MessageDlg('오류발생',mtError,[mbOK],0);
    ModalResult := mrCancel;
    edit_LoginID.SetFocus;
    exit;
    end;
    end else begin
    if ConneDMs.zcconn.Connected = False then ConneDMs.zcconn.Connected := True;
    if QureyDMs.zrq_Admin.Active = False then QureyDMs.zrq_Admin.Active := True;

    if QureyDMs.zrq_Admin.Active = True then begin
    QureyDMs.zrq_Admin.SQL.Clear;
    QureyDMs.zrq_Admin.SQL.Add('Select * from ADMINISTRATOR where UID=''+edit_LoginID.Text+'' and PASSWD=''edit_LoginPW.Text''');
    QureyDMs.zrq_Admin.Open;

    if QureyDMs.zrq_Admin.IsEmpty then begin
    MessageDlg('아이디 혹은 비밀번호를 잘못입력하였습니다.',mtError,[mbOK],0);
    //ModalResult := mrCancel; <-- 이 부분을 주석 처리 하세요.
    edit_LoginID.Clear;
    edit_LoginPW.Clear;
    edit_LoginID.SetFocus;
    exit;
    end else
    ShowMessage('login성공');
    ModalResult := mrOk;
    exit;
    end;
    end;
    end;


    그리고



    begin

    Application.Initialize;
    // 로그인용 폼을 생성한다.
    with Tform_Login.Create(Application) do begin
    if ShowModal = mrOK then begin
    // 인자 값을 받는다.
    strID := edit_LoginID.Text;
    strPW := edit_LoginPW.Text;

    // 메인폼을 생성한다.
    Application.CreateForm(Tform_Main, form_Main);
    Application.CreateForm(Tform_ProfInfo, form_ProfInfo);
    Application.CreateForm(Tform_ExitMbox, form_ExitMbox);
    Application.CreateForm(Tform_StudInfo, form_StudInfo);
    Application.CreateForm(TOpenDMs, OpenDMs);
    Application.CreateForm(Tab_About, ab_About);
    Application.CreateForm(Tform_ClassLess, form_ClassLess);
    Application.CreateForm(Tform_ClassAttend, form_ClassAttend);
    Application.CreateForm(TQureyDMs, QureyDMs);
    Hide;
    Free;
    Application.Run;
    end;{ else if ModalResult = mrCancel then begin <-- 이줄부터..
    Tform_Login.Create(Application);
    end;} <-- 여기까지는 필요 없는 부분..
    end


    또, 로그인 폼에 Cancel 버튼을 하나 올리셔서 그 버튼의 ModalResult 를 mrCancel 로 주시면, 로그인 자체를 취소 할 수 도 있습니다.
  • Profile
    이정욱 2008.06.02 22:09
    헛... 최용일님께서 동일한 답변을 같은시간에 ㅋ ㅎㅎ 그래도 지우지 않으렵니다 ㅋㅋ
  • Profile
    화이팅 2008.06.03 04:15
    감사합니다~
    이해하기 쉽게.. ^^
    많은 도움 되었습니다
    • 김상진
    • 2008.06.04 21:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.06.04 22:59
      MySQL_Front 의 버전이 설치하신 MySQL 서버와 호환이 안되는 경우 같습니다.
    • 석주현
      2008.06.04 23:33
      위의 문제점을 해결하기 위해서는 <!--CodeS--> 1. 모든 Client 프로그램을 4.1이상으로 업그...
    • 이정욱
      2008.06.04 21:19
      코드싸인은 델파이나, C++ 이나 VB나... 기타 등등의 EXE나 DLL을 뱉어내는 개발툴에서 모두 같습니다. ...
    • 이정욱
      2008.06.04 10:02
      흠.. 저는 되었던 것 같습니다. 저도 ExpressBarSuite를 사용했는데, 저번에 진행했던 프로젝트가 MDI...
    • 루단스
      2008.06.04 18:03
      ㅎㅎ 감사합니다. 되는군요. 역시 제가 잘 못 사용했네요. 웰케 바보스러운쥐...ㅜ.ㅜ DockSite의 Au...
    • 이정욱
      2008.06.04 23:03
      델파이 2007 기준입니다. Component 메뉴에서, Import Library -> Import ActiveX Control -> 그리고....
    • 홍성락
    • 2008.06.04 02:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.06.04 23:04
      헉.. 답변 하셨었네요 ㅋ 가능하면 코멘트로 달아주세요 ^^; 발급되는 포인트는 같습니다 ^^
    • 홍성락
      2008.06.05 00:17
      예 알겠습니다. 코멘트가 보는거나 검색에 용이하지요. 첨부자료가 없으면 애용하겠습니다. *잠깐 붙임...
    • 석주현
      2008.06.04 00:21
      <!--CodeS--> cbbTest.Items.NameValueSeparator := ':'; cbbTest.Items.Values['00'] := '...
    • 공성환
      2008.06.04 02:53
      cbbTest.Items.NameValueSeparator 요넘이 델버젼 몇부터인가요? 작년까지 델3 올해 델4쓰고있어여 ㅠ...
    • 석주현
      2008.06.04 10:18
      아 그러시군요. 음 전 요즘 7.0을 쓰고 있습니다. 몇년 전까지 5.0을 썼었고요.. 아 하위 버젼에 ...
    • 공성환
      2008.06.04 19:42
      델4는 다덜 별루라고 하고... 델5는 쓸만하다고 하는데... 도대체 난 언제쯤 상위버젼 써불수 있을까... ...
    • phono
      2008.06.04 20:18
      또 다른 방법은 조금 고통스런 노가다 필요하지만.. for i:=0 to ComboBox1.ComboBox1.items.Cou...
    • 이정욱
      2008.06.02 22:14
      공장 자동화 쪽으로는 거의 델파이가 독보적(?) 이라고 할 수 있을 정도로 점유율이 높습니다. 제 생...
    • 이성훈
      2008.06.02 22:32
      음...일단 회사에서 쓰는 주력언어을 먼저 배우시는게 좋지 않을까요? 어차피 회사에서도 재활용이 용...
    • phono
      2008.06.04 01:59
      공장자동화 FA 라면 당근 델파이 강추 합니다. 델파이는 초기 버전때 부터 한솔제지등 굵직굵직한 프로...
    • 공호준
      2008.06.04 18:23
      동감합니다. 속도면에 VB보다 좋더군요(아주). http://fadelphikorea.com/ 사이트을 활용하시면 될것 같...
    • 화이팅
    • 2008.06.02 19:40
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.06.02 22:05
      ModalResult에 값이 설정되면 모달창은 닫히게 됩니다. 이게 모달의 특성이죠... bbt_Login버튼에 Modal...
    • 이정욱
      2008.06.02 22:08
      몇가지 방법이 있습니다. 일단 암호가 틀렸을 경우 로그인 폼의 ModalResult 를 안주면 괜찬습니다. ...
    • 이정욱
      2008.06.02 22:09
      헛... 최용일님께서 동일한 답변을 같은시간에 ㅋ ㅎㅎ 그래도 지우지 않으렵니다 ㅋㅋ
    • 화이팅
      2008.06.03 04:15
      감사합니다~ 이해하기 쉽게.. ^^ 많은 도움 되었습니다
    • 공성환
      2008.06.02 18:20
      SELECT* FROM PROF_LEVEL ORDER BY LEVNAME 요기에서 SELECT* 요넘이 붙어있는것 같은데요... 이거 아...
    • 화이팅
      2008.06.02 19:51
      SELECT * 을 띄웠는데도 문제가 생기네요.. SQL 쿼리에 값이 없다고 합니다.. 첨부파일 올릴테니 아시...
    • 공성환
      2008.06.02 20:22
      db커넥션 하는곳에서 잘못된거 아닌가요? 디자인모드에서 쿼리콤포넌트에 위에 쿼리 넣어주시고 active ...
    • 화이팅
      2008.06.02 20:40
      아... 고쳐졌습니다~ 순서가 바뀌니 에러나 뜨네요.. ZZOM2님 너무 감사합니다^^
    • 권용민
    • 2008.06.01 21:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.06.02 16:21
      음 마우스로 그린다는 게 특정 Satate 에서 마우스 왼쪽 버튼 클릭 메시지 처리와 마우스 무브 메시지 처...
    • 신철우
    • 2008.06.01 01:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.06.01 06:33
      초기화를 해서 할수도 있지만 이런 방법도 있습니다. type DirectoryType = (_WINDOWS, _TEMP, _...
    • 박세철
    • 2008.05.31 19:24
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 신민철
    • 2008.05.31 10:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 공성환
      2008.05.31 18:46
      쿼리를 작성시 ORDER BY 해서 추출해서 추가시키면 되는거 아닌가요? 쿼리가 여러개라면 우선 추출된...
    • 구창민
      2008.05.30 21:30
      안녕하세요.. DB에서 값을 가져올때 총건수를 확인해 보세요... 그후, 그리드의 RowCount 를 총건수에 ...
    • 홍성락
      2008.05.30 21:59
      위의 소스를 보면 데이타배열(lv_ID,lv_NM)은 i가 0에서 시작되고 Cells은 i는 1에서 시작되네요. for문...
    • 천천히
    • 2008.05.30 22:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 화이팅
    • 2008.05.30 03:51
    • 5 COMMENTS
    • /
    • 0 LIKES
    • dbwrite
      2008.05.30 05:28
      combobox item인가 거기에다 값넣으시고(문자) list 콤포넌트 써서 (코드) 입력후 combo선택시 index가져...
    • 이정욱
      2008.05.30 08:08
      items.values 에 넣지 마시고... items.clear; 하신후, items.add 하세요. 또는 그냥 items.text 에다...
    • 공성환
      2008.05.30 19:34
      아래코드 참조하시면 도움될까요? <!--CodeS--> unit Unit1; interface uses Windows, ...
    • 공성환
      2008.05.30 19:38
      콤보박스가 디비룩업콤보처럼 코드,명을 같이 쓸수가 없을거예요... 저도 콤보3처럼 사용많이 했어여.....
    • 화이팅
      2008.05.31 03:00
      아.. 다들 정말 감사합니다. 이제 조금씩 이해 되는거 같아요... 정말 답답했는데.. 너무 감사합니다^^
    • 양선호
    • 2008.05.30 02:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.05.30 20:43
      New -> Packages 로 패키지를 하나 만듭니다. 그리고 그 패키지 파일에 컴포넌트 파일을 추가 합니다....
    • 이정욱
      2008.05.30 23:15
      컴파일 속도는.. 빠를텐데요.. 2006 이라고 해서 컴파일속도가 느려지진 않았습니다. 컴파일 옵션중에...
    • 이은주
      2008.09.01 18:35
      저도 2007 을 사용하고 있는데 에전에 7 쓸때와 비교하면 거의 5 배 이상 늦군요. warning 을 제거하면 ...
    • 홍성락
      2008.05.30 02:30
      모두 지우는건 Image2.Canvas.FillRect(Image2.Canvas.ClipRect); 이렇게 하시되 Image2.Canvas.Brush의 ...
    • 임정미
      2008.05.31 10:01
      감사합니다. image1,image2의 Stretch 속성을 모두 false로 바꾸고 했더니 말씀대로 좌표는 같게 나...
    • 홍성락
      2008.06.01 06:50
      아~예. 해결되었다니 다행입니다, 마지막 말한게 혼돈되시나보네요. 뭐든 방법은 여러가지로 해결할 수 ...