Ungültiger Cursorstatus

fish-guts

Erfahrenes Mitglied
Moin

Habe es nun endlich mal fertiggebracht, eine Verbindung zu einer ODBC Datenbank zu erstellen.

Habe nun in einer Access Datei die Logindaten von Benutzern. Das Funktioniert eigentlich ganz gut, nur hab ich folgendes Problem:

Wenn der Benutzer nicht vorhanden ist, bringt das Programm immer abwechslungsweise die Hinweise "Ungültiger Cursorstatus" und "Unbekannter Benutzer" (Mein Code, der Aufgerufen werden soll, wenn der Benutzer nicht vorhanden ist).

Wie kann ich nun die Meldung "Ungültiger Cursorstatus" vermeiden? Bin für jede Hilfe dankbar.

Hier noch der Code:

Code:
void CLogindata::CheckLogin(CString user, CString pass)
{
 static int x=1;
 static int y=1;
 CDatabase db;
 db.OpenEx(_T("DSN=User;UID=admin"),
		  CDatabase::noOdbcDialog);
 if(db.IsOpen())
 {
  CRecordset rs(&db);
  rs.Open(CRecordset::dynaset,
   _T("Select * from [user]"),none);
  if(rs.IsOpen())
  {
   check:
   CString username,password;
   rs.GetFieldValue(_T("username"),username);
   rs.GetFieldValue(_T("passwort"),password);
   if(user=="")
   {
	CString EString="Bitte geben Sie einen Benutzernamen ein";
	CLogin eb;
	eb.Errorbox(EString);
	goto end;
   }
   else if(pass=="")
   {
	CString EString="Bitte geben Sie ein Passwort ein";
	CLogin eb;
	eb.Errorbox(EString);
	goto end;
   }
   else if(username==user)
   {
	
	if(password==pass)
	{
	 CLogin ok;
	 ok.PasswordOkay();
	 x=1;
	 goto end;
	}
	else
	{
	 
	 if(y<=2)
	 {
	  CLogin ok;
	  ok.PasswordWrong();
	  y++;
	  x=1;
	  goto end;
	 }
	 else
	 {
	  CString EString="Falsches Passwort. Bitte kontaktieren Sie einen Administrator";
	  CLogin eb;
	  eb.Errorbox(EString);
	  exit(EXIT_SUCCESS);
	 }
	}
   }
   if(user!=username)
   {
	long c=rs.GetRecordCount();
	if(x<=c) 
	{
	 rs.MoveNext();
	 x++;
	 goto check;
	}
	else
	{
	 CString EString="Unbekannter Benutzer!";
	 CLogin eb;
	 eb.Errorbox(EString);
	 goto end;
	}
   }
  }
  end:
  x=1;
  rs.Close();
  db.Close();
 }
}

Grüsse FG

;)
 
Ich hab mich auch mal mit dem OBBC rumgeschlagen, und find es ehrlich gesagt zum k..... Diese Cursor-Status-Meldung, bei welchem Befehl genau tritt die auf?

Wenn es eine Exception ist, mann muss leider bei den Datenbank-Befehlen immer mit einer rechnen, dann mach da einen try/catch-Block um den verursachenden Befehl drumrum. Damit müsstest du die Meldung abfangen können.
 
Moin

Der Code, den ich kopiert habe wird durch die Funktion CLogin::OnLogin() aufgerufen. Dies passiert dann, wenn ein Benutzer im Dialog auf den Button "Login" klickt, resp "Enter" drückt.

Die Fehlermeldung kommt dann, wenn der Benutzername nicht bekannt ist. Jedoch ist in einer Access Tabelle der letzte Datensatz ja immer leer. Kann das daran liegen? Wenn ja, wie behebe ich das?

Gruss FG
 
Moin

Hab die Lösung gefunden!

Statt GetRecordCount() hab ich nun GetODBCFieldCount(); verwendet und den "<" statt "<=" Operator verwendet. So ignoriert er den letzten Datensatz, der immer leer ist.

Gruss FG
 
Zurück