Помогите с выборкой CRecordSet::Open, Visual C++, MFC
От: my.name  
Дата: 16.02.06 14:40
Оценка:
Нужно выбрать из базы данных поля по шаблону (маске), база данных локальная


// вот так находит запись
CDaoRecordset rs(&db);
rs.Open( AFX_DAO_USE_DEFAULT_TYPE, "SELECT * FROM WareNameList WHERE WareName LIKE 'TV Toshiba 42 WP26'");

// а вот так НЕТ
CDaoRecordset rs(&db);
rs.Open( AFX_DAO_USE_DEFAULT_TYPE, "SELECT * FROM WareNameList WHERE WareName LIKE 'TV Toshiba 42 WP2%'");

// а вот так НЕТ
CDaoRecordset rs(&db);
rs.Open( AFX_DAO_USE_DEFAULT_TYPE, "SELECT * FROM WareNameList WHERE WareName LIKE 'TV Toshiba 42 WP2_'");

В чем может быть ошибка ???



На всякий случай привожу листинг




m_listing.ResetContent(); // CListBox
CString strFormat;
CDaoDatabase db;
try {
db.Open(__NAME_FILE_BASEDATA); // имя базы данных
} catch(...) {
strFormat.Format("Ошибка открытия базы данных \"%s\".", __NAME_FILE_BASEDATA);
_ErrorBox(strFormat);
return FALSE;
}

CDaoTableDef cTable(&db);
try {
cTable.Open(__NAME_TABLE_NAMESLIST); //попытка открытия таблицы
} catch(...) {
db.Close();
strFormat.Format("Ошибка открытия таблицы \"%s\" в базе данных \"%s\".", __NAME_TABLE_NAMESLIST, __NAME_FILE_BASEDATA);
_ErrorBox(strFormat);
return FALSE;
}

CDaoRecordset rs(&db);
try {
strFormat = "SELECT * FROM WareNameList WHERE WareName LIKE 'TV Toshiba 42 WP26'"; // одну запись находит
rs.Open( AFX_DAO_USE_DEFAULT_TYPE, strFormat);
} catch(...) {
db.Close();
strFormat.Format("Ошибка выборки записей в таблице \"%s\" в базе данных \"%s\".", __NAME_TABLE_NAMESLIST, __NAME_FILE_BASEDATA);
_ErrorBox(strFormat);
return FALSE;
}

try {
rs.MoveFirst();
} catch (...) {
db.Close();
strFormat.Format("Пустая таблица \"%s\" в базе данных \"%s\".", __NAME_TABLE_NAMESLIST, __NAME_FILE_BASEDATA);
_ErrorBox(strFormat);
return FALSE;
}

// здесь заполнение CListBox
BYTE bIsExit = FALSE;
do {
try {
if (rs.IsEOF()) bIsExit = TRUE;
else {
COleVariant CValue;
rs.GetFieldValue("WareName", CValue);
m_listing.AddString((LPCSTR)CValue.pbVal);
rs.MoveNext();
}
} catch(...) {
strFormat.Format("Ошибка преобразования типов в таблице \"%s\" в базе данных \"%s\".", __NAME_TABLE_NAMESLIST, __NAME_FILE_BASEDATA);
_ErrorBox(strFormat);
bIsExit = TRUE;
}
} while (!bIsExit);

db.Close();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.