ms access DB auf bestimmten wert abfragen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ms access DB auf bestimmten wert abfragen

    Ich habe ein Problem und zwar übergebe ich einen Wert aus einem HTML Formular an ein php script zur weiterverarbeitung... funktioniert.
    $wert. nun frage ich meine db nach dem wert ab..

    SELECT Kunden_Nr FROM Kunden WHERE KundenNr='$wert';

    ... wird der wert gefunden.. ist ja alles OK, steht der Wert aber nicht in der Tabelle, bekomme ich eine Fehlermeldung zurück

    Warning: main(): PropGet() failed: Ausnahmefehler aufgetreten. Source: ADODB.Field Description: Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen aktuellen Datensatz.

    Wie kann ich es schaffen, das wenn der wert nicht in der tabelle vorkommt, ich irgend nen zeichen zurückbekomme um es weiter mit eine abrage zu verarbeiten, z.b: um eine formatierte fehlermeldung zu bekommen??

    Bitte helft mir! Danke im vorraus!!!!!

  • #2
    Zeige mal etwas mehr Code. Mit welchem Code greifst du auf deine Access Datenbank zu und wie sieht deine Tabellenstruktur aus?
    Nur noch als Anmerkung: Zahlen gehören nicht in ''. Mir klingt die Fehlermeldung nach falscher Verwendung der Adodb KLasse.

    Du verwendest doch Adodb, um auf die Access Datenbank zuzugreifen?
    Zuletzt geändert von frabron; 23.05.2005, 09:13.

    Kommentar


    • #3
      --- quelltext

      <?
      // Variablenübergabe aus Formular(ausleihen)

      $fnr = $_POST['fnr']; // Variablenübernahme
      $knr = $_POST['knr']; // Variablenübernahme
      $anzahltag = $_POST['ausleihtage'];


      // Bevor er das ganze Zeug ausführen soll soll er überprüfen ob knr oder fnr überhauüt in der db tabelle vorkommt!





      // Eingabeüberprüfung
      if($fnr =="" or $knr=="" or $anzahltag == 'auswaehlen')
      {
      ?>
      <Body bgcolor="#0B0B21">
      <CENTER><a target="Hauptframe" href="ausleihen.php" style="text-decoration: none"><font color="#FFFFFF" size="3px" face="Verdana">zurück</a><P><? echo'-----Eingabefehler-----'?></font></CENTER>
      </body><?
      }
      else
      {

      //db Verbindung herstellen
      $Datenbank_auswählen = '..\htdocs\Datenbank\videothek.mdb';
      $Datenbankverbindung_aufbauen = new COM('ADODB.Connection');
      $Datenbankverbindung_aufbauen ->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$Datenbank_auswählen"); // Treiber wählen


      //Status Verliehen Filmkopie 1 wird ausgelesen
      $sql_eins = "SELECT Verliehen FROM Kopie WHERE FilmNr=$fnr AND KopieNr=1";
      $verl = $Datenbankverbindung_aufbauen->Execute($sql_eins);

      // Inhalt des Tabellefeldes wird in $merker Variable geschrieben
      $merker = $verl->Fields['Verliehen']->Value;



      IF($merker ==false)
      {
      // Erste Kopie vom gewünschten Film wird gebucht
      $sql_zwei = "UPDATE kopie SET Verliehen = true WHERE FilmNr=$fnr AND KopieNr=1";
      $Datenbankverbindung_aufbauen->Execute($sql_zwei);

      // Filmnummer und Kundennummer werden in Tabelle abgelegt! Zur Identifikation wer welchen Film hat.
      $sql_drei = "INSERT INTO Verleih(KundenNr,FilmNr, KopieNR,VerleihStart) VALUES($knr,$fnr,1,DATE())";
      $Datenbankverbindung_aufbauen->Execute($sql_drei);

      $sql_verleihEnde = "SELECT VerleihStart from Verleih WHERE KundenNr=$knr AND FilmNr=$fnr AND KopieNr=1";
      $sql_verleihEnde_merke = $Datenbankverbindung_aufbauen->Execute($sql_verleihEnde);
      $verleihStart= $sql_verleihEnde_merke->Fields['VerleihStart']->Value;

      // Verleihende wird berechnet
      $verleihEnde = $verleihStart + $anzahltag;

      // Datum wird formatiert und zur weiterverarbeitung an Variable übergeben
      $eintrag = date("d.m.Y","$verleihEnde");


      // Verleihende wird in Tabelle geschrieben
      $sql_verleihEnde = "UPDATE Verleih SET verleihEnde='$eintrag' WHERE KundenNr=$knr AND FilmNr=$fnr AND KopieNr=1";
      $Datenbankverbindung_aufbauen->Execute($sql_verleihEnde);


      // Filmstatistik entwerfen
      $sql_stat = "SELECT Counter FROM Statistik_Film WHERE FilmNr=$fnr";
      $sql_stat_merke = $Datenbankverbindung_aufbauen->execute($sql_stat);
      $counter= $sql_stat_merke->Fields['Counter']->Value;

      $zahl = $counter;
      $zahl ++;
      $sql_update_counter = "UPDATE Statistik_Film SET Counter=$zahl WHERE FilmNr=$fnr";
      $Datenbankverbindung_aufbauen->execute($sql_update_counter);


      // Kunden statistik entwerfen
      $sql_stat_kunden = "SELECT Anzahl FROM Statistik_Kunden WHERE KundenNr=$knr";
      $sql_stat_merke_kunden = $Datenbankverbindung_aufbauen->execute($sql_stat_kunden);
      $anzahl= $sql_stat_merke_kunden->Fields['Anzahl']->Value;

      $anz = $anzahl;
      $anz ++;

      $sql_update_anzahl = "UPDATE Statistik_Kunden SET Anzahl=$anz WHERE KundenNr=$knr";
      $Datenbankverbindung_aufbauen->execute($sql_update_anzahl);


      ?>
      <html>
      <body bgcolor="#0B0B21">
      <font size="3px" face="verdana" color="#FFFFFF"><? echo 'Filmkopie Nr.1 wurde gebucht! '; ?> </font>
      </body></html>
      <?

      }
      else
      {
      //Status Verliehen Filmkopie 1 wird ausgelesen
      $sql_vier = "SELECT Verliehen FROM Kopie WHERE FilmNr=$fnr AND KopieNr=2";
      $ver = $Datenbankverbindung_aufbauen->Execute($sql_vier);

      // Inhalt des Tabellefeldes wird in $merke Variable geschrieben
      $merke = $ver->Fields['Verliehen']->Value;

      IF($merke ==false)
      {
      // Fals erste Kopie schon verliehen, wird Kopie 2 gebucht
      $sql_fuenf = "UPDATE kopie SET Verliehen = true WHERE FilmNr=$fnr AND KopieNr=2";
      $Datenbankverbindung_aufbauen->Execute($sql_fuenf);

      // Filmnummer und Kundennummer werden in Tabelle abgelegt! Zur Identifikation wer welchen Film hat.
      $sql_sechs= "INSERT INTO Verleih(KundenNr,FilmNr,KopieNr,VerleihStart) VALUES($knr, $fnr,2,DATE())";
      $Datenbankverbindung_aufbauen->Execute($sql_sechs);

      // Ausleihdatum wird ausgelesen
      $sql_verleihEnde = "SELECT VerleihStart from Verleih WHERE KundenNr=$knr AND FilmNr=$fnr AND KopieNr=2";
      $sql_verleihEnde_merke = $Datenbankverbindung_aufbauen->Execute($sql_verleihEnde);
      $verleihStart= $sql_verleihEnde_merke->Fields['VerleihStart']->Value;

      // Ausleihende wird berechnet
      $verleihEnde = $verleihStart + $anzahltag;


      // Datum wird formatiert und an Variable zum weiteren verarbeiten weitergegeben
      $eintrag = date("d.m.Y","$verleihEnde");


      // AusleihEnde wird in Tabelle geschrieben
      $sql_verleihEnde = "UPDATE Verleih SET verleihEnde='$eintrag' WHERE KundenNr=$knr AND FilmNr=$fnr AND KopieNr=2";
      $Datenbankverbindung_aufbauen->Execute($sql_verleihEnde);



      // Filmstatistik entwerfen
      $sql_stat1 = "SELECT Counter FROM Statistik_Film WHERE FilmNr=$fnr";
      $sql_stat_merke1 = $Datenbankverbindung_aufbauen->execute($sql_stat1);
      $counter1= $sql_stat_merke1->Fields['Counter']->Value;


      $zahl1 = $counter1;
      $zahl1 ++;
      $sql_update_counter1 = "UPDATE Statistik_Film SET Counter=$zahl1 WHERE FilmNr=$fnr";
      $Datenbankverbindung_aufbauen->execute($sql_update_counter1);


      // Kunden statistik entwerfen
      $sql_stat_kunden1 = "SELECT Anzahl FROM Statistik_Kunden WHERE KundenNr=$knr";
      $sql_stat_merke_kunden1 = $Datenbankverbindung_aufbauen->execute($sql_stat_kunden1);
      $anzahl1= $sql_stat_merke_kunden1->Fields['Anzahl']->Value;

      $anz1 = $anzahl1;
      $anz1 ++;

      $sql_update_anzahl1 = "UPDATE Statistik_Kunden SET Anzahl=$anz1 WHERE KundenNr=$knr";
      $Datenbankverbindung_aufbauen->execute($sql_update_anzahl1);

      ?>
      <html>
      <body bgcolor="#0B0B21">
      <font size="3px" face="verdana" color="#FFFFFF"><? echo 'Filmkopie Nr.2 wurde gebucht! '; ?> </font>
      </body></html>
      <?
      }
      else
      {

      // Rückmeldung, falls beide Filme schon verliehen sind!
      ?>
      <html>
      <body bgcolor="#0B0B21">
      <font size="3px" face="verdana" color="#FFFFFF"><? echo 'Film ist zurzeit leider nicht verfügbar'; ?> </font>
      </body></html>
      <?
      }
      }

      // Datenbankverbindung wird getrennt
      $Datenbankverbindung_aufbauen->close();

      }
      ?>

      Kommentar


      • #4
        Re: ms access DB auf bestimmten wert abfragen

        Original geschrieben von kebxm

        Wie kann ich es schaffen, das wenn der wert nicht in der tabelle vorkommt, ich irgend nen zeichen zurückbekomme um es weiter mit eine abrage zu verarbeiten, z.b: um eine formatierte fehlermeldung zu bekommen??
        indem du vorher prüfst, ob irgendwas zurückgeliefert ist, und das ist der Fall wenn der Zeiger nicht auf BOF (Begin Of File) oder EOF (End Of File) steht, normalerweise reicht die Überprüfung auf EOF, also z.B. die Zeile:

        PHP-Code:
        // Inhalt des Tabellefeldes wird in $merker Variable geschrieben
        $merker $verl->Fields['Verliehen']->Value
        in dem Prüfstblock einbauen:

        PHP-Code:
        if (!$verl->EOF) { ...

           
        // deine Codes

        // Block schliessen nicht vergessen
        else { // keine Daten in der DB
           
           // entsprechend abfangen

        // Block schliessen nicht vergessen 
        und das machst du für jede neue Abfrage

        Kommentar


        • #5
          klappt nicht ganz

          Warning: main(): PropGet() failed: Ausnahmefehler aufgetreten. Source: ADODB.Field Description: Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen aktuellen Datensatz. in d:\wampp1\htdocs\uebername_ausleihen.php on line 18

          line 14 - 21: $knr ist meine var ausm formular wird per post übergeben

          //Kundennummer Kontrolle
          $sql_check = "SELECT KundenNr FROM Kunden WHERE KundenNr=$knr";
          $check = $Datenbankverbindung_aufbauen->Execute($sql_check);
          // Inhalt des Tabellefeldes wird in $merker Variable geschrieben
          $kontrolle = $check->Fields['KundenNr']->Value;

          IF (!$check->EOF)
          {

          Kommentar


          • #6
            Re: Re: ms access DB auf bestimmten wert abfragen

            Original geschrieben von asp2php
            also z.B. die Zeile:

            PHP-Code:
            // Inhalt des Tabellefeldes wird in $merker Variable geschrieben
            $merker $verl->Fields['Verliehen']->Value
            in dem Prüfstblock einbauen:

            PHP-Code:
            if (!$verl->EOF) { ...

               
            // deine Codes

            // Block schliessen nicht vergessen
            else { // keine Daten in der DB
               
               // entsprechend abfangen

            // Block schliessen nicht vergessen 
            Warum machst du das nicht?

            Du versuchst, erst etwas auszulesen und dann prüfst du, ob es überhaupt etwas gibt, das ausgelesen werden könnte.
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              ?!?!?!?!!?

              Da liegt mein problem. Ich bekommen z.b über ein Eingabeformular eine zahl übergeben --> zb es gibt jemand 33 ein


              die wird nun in der KundenNr SPalte nicht gefunden
              in der db gibt es z.b nur 1,2,3,4,5,6,7,8,9,10 als kundenNr

              dann liefert es mir den fehler....

              Kommentar


              • #8
                Re: klappt nicht ganz

                Original geschrieben von kebxm

                // Inhalt des Tabellefeldes wird in $merker Variable geschrieben
                $kontrolle = $check->Fields['KundenNr']->Value;

                IF (!$check->EOF)
                {
                du machst ja nicht was ich dir gesagt habe, wie wär's wenn du mein Posting gaaaaaanz in Ruhe durchliest, und wenn du nicht verstanden hast, dann ... immer wieder durchliest ... bis du dahinter steigst, denn deutlicher kann man (ich) wirklich nicht formulieren, es sei denn man baut deinen Code so um, dass du dann sofort die Änderung siehst, aber das mach' ich nicht, und es wird dir auch keiner machen

                Kommentar

                Lädt...
                X