FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[82] Re:[질문] ADO 컴포넌트...IB컴포넌트...
박지훈.임프 [cbuilder] 2563 읽음    2001-08-11 12:38
임프랍니다.

여기까지 작업하셨죠?
DataModule1->IDBQuery1->SQL->Add("Select ID FROM User_T WHERE ID = '" + EditID->Text + "'");
DataModule1->IDBQuery1->Open();

먼저, 한가지를 생각해봅시다. ID로 쿼리를 할 것이므로, ID가 존재한다면 쿼리 결과에는 당연 그 ID를
가진 레코드만 나옵니다. 그럼 ID는 쿼리할 필요가 없지요. 정작 필요한 것은 ID가 아니라 패스워드입니다.
디비에 저장된 패스워드를 입력한 패스워드와 비교하기만 하면 되지요.
그래서.. 위의 첫번째 라인은 다음과 같이 수정해야 하겠지요.
DataModule1->IDBQuery1->SQL->Add("Select PASS FROM User_T WHERE ID = '" + EditID->Text + "'");
(패스워드 필드가 PASS 라고 가정.)

그런데, 쿼리 컴퍼넌트에 이전에 작업한 SQL 문이 남아있을지도 모르니 항상 SQL문을 Add() 할 때는
Clear()해주는 습관을 들이는 것이 좋습니다. 아니면 아예 다음과 같이 하시든지요.
DataModule1->IDBQuery1->SQL->Text = "Select PASS FROM User_T WHERE ID = '" + EditID->Text + "'";

그 다음엔, 먼저, 사용자가 입력한 아이디가 존재하지 않을 수도 있으니까 먼저 다음과 같이 코딩합시다.
if(DataModule1->IDBQuery1->RecordCount==0)
{
    ShowMessage("존재하지 않는 아이디입니다. 가입하시용!");
    DataModule1->IDBQuery1->Close();
    return;
}

그럼 그 다음은, 아이디가 존재하는 경우겠지요? 그럼 오픈된 쿼리의 레코드로부터 아이디와 패스를 들고와야
하는데, 필드 값을 읽어와야 겠지요? 두가지 선택가능한 방법이 있습니다.
AnsiString UserPass = DataModule1->IDBQuery1->FieldByName("Pass")->AsString;
이렇게 FieldByName() 메소드를 쓸 수도 있고, 두번째 방법은,

AnsiString UserPass = DataModule1->IDBQuery1->Fields->Fields[0]->AsString;
이렇게 Fields 프로퍼티의 인덱스를 이용할 수도 있습니다.

제 개인적으로는, 위에서 쓰신 것과 같이 SQL에서 * 를 쓰지 않고 필요한 필드 이름을 명시한 경우에는
두번째 방법을 더 선호합니다. 별로 큰 차이는 아닙니다만, 첫번째 방법은 FieldByName() 메소드가
해당 필드를 검색하는 시간이 쬐끔! 더 들어갑니다. 그래도 호환성이나 융통성은 첫째 방법이 더 좋지요.

그 다음에는, 필요한 값을 디비에서 다 읽어왔고 디비는 계속 열어둘 필요가 없으니 닫아버립시다.
디비는 다 쓰고 나면 빨랑빨랑 닫아주는 게 좋습니다.
DataModule1->IDBQuery1->Close();

그럼, 이제 입력받은 아이디/패스와, 디비에 있던 아이디/패스를 다 구했으니, 비교하는 일만 남았지요?
if(EditPwd->Text == UserPass)
{
    ShowMessage("로그인 성공. 어서오슈!");
    // 그다음은 알아서...
}
else
{
    ShowMessage("패스워드가 일치하지 않습니다. 이따구로 하실려우??");
    // 역시 알아서...
}

에.. 이 정도면 되겠네요.

그럼 이만...

령아~!♡ 님이 쓰신 글 :
:  안녕하세요...
:
:  지금 인터베이스를 써서 로긴하는 프로그램은 작성해볼려구 하는데요...
:
:  디비 값을 가져 오고싶어서요...
:
:  제가 바로 배운적이 없어. 이런식으로 밖엔 질문이 안되는 군요...
:
:  일단 조금 짜놓은 소스로는 다음과 같구요...
:
:  DataModule1->IBDBQuery1->Close();
:  DataModule1->IBDBQuery1->SQL->Clear();
:  if(EditID->Text!="" || EditPwd->Text!="")
:   {
:     DataModule1->IDBQuery1->SQL->Add("Select ID FROM User_T WHERE ID = '" + EditID->Text + "'");
:     DataModule1->IDBQuery1->Open();
: // ???
:      ShowMessage("Got It!" + src + " OK?");
:   }
:  else
:   ShowMessage(" ID & PASS 를 입력해주십시요.");
:
: 보셧듯이 모듈내의 쿼리 컴포넌트를 실행시켰는데요...
:
: open 뒤에 그 값을 얻어서 if 문으로 비교해서 ShowMessage를 보이고 싶은데요...
:
: 게시판에서 본내용중에선 ADOQuery 나 ADODataset 등...
:
: 잘 이해가 안 되서요...
:
: 바른 가르침 부탁 드립니다.

+ -

관련 글 리스트
83 [질문] ADO 컴포넌트...IB컴포넌트... 령아~!♡ 2110 2001/08/11
82     Re:[질문] ADO 컴포넌트...IB컴포넌트... 박지훈.임프 2563 2001/08/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.