자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi DBExpress의 버그 문제
2012.08.09 20:40
환경: C++ Builder 2009
DB Component: DBExpress
DB : MySQL 5.0
아래 코드에서
TSQLQuery->RecordCount; 에서 뜬금없이 Exception이 발생합니다.
결과Set로 예상 결과 Set과 틀립니다.
가끔 DBExpress에서 이런 에러를 내는데,
심중은 DBExpress의 내부 버그가 아닌가 싶습니다.
DBExpress + MySQL 조합에서 알려진 버그나 문제점들이 있는 지 알려주시면 감사하겠습니다.
그리고,
가능하다면 DBExpress의 버젼업이나 Buf Fix 버젼등에 대한 정보를 주시면 감사하겠습니다.
그리고, 가능하다면 이런 버그에 대한 문제점 해결에 알려진 상황이 있다면 그런 상황도 알려 주시면
감사하겠습니다.
감사합니다.
UnicodeString sSQL;
// sSQL = " SELECT a.ExamDate, a.Class, a.License, a.ExamType, a.AppNo, a.Name, "
// " b.TestNo, b.Score, b.ExamResult, b.WrongFlag, b.StartTime, "
// " b.FinishTime, b.BeforeStart, b.DrivePosture, b.Start, "
// " b.SpeedSustain, b.Brake, b.Steering, b.CarBody, b.Navigate, "
// " b.ChangeDir, b.PassCross, b.Parking, b.Etc, b.FailCode "
// " FROM Exam a LEFT OUTER JOIN ExamDetail b "
// " ON ( a.ExamDate = b.ExamDate AND "
// " a.Class = b.Class AND "
// " a.License = b.License AND "
// " a.ExamType = b.ExamType AND "
// " a.AppNo = b.AppNo ) "
// " WHERE a.ExamDate = '" + sExamDate + "' " +
sSQL = " SELECT Exam.ExamDate, Exam.Class, Exam.License, Exam.ExamType, Exam.AppNo, Exam.Name, " \
" Exam.Score AS ExamScoreM, Exam.ExamResult AS ExamResultM, " \
" ExamDetail.TestNo, ExamDetail.Score, ExamDetail.ExamResult, ExamDetail.WrongFlag, ExamDetail.StartTime, " \
" ExamDetail.FinishTime, ExamDetail.BeforeStart, ExamDetail.DrivePosture, ExamDetail.Start, " \
" ExamDetail.SpeedSustain, ExamDetail.Brake, ExamDetail.Steering, ExamDetail.CarBody, ExamDetail.Navigate, " \
" ExamDetail.ChangeDir, ExamDetail.PassCross, ExamDetail.Parking, ExamDetail.Etc, ExamDetail.FailCode " \
" FROM Exam LEFT OUTER JOIN ExamDetail ON " \
" ( Exam.ExamDate = ExamDetail.ExamDate AND " \
" Exam.Class = ExamDetail.Class AND " \
" Exam.License = ExamDetail.License AND " \
" Exam.ExamType = ExamDetail.ExamType AND " \
" Exam.AppNo = ExamDetail.AppNo ) " \
" WHERE Exam.ExamDate = '" + sExamDate + "' ";
sSQL +=" ORDER BY Exam.Class, Exam.License, Exam.ExamType, Exam.AppNo ";
TExam Exam(EN_EXAM_MODE::EXAM_MODE);
TExamDetail ExamDetail(EN_EXAM_MODE::EXAM_MODE);
TSQLQuery *pQuery = DM->GetResultSet(sSQL);
if ( pQuery == NULL ) return;
int iRowCount = pQuery->RecordCount; // Error 발생.
AdvExamStatus->RowCount = (iRowCount < 2) ? 2 : iRowCount+1;
int iRow = 1;
try {
while ( !pQuery->Eof ) {
Exam.ExamDate = pQuery->FieldByName("ExamDate")->AsString;
Exam.Class = pQuery->FieldByName("Class")->AsInteger;
Exam.License = pQuery->FieldByName("License")->AsString;
Exam.ExamType = pQuery->FieldByName("ExamType")->AsString;
Exam.AppNo = pQuery->FieldByName("AppNo")->AsInteger;
...
...
AdvExamStatus->Cells[ 0][iRow] = IntToStr(Exam.Class);
AdvExamStatus->Cells[ 1][iRow] = LICENSE2STR(Exam.License);
AdvExamStatus->Cells[ 2][iRow] = IntToStr(Exam.AppNo);
AdvExamStatus->Cells[ 3][iRow] = Exam.Name;
AdvExamStatus->Cells[ 4][iRow] = IntToStr(ExamDetail.Score);
iRow++;
pQuery->Next();
}
} catch ( Exception &e ) {
#ifdef _DEBUG
ShowMessage(e.Message);
#endif
}
DM->Release(pQuery);
Delphi DBExpress의 버그 문제
2012.08.09 20:40
환경: C++ Builder 2009
DB Component: DBExpress
DB : MySQL 5.0
아래 코드에서
TSQLQuery->RecordCount; 에서 뜬금없이 Exception이 발생합니다.
결과Set로 예상 결과 Set과 틀립니다.
가끔 DBExpress에서 이런 에러를 내는데,
심중은 DBExpress의 내부 버그가 아닌가 싶습니다.
DBExpress + MySQL 조합에서 알려진 버그나 문제점들이 있는 지 알려주시면 감사하겠습니다.
그리고,
가능하다면 DBExpress의 버젼업이나 Buf Fix 버젼등에 대한 정보를 주시면 감사하겠습니다.
그리고, 가능하다면 이런 버그에 대한 문제점 해결에 알려진 상황이 있다면 그런 상황도 알려 주시면
감사하겠습니다.
감사합니다.
UnicodeString sSQL;
// sSQL = " SELECT a.ExamDate, a.Class, a.License, a.ExamType, a.AppNo, a.Name, "
// " b.TestNo, b.Score, b.ExamResult, b.WrongFlag, b.StartTime, "
// " b.FinishTime, b.BeforeStart, b.DrivePosture, b.Start, "
// " b.SpeedSustain, b.Brake, b.Steering, b.CarBody, b.Navigate, "
// " b.ChangeDir, b.PassCross, b.Parking, b.Etc, b.FailCode "
// " FROM Exam a LEFT OUTER JOIN ExamDetail b "
// " ON ( a.ExamDate = b.ExamDate AND "
// " a.Class = b.Class AND "
// " a.License = b.License AND "
// " a.ExamType = b.ExamType AND "
// " a.AppNo = b.AppNo ) "
// " WHERE a.ExamDate = '" + sExamDate + "' " +
sSQL = " SELECT Exam.ExamDate, Exam.Class, Exam.License, Exam.ExamType, Exam.AppNo, Exam.Name, " \
" Exam.Score AS ExamScoreM, Exam.ExamResult AS ExamResultM, " \
" ExamDetail.TestNo, ExamDetail.Score, ExamDetail.ExamResult, ExamDetail.WrongFlag, ExamDetail.StartTime, " \
" ExamDetail.FinishTime, ExamDetail.BeforeStart, ExamDetail.DrivePosture, ExamDetail.Start, " \
" ExamDetail.SpeedSustain, ExamDetail.Brake, ExamDetail.Steering, ExamDetail.CarBody, ExamDetail.Navigate, " \
" ExamDetail.ChangeDir, ExamDetail.PassCross, ExamDetail.Parking, ExamDetail.Etc, ExamDetail.FailCode " \
" FROM Exam LEFT OUTER JOIN ExamDetail ON " \
" ( Exam.ExamDate = ExamDetail.ExamDate AND " \
" Exam.Class = ExamDetail.Class AND " \
" Exam.License = ExamDetail.License AND " \
" Exam.ExamType = ExamDetail.ExamType AND " \
" Exam.AppNo = ExamDetail.AppNo ) " \
" WHERE Exam.ExamDate = '" + sExamDate + "' ";
sSQL +=" ORDER BY Exam.Class, Exam.License, Exam.ExamType, Exam.AppNo ";
TExam Exam(EN_EXAM_MODE::EXAM_MODE);
TExamDetail ExamDetail(EN_EXAM_MODE::EXAM_MODE);
TSQLQuery *pQuery = DM->GetResultSet(sSQL);
if ( pQuery == NULL ) return;
int iRowCount = pQuery->RecordCount; // Error 발생.
AdvExamStatus->RowCount = (iRowCount < 2) ? 2 : iRowCount+1;
int iRow = 1;
try {
while ( !pQuery->Eof ) {
Exam.ExamDate = pQuery->FieldByName("ExamDate")->AsString;
Exam.Class = pQuery->FieldByName("Class")->AsInteger;
Exam.License = pQuery->FieldByName("License")->AsString;
Exam.ExamType = pQuery->FieldByName("ExamType")->AsString;
Exam.AppNo = pQuery->FieldByName("AppNo")->AsInteger;
...
...
AdvExamStatus->Cells[ 0][iRow] = IntToStr(Exam.Class);
AdvExamStatus->Cells[ 1][iRow] = LICENSE2STR(Exam.License);
AdvExamStatus->Cells[ 2][iRow] = IntToStr(Exam.AppNo);
AdvExamStatus->Cells[ 3][iRow] = Exam.Name;
AdvExamStatus->Cells[ 4][iRow] = IntToStr(ExamDetail.Score);
iRow++;
pQuery->Next();
}
} catch ( Exception &e ) {
#ifdef _DEBUG
ShowMessage(e.Message);
#endif
}
DM->Release(pQuery);
RECORDCOUNT 대신 if not PQuery->ISEmpty then 을 사용해 보세요 원래 델파이에서도 RecordCount 가 오류는 안나도 정확지 않은 경우가 있었습니다. 그리고 dbExpress와 MYSql 사용에서도 찿아 보니 dll 버전만 잘 맞으면 문제가 없는것 같아요.
http://tech.devgear.co.kr/1493
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=762 이 곳의 자료를 한번 보십시오.