2011-08-10 10 views
1

カーソルに問題があります。 私は自分の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と次のように動作しますが、なぜないしかし、私は実際に説明することはできません。 テーブルのプレフィックスにより、間違ったミスが発生します。

+0

このエラーは、私がTB.GARAGE/VEHICULE._idを書くという事実から来ています。 私は_idを書くだけで、同じ問題が発生しますが、logcatに間違いはありません。 – HerrM

答えて

0

請求書を正しく保存していますか?ガレージIDを車両IDとして誤って保存していないことを確認してください。

それ以外の場合、「骨折」はどのように定義されていますか?恐らくそこには間違いがあります。

+0

はい、ListViewに表示し、ガレージと車両の両方が正しいためです。 私はいくつかの他のコードとエラーを追加します(以前はそれを見ていませんでした:-X) – HerrM

関連する問題