로그인 확인할때 에러가 나는데요 도무지 왜그러는지를 모르겠습니다.
에러메세지는요....
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.
저 에러 메시지는 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속성으로 판단하는것이 더 프로그램 다울것 같네요..
물론 그룹함수쓸때는 조심해야하구여..