Benötige dringend Hilfe

Silvercreast

Erfahrenes Mitglied
Hallo ich habe ein wahrscheinlich dummes Problem was ich nur nicht erkenne, aber ich komme einfach nicht weiter ich habe einen sogenannten Blackout. Damit ich möglichs gut antworten bekomme, versuche ich mein Problem ausführlich zu beschreiben.

Also ich habe eine Musik Datenbank geschrieben, die alle Datensätze aus einer Accesstabelle liest und auch dort hinein speichert. Mein Problem ist nun aber, dass löschen aus dieser Tabelle herraus. Das markieren:

Code:
m_ListDataFound.SetExtendedStyle( LVS_EX_FULLROWSELECT);

funktioniert einwandfrei. Nur wenn ich diesen Datensatz dann löschen möchte gibt es Probleme. Ich habe mir mit Hilfe von anderen diesen Code halbwegs gebastelt.

Code:
void Suche_Speicher ::DeleteData()
{
	CDatabase music_data;
	CString SqlString;
	CString strErgebnis;

	MusicPiece DeleteSong; // MusicPiece ist die Class in der die Datenvariablen sind
                                             // z.B  std::string Interpret;
		
	    // Ist was markiert?
        POSITION pos = m_ListDataFound.GetFirstSelectedItemPosition();

//m_ListDataFound ist meine CListCtrl

        if (pos == NULL)
        { // Nichts gewählt, Fehlermeldung oder nix machen
			MessageBox("Es wurde kein Eintrag zum Löschen ausgewählt","Fehler",MB_OK);
        }
        else
        {
            while (pos)
            {
			
				 SqlString.Format( "('%s','%s','%s','%s','%s')", DeleteSong.Shelf.c_str(),DeleteSong.Interpreter.c_str(),DeleteSong.Title.c_str(),DeleteSong.Rubric.c_str(),DeleteSong.CD.c_str());
				strErgebnis.Format("Delete from [tbl_Datenbank] where [ID] = %d", m_ListDataFound.GetItemData( ? )); //conection with the databse
				 music_data.ExecuteSQL(strErgebnis); // send to database
                // Index des Items holen und gleich weitersetzen
                int nItem = m_ListDataFound.GetNextSelectedItem(pos);
                // nItem ist der Index des Eintrags
				m_ListDataFound.DeleteItem(nItem);
				
			
				
            }
        }


Ich hoffe Ihr habt den Code verstanden nun zu meinem Problem meinen Problemen:

- Ich habe ein MusicPiece DeleteSong deklariert habe natürlich noch keine Daten , wie schaffe ich es auf die Daten aus der CListCtrl zuzugreifen und in DeleteSong zu kopieren.

-m_ListDataFound.GetItemData() dieser kleine Codeteil ist Blau markiert, in die () muss ich glaube das zu löschende Item rein ,aber wie kann ich wiederum erkennen welches Item. Wenn ich pos benutze kann der Compiler das net konvertieren, muss ich mit format arbeiten

Ich hoffe Ihr habt alles verstanden und könnt mir helfen

gruss Silver
 
Bei GetItemData kannst du das nItem einsetzen. Der Name der Funktion GetNextSelectedItem ist etwas irreführend, du bekommst auch das erste selektierte Item damit. Den Inhalt der Liste kannst du mit GetItemText rausfinden.

Also so:

Code:
while (pos)
{
  // Index des Items holen und gleich weitersetzen
  int nItem = m_ListDataFound.GetNextSelectedItem(pos);

  // jetzt mit GetItemText usw. den Inhalt der Liste holen

  SqlString.Format( "('%s','%s','%s','%s','%s')", DeleteSong.Shelf.c_str(),DeleteSong.Interpreter.c_str(),DeleteSong.Title.c_str(),DeleteSong.Rubric.c  _str(),DeleteSong.CD.c_str());
  strErgebnis.Format("Delete from [tbl_Datenbank] where [ID] = %d", m_ListDataFound.GetItemData( ? )); //conection with the databse
   music_data.ExecuteSQL(strErgebnis); // send to database
  
   m_ListDataFound.DeleteItem(nItem);
				
}


Nachtrag: Pfui, Tabs sind Teufelswerk
 
Zurück