Q&A

  • 로그인확인이 잘 안됩니다..도와주세요~ -.-;;
로그인 확인할때 에러가 나는데요 도무지 왜그러는지를 모르겠습니다.
에러메세지는요....
EListError with message 'List index out of bounds(0)'    입니다.
머땜에 이런 에러가 나는지 모르겠습니다. 도와주세요~

로그인 확인하는 창에서의 코딩입니다.

   begin   // id, pwd 확인
      iCbxidx:=cbxType.ItemIndex;
      qryLog.Close;
      qryLog.SQL.Clear;
//////////////////////////////여기서부터 에러가 나는이유인것같습니다//
      qryLog.SQL.Add('SELECT * FROM USERS WHERE TYPE=":iCbxidx" AND USERID=":edtId"');
      qryLog.Params[0].DataType := ftString;
      qryLog.Params[0].Value:=cbxType.Text;
      qryLog.Params[1].DataType := ftString;
      qryLog.Params[1].Value:=edtId.Text;
      qryLog.Open;
      
      if qryLog.Eof then begin
         Application.MessageBox('존재하지않는 사용자입니다.','확인',MB_OK);
         ModalResult := mrNone;
      end
      else begin  // 비밀번호 확인
         sDbpwd := qryLog.FieldByName('passwd').value;
         if sDbpwd = edtPwd.text then begin
            qryLog.Close;
            ModalResult := mrOK;   // 로그인창 닫기
         end
         else begin
            qryLog.close;
            Application.MessageBox('비밀번호가 틀립니다.','확인',MB_OK);
            ModalResult := mrNone;
         end;
      end;  // 비밀번호 확인끝
   end;  // id,pwd 확인끝

프로젝트소스에서 로그인 확인후에 로그인창닫고 메인화면 여는부분입니다.
begin
  Application.Initialize;
   frmLogin := TfrmLogin.Create(nil);  // nil은 객체의 소유자가 없는것
    if frmLogin.showmodal = mrOK then // 로그인 되었으면
----->> 항상 이줄에 표시가 됩니다. 여기가 에러라인이라고 하는것같은데...
    begin
        frmLogin.Free;
        Application.CreateForm(TfrmMain, frmMain);
        Application.CreateForm(TfrmPrn, frmPrn);
        Application.CreateForm(TfrmSelect, frmSelect);
        Application.CreateForm(TfrmSubsel, frmSubsel);
        Application.CreateForm(TfrmSubfind, frmSubfind);
        Application.CreateForm(TfrmZip, frmZip);
        Application.Run;
    end
    else
        frmLogin.Free;

end.
5  COMMENTS
  • Profile
    이재식 2002.06.22 00:27
    안녕하세요.
    저 에러 메시지는 ListBox나 ComboBox에서 첨자 참조를 잘못해서
    나는 에러입니다.
    cbxType.ItemIndex값을 함 확인해 보시고
    그에따른 Text갑이 무엇인지도 함 확인해 보세요.
    가령, F7로 디버그 해보시거나 아님
    ShowMessage(IntToStr(cbxType.ItemIndex)) ;
    ShowMessage(cbxType.Text) ;
    이렇게 함 확인해 보시고 원하는 값인지 아닌지를...

          qryLog.Params[0].DataType := ftString;
          qryLog.Params[0].Value:=cbxType.Text;
          qryLog.Params[1].DataType := ftString;
          qryLog.Params[1].Value:=edtId.Text;
    그리고 위 문장들은 이렇게 첨자로 쓰시 마시구여,
    다음에 후 개발자가 왔을때 소스에 따라서 유지보수 및 가독성에 애를 먹습니다.
    qryLog.ParamByName('iCbxidx').asString := cbxType.Text ;
    qryLog.ParamByName('edtld').asString := edtld.Text ;
    이렇게 이름으로 하시는것이 더 좋지 않을까...

    그리고, 쿼리 던져서 데이터가 있는지 없는지는
    Eof보다는 isEmpty속성으로 판단하는것이 더 프로그램 다울것 같네요..
    물론 그룹함수쓸때는 조심해야하구여..



  • Profile
    변선희 2002.06.22 01:02
    감사합니다.
    아는게 없어서리 질문만 하게 되네요.. ㅋㅋ
    하나 해결하고나니 또 다른에러가 납니다요.

          iCbxidx:=cbxType.ItemIndex;
          sCbxidx := inttostr(iCbxidx);
          qryLog.Close;
          qryLog.SQL.Clear;
          qryLog.SQL.Add('SELECT * FROM USERS WHERE TYPE=":sIdx" AND USERID=":edtId"');
          qryLog.Parambyname('sIdx').asString:=sCbxidx;
          qryLog.Parambyname('edtId').asString:=edtId.Text;
          qryLog.Open;

    이렇게 했더니만

    qryLog : Parameter 'sIdx' not found

    라는데 왜그런지 몰겠습니다.
    다시한번 갈쳐주세요`~~

    그리구요...
    Label 크기말인데요..  항상 맨 끝 글자가 잘 안보이거든요.
    폼에서 항상 크게 늘려주는데 실행만 시키면 글자에 사이즈가 맞춰지는건지..
    글자가 잘 안보여서요...  어떻게하면 되나요?

    특정위치로 포커스를 옮겨줄라고 하는데 잘 안되네요... 어케해야하나요?
          edtId.Focused;
    이렇게 했었는데 안되더라구요.. .넘 기본적인걸 몰라서 부끄럽습니다요..
  • Profile
    KDDG_zzang 2002.06.22 01:26
    1. qryLog.SQL.Add('SELECT * FROM USERS WHERE TYPE=:sIdx AND USERID=:edtId');
    2. autosize 속성을 true
    3. edtId.SetFocus;

  • Profile
    변선희 2002.06.22 01:43
    올~
    로그인이 되다니... ㅋㅋ
    모두 감사합니다~
  • Profile
    전영민 2002.06.22 00:46

    이 말씀에 전적으로 동감...^^