Bedingtes Durchsuchen
-
Ich dursuche eine DB mit m_strFilter. Ich will aber, dass wenn es die Nummer in der Spalte, die durchsucht wird, nicht existiert die DB nicht geschlossen wird und eine Fehlermeldung auftritt, sondern das ich einfach eine MessageBox aufrufe und dann ganz normal weiter arbeiten kann.
MFG
-
Wie machst Du den Aufruf von Open, und was viel wichtiger ist benutzt du CRecordset oder CDAORecordset oder was ganz anderes. bei den paar infos wird dir kaum einer Helfen können.
Und meine Kristallkugel ist gerade in der Werkstatt zum putzen, sonst hätte ich die befragt.
Gruß Matthias
-
...und wenn nix gefunden wird, wenn m_strFilter gesetzt ist, dann kann man das mit IsEOF() überprüfen und dann je nach dem eine MessageBox ausgeben, die DB zu machen oder sonstwas.
[edit]
Oder anders gesagt:
bevor du auf den DB-Inhalt zugreifst, musst du auf IsEOF() überprüfen. Wenn du das nicht machst und kein Datensatz vorliegt, kommt es zu der Fehlermeldung.
[/edit]
-
Und wie mache ich das genau mit IsEOF?
Hab jetzt folgen den Codem_pSet->m_strFilter.Format(_T("[DB].[Nr]=%ld"),m_Move_To_Artikel_Nr); if ( m_pSet->IsEOF( ) ) { MessageBox("Nicht vorhanden"); m_pSet->Close(); m_pSet->Open(CRecordset::snapshot, NULL, CRecordset::none); m_pSet->MoveFirst( ); m_pSet->Requery(); UpdateData(FALSE); } else { if(m_pSet->CanRestart()) { m_pSet->Requery(); } UpdateData(FALSE); }
-
Mmmhhhhhh,...
MoveFirst() brauchst du schon mal nicht, weil das RecordSet nach Open() sowieso auf dem ersten Record ist.
Und Close() und danach Open() macht auch nicht viel Sinn. Wenn du damit nur den Filter löschen möchtest, geht auch statt dessen m_pSet->m_strFilter="";
Und das Requery() muss hinter
m_pSet->m_strFilter.Format(_T("[DB].[Nr]=%ld"),m_Move_To_Artikel_Nr);
und vor
if ( m_pSet->IsEOF( ) )
also dazwischen.
IsEOF() prüft einfach, ob (noch) Datensätze vorhanden sind oder nicht (End Of File).
-
Also so
m_pSet->m_strFilter.Format(_T("[HiWu].[Artikel-Nr]=%ld"),m_Move_To_Artikel_Nr); m_pSet->Requery(); if ( m_pSet->IsEOF( ) ) { MessageBox("Artikel ist nicht vorhanden"); m_pSet->m_strFilter=""; UpdateData(FALSE); } else { if(m_pSet->CanRestart()) { m_pSet->Requery(); } UpdateData(FALSE); }
Aber wenn ich jetzt nach eine Nr suche, die es nicht gibt, gibt er mir schonmal die MessageBox aus, aber danach passiert nix. Wenn ich dann nach einer anderen Nr suche, kommt immer der Fehler "Operation fehlgeschlagrn; es gibt keinen aktuellen Datensatz"
MFG
-
Hab den Fehler. Nach dem m_strFilter=""; muss noch n m_pSet->Requery(); gesetzt werden denn wird der Datensatz akutalisiert und bla und blubb aber auf jedenfall geht das
-
Ich hab doch mal ne Frage. Wie kann ich n String, der in einer ListBox steht eine Zeile noch oben verschieben? Den Befehl MoveUP gibt es nicht. Andere ähmliche Befehle hab ich auch net gefunden.
-
1. wenn index == 0, dann mache nix^^
2. den String oben drüber auslesen und zwischenspeichern
3. den gewollten String an die Stelle drüber schreiben
4. den zwischenspeicherString an die Stelle drunter speichernselbst der/die Programmierer/in^^
-
Und wie bestimme ich, an welche Stelle der Text geschrieben wird? AddString nimmt nämlich nur einen Parameter.