Как получить выборку из БД в симбиане?
От: JTOne  
Дата: 09.11.07 10:59
Оценка:
Подскажите как правильно зделать выборку из базы,
в код который приважу я переделал из какого то примера на который нашел на сайт нокии, немного переделал под свою задачу, но код не работатет

Мне нужно получить только первые значение из всей выборки?

CDesCArrayFlat* CBookDb::GetNameByPhone(const TDesC& Phone)
{

TPtrC number;
TBuf<KDescriptionMaxLength> description;
TBuf<KBookItemMaxLength> rowText;

_LIT(KSelect, "SELECT ");
_LIT(KFrom, " FROM ");
_LIT(KWhere, " WHERE ");
_LIT(KLike, " LIKE '");
_LIT(KOrderBy, "' ORDER BY ");
_LIT(KDot, ", ");
_LIT(KRavno, "=");

TBuf<KCustomSqlMaxLength> sqlStr;
sqlStr.Append(KSelect);
sqlStr.Append(KFam);
sqlStr.Append(KFrom);
sqlStr.Append(KTelZhTable);
sqlStr.Append(KWhere);
sqlStr.Append(KNomer);
sqlStr.Append(KRavno);
sqlStr.Append(Phone);



CDesCArrayFlat* resultArray =
new (ELeave)CDesC16ArrayFlat(KArrayGranularity);
CleanupStack::PushL(resultArray);

// Create a view on the database
RDbView view;
User::LeaveIfError(
view.Prepare(iBookDb, TDbQuery(sqlStr), view.EReadOnly));

User::LeaveIfError(view.EvaluateAll());

CDbColSet* colSet = view.ColSetL();
CleanupStack::PushL(colSet);

// Append each result row to array
for (view.FirstL(); view.AtRow(); view.NextL())
{

rowText.Zero();

view.GetL();

number.Set(view.ColDes(colSet->ColNo(KFam)));


rowText.Append(number);


resultArray->AppendL(rowText);
}
CleanupStack::PopAndDestroy(colSet);
view.Close();
CleanupStack::Pop(resultArray);

return resultArray;

}

Re: Как получить выборку из БД в симбиане?
От: JTOne  
Дата: 09.11.07 20:24
Оценка:
База данных dbms, если я не ошибся в абривиатуре
в базе есть табличка
Fam Nomer
Петров 11111
.................
и т.д.

и пытаюсь сделать вот такой запрос
SELECT Fam From MyTable Where Nomer='1111111'
Re: Как получить выборку из БД в симбиане?
От: visius  
Дата: 09.11.07 23:34
Оценка:
Здравствуйте, JTOne, Вы писали:

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)));



JTO> rowText.Append(number);



JTO> resultArray->AppendL(rowText);

JTO> }
JTO> CleanupStack::PopAndDestroy(colSet);
JTO> view.Close();
JTO> CleanupStack::Pop(resultArray);

JTO> return resultArray;


JTO> }


JTO>

JTO>
Re[2]: Как получить выборку из БД в симбиане?
От: JTOne  
Дата: 11.11.07 13:13
Оценка:
Выборка работает очень странно, когда я просто выбираю без WHERE, например select pole from table выбираються все записи, но когда я ввожу с where ниче не выбирается
например:
select pole from table where pole1 like '%111%'

У меня есть версия что проблема в кодировке, потому что после загрузки данных из файла, я преобразовую перед сохранением в бд
вот таким способом, а преоброзовую из-за русских букв в кодировке виндозера

HBufC16* ttt4;
ttt4=CnvUtfConverter::ConvertToUnicodeFromUtf8L(*buffer4);

............

iBookDb->AddAbonentWithSql(*ttt1,*ttt2,*ttt3,*ttt4);



и

сохраняю вот так


TInt CBookDb::AddAbonentWithSql(const TDesC& aNomer,
                         const TDesC& aFam,
                         const TDesC& aUl, const TDesC& aDom)
    {
    TBuf<200> strSQL;

    _LIT(KInsertInto, "INSERT INTO tel_zh_db (Fam, Nomer, Ul, Dom) VALUES ('");
    _LIT(KSeporator,"','");
    _LIT(KEnd,"')");
    strSQL.Append(KInsertInto);
    strSQL.Append(aFam);
    strSQL.Append(KSeporator);
    strSQL.Append(aNomer);
    strSQL.Append(KSeporator);
    strSQL.Append(aUl);
    strSQL.Append(KSeporator);
    strSQL.Append(aDom);
    strSQL.Append(KEnd);
    
    return iBookDb.Execute(strSQL);
    
    }



Но я пытаюсь выбрать и отсортировать по цифрам, и тут у меня берут сомнения по поводу кодировки

А выборку делаю, вы видели как, в моем первом посту

Чего where не работает?
Re[3]: Как получить выборку из БД в симбиане?
От: JTOne  
Дата: 12.11.07 07:41
Оценка:
Выборку сделал, с помощью where нужно было просто добивать в конец условие возврат каретки и абзац (\r\n), ну это ошибка сбору бд, но это я выбирал по цифрам, а теперь мне нужно выбирать по русским словам, которые заданные не точно, например первые 5 букв и т.д., т.е. оператор лайк это то что надо

select nomer from table where fam like '%Петров%\r\n'

Где Петров, я задаю в квери диалоге и оно автоматом конвертит в утф-16, когда я собирал базу я у меня были данные тоже на русском языке в формате виндозира вин1251, я и конвертил тоже в утф-16, в предыдущем посту писал как.

Подскажите что не так я делаю, где может быть ошибка?
Re[4]: Как получить выборку из БД в симбиане?
От: JTOne  
Дата: 12.11.07 07:43
Оценка:
Забыл добавить, выборка с помощью лайк цифр тоже не получалась.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.