カーソルに問題があります。 私は自分のDBに3つのテーブルを持っています:facture(請求書を意味します)、vehicule(車両)、garage。Android:CursorでDBからSpinnerの選択項目を設定する
請求書は、1台の車両と1台のガレージに関係します。私が請求書を作成するとき、スピナーから車とガレージを選択します。
請求書を更新する場合、これらのスピナーで選択したアイテムを設定する必要があります。ここで
は私が行う方法です。
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);
}
}
それはガレージのために動作しますが、問題は、私は理解していない理由のために、車のスピナーがガレージと同じIDを取る、ということです。
つまり、選択されたガレージがID2をDBに持つ場合、選択した車両はID2の車両になります。
??
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);
}
そして私は、私は私のログの間違いのTHI種類持っていることに気づいた:ここ
は、請求書を取得するために私のクエリです
...08-10 12:54:22.431: ERROR/Cursor(17072): requesting column name with table name -- TB_VEHICULE._id
、ガレージのために同じことを
ご協力いただきありがとうございます。
EDIT:
私は解決策を見つけました。
私はラインでのFKでTB_GARAGE._idとTB_VEHICULE._idを置き換え:
long idVhc = facture.getLong(facture.getColumnIndexOrThrow("TB_VEHICULE._id"));
long idGar = facture.getLong(facture.getColumnIndexOrThrow("TB_GARAGE._id"));
それはIDと次のように動作しますが、なぜないしかし、私は実際に説明することはできません。 テーブルのプレフィックスにより、間違ったミスが発生します。
このエラーは、私がTB.GARAGE/VEHICULE._idを書くという事実から来ています。 私は_idを書くだけで、同じ問題が発生しますが、logcatに間違いはありません。 – HerrM