Подскажите как правильно зделать выборку из базы,
в код который приважу я переделал из какого то примера на который нашел на сайт нокии, немного переделал под свою задачу, но код не работатет
Мне нужно получить только первые значение из всей выборки?
_LIT(KSelect, "SELECT ");
_LIT(KFrom, " FROM ");
_LIT(KWhere, " WHERE ");
_LIT(KLike, " LIKE '");
_LIT(KOrderBy, "' ORDER BY ");
_LIT(KDot, ", ");
_LIT(KRavno, "=");
RDbStoreDatabase Db;
....
инициализация БД, открытие файлика
....
RDbView Set;
TBuf<128> query,val;
query.Copy(_L("select * from mytable where mycol=3"));
// выполнение запроса
User::LeaveIfError(Set->Prepare(Db,TDbQuery(query,EDbCompareNormal)));
User::LeaveIfError(Set->EvaluateAll());
// получение в val первое значение нужного столбца
Set.FirstL();
if( Set.AtRow() ) // проверка на наличие
{
Set.GetL();
val.Copy(Set.ColDes(2));
}
JTO>Подскажите как правильно зделать выборку из базы, JTO>в код который приважу я переделал из какого то примера на который нашел на сайт нокии, немного переделал под свою задачу, но код не работатет
JTO>Мне нужно получить только первые значение из всей выборки?
JTO>CDesCArrayFlat* CBookDb::GetNameByPhone(const TDesC& Phone) JTO> {
JTO> TPtrC number; JTO> TBuf<KDescriptionMaxLength> description; JTO> TBuf<KBookItemMaxLength> rowText;
JTO> _LIT(KSelect, "SELECT "); JTO> _LIT(KFrom, " FROM "); JTO> _LIT(KWhere, " WHERE "); JTO> _LIT(KLike, " LIKE '"); JTO> _LIT(KOrderBy, "' ORDER BY "); JTO> _LIT(KDot, ", "); JTO> _LIT(KRavno, "=");
JTO> TBuf<KCustomSqlMaxLength> sqlStr; JTO> sqlStr.Append(KSelect); JTO> sqlStr.Append(KFam); JTO> sqlStr.Append(KFrom); JTO> sqlStr.Append(KTelZhTable); JTO> sqlStr.Append(KWhere); JTO> sqlStr.Append(KNomer); JTO> sqlStr.Append(KRavno); JTO> sqlStr.Append(Phone);
JTO> CDesCArrayFlat* resultArray = JTO> new (ELeave)CDesC16ArrayFlat(KArrayGranularity); JTO> CleanupStack::PushL(resultArray);
JTO> // Create a view on the database JTO> RDbView view; JTO> User::LeaveIfError( JTO> view.Prepare(iBookDb, TDbQuery(sqlStr), view.EReadOnly));
JTO> User::LeaveIfError(view.EvaluateAll());
JTO> CDbColSet* colSet = view.ColSetL(); JTO> CleanupStack::PushL(colSet);
JTO> // Append each result row to array JTO> for (view.FirstL(); view.AtRow(); view.NextL()) JTO> {
JTO> rowText.Zero();
JTO> view.GetL();
JTO> number.Set(view.ColDes(colSet->ColNo(KFam)));
Выборка работает очень странно, когда я просто выбираю без WHERE, например select pole from table выбираються все записи, но когда я ввожу с where ниче не выбирается
например:
select pole from table where pole1 like '%111%'
У меня есть версия что проблема в кодировке, потому что после загрузки данных из файла, я преобразовую перед сохранением в бд
вот таким способом, а преоброзовую из-за русских букв в кодировке виндозера
Выборку сделал, с помощью where нужно было просто добивать в конец условие возврат каретки и абзац (\r\n), ну это ошибка сбору бд, но это я выбирал по цифрам, а теперь мне нужно выбирать по русским словам, которые заданные не точно, например первые 5 букв и т.д., т.е. оператор лайк это то что надо
select nomer from table where fam like '%Петров%\r\n'
Где Петров, я задаю в квери диалоге и оно автоматом конвертит в утф-16, когда я собирал базу я у меня были данные тоже на русском языке в формате виндозира вин1251, я и конвертил тоже в утф-16, в предыдущем посту писал как.
Подскажите что не так я делаю, где может быть ошибка?