Android: установить выбранный элемент Spinner из БД с помощью курсора - PullRequest
1 голос
/ 10 августа 2011

У меня проблема с курсорами. У меня есть 3 таблицы в моей БД: фактура (означает счет-фактура), транспортное средство (транспортное средство) и гараж.

Счет касается одного автомобиля и одного гаража. Когда я создаю счет, я выбираю транспортное средство и гараж из счетчиков.

Когда я хочу обновить счет, мне нужно установить элемент, выбранный в этих счетчиках.

Вот как я это делаю:

    for (int iVhc = 0; iVhc < spListeVhc.getCount(); iVhc++) {
        Cursor valueVhc = (Cursor) spListeVhc.getItemAtPosition(iVhc);
        long idVhc = facture.getLong(facture.getColumnIndexOrThrow("TB_VEHICULE._id"));
        long idSpVhc = valueVhc.getLong(valueVhc.getColumnIndex("TB_VEHICULE._id"));

        if (idSpVhc == idVhc) {
            spListeVhc.setSelection(iVhc);
        }
    }


    for (int iGar = 0; iGar < spListeGar.getCount(); iGar++) {
        Cursor valueGar = (Cursor) spListeGar.getItemAtPosition(iGar);
        long idGar = facture.getLong(facture.getColumnIndexOrThrow("TB_GARAGE._id"));
        long idSpGar = valueGar.getLong(valueGar.getColumnIndex("TB_GARAGE._id"));

        if (idSpGar == idGar) {
            spListeGar.setSelection(iGar);
        }
    }   

Это работает для гаража, но проблема в том, что по непонятной мне причине счетчик транспортных средств получает тот же идентификатор, что и гараж.

Это означает, что если выбранный гараж имеет идентификатор 2 в базе данных, то выбранным транспортным средством будет также транспортное средство с идентификатором 2.

??

Вот мой запрос на получение счета:

public Cursor recupFacture(long idFacture){
    return db.rawQuery("SELECT TB_FACTURE._id, libelle_fa,  date_fa, nom_vhc, kilometrage_fa, nom_garage, remarque_fa, date_paie_fa,  montant_fa, TB_VEHICULE._id, TB_GARAGE._id" +
                        " FROM TB_FACTURE, TB_VEHICULE, TB_GARAGE" +
                        " WHERE fk_vhc_fa = TB_VEHICULE._id" +
                        " AND fk_gar_fa = TB_GARAGE._id" +
                        " AND TB_FACTURE._id ="+idFacture, null);
}

И я понял, что у меня есть такие ошибки в моем журнале:

08-10 12:54:22.431: ERROR/Cursor(17072): requesting column name with table name -- TB_VEHICULE._id

И то же самое для гаража ...

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ:

Я нашел решение.

Я заменил TB_GARAGE._id и TB_VEHICULE._id на fk в строках:

long idVhc = facture.getLong(facture.getColumnIndexOrThrow("TB_VEHICULE._id"));
long idGar = facture.getLong(facture.getColumnIndexOrThrow("TB_GARAGE._id"));

Однако я не могу действительно объяснить, почему это работает так, но не с идентификатором. Префикс таблицы вызывает странную ошибку ...

1 Ответ

0 голосов
/ 10 августа 2011

Правильно ли вы сохраняете счет?Убедитесь, что вы случайно не сохраняете гаражный идентификатор как идентификатор автомобиля.

В противном случае, как определяется «перелом»?Возможно, там есть ошибка.

...