Announcement

Collapse
No announcement yet.

ADOQuery

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADOQuery

    Hallo zusammen! Habe da ein Problem! Muss mehrere Protokolle auslesen, und bestimmte Werte in einer Datenbank schreiben... Die Werte der Protokolle werden wie folgt an die Datenbank gegeben:

    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("INSERT INTO Protokoll (Seriennummer,...)");
    ADOQuery1->SQL->Add("VALUES ('"+Serial+"',...')");
    ADOQuery1->ExecSQL();

    ADO Query ist in einer Schleife und wird somit mit jedem Protokoll ausgeführt, damit diese Daten übertragen werden... Jedoch hat nicht jedes Protokoll eine Seriennummer d.H. wenn in einem Protokoll keine Seriennummer vorhanden ist wird die Seriennummer des des Protokolls davor in die Datenbank geschrieben... Wie kann ich es machen, dass das nicht mehr passiert?

    Danke, gruß Tales

  • #2
    Serial vor jeden Durchlauf auf den Wert setzen, der geschrieben werden soll, wenn keine Seriennummer vorliegt. Liegt eine Nummer vor, Serial mit dieser belegen
    Christian

    Comment


    • #3
      Setze Serial vor jedem Durchlauf nun auf null... (Serial=0 Der erste Datensatz enthält die Seriennummer und die restlichen 40 nun die 0. Sind jedoch weitere Seriennummern enthalten!?

      Comment


      • #4
        Da wird dann wohl an der Programmierung etwas nicht stimmen
        Christian

        Comment


        • #5
          Vielleicht findest du ja etwas, ohne genau zu wissen, was das Programm eigentlich macht:

          int anzahl=44; //Anzahl der Protokolle
          String Serial;
          String Slot;
          String Pruefer;
          String Datum;
          String Typ;
          String Fehler_temp;
          String Fehler_error;
          String Fehler_fail;
          String Fehler_fail_error;
          String Fehler_warning;
          String Fehler_fuse;
          String Fehler_system;
          String Last_line;
          int i=0;
          int k=1;
          String pf;

          for (int j=0;j!=anzahl ;j++ )
          {
          TStringList *wert=new TStringList();

          if (k<10)
          {
          pf="0000"+String(k); //Pfad
          }
          if (k>=10)
          {
          pf="000"+String(k);
          }
          wert->LoadFromFile("C:\\PDUM01-"+pf+".wdf");

          Serial=wert->Strings[1].SubString(13,12);
          if (wert->Strings[1].Pos("M01"))
          {
          Typ="M01";
          }
          else
          {
          Typ="S01";
          }
          Datum=wert->Strings[2].SubString(11,10);
          if (wert->Strings[5].Pos("10"))
          {
          Slot="10";
          }
          else
          {
          Slot=wert->Strings[5].SubString(11,1); //Einstellige Slotnummer
          }
          Pruefer=wert->Strings[6].SubString(13,4);
          while(Last_line!="End")
          {
          i++;
          if(wert->Strings[i].Pos("endresult"))
          {
          Last_line="End";
          }

          if(wert->Strings[i].Pos("PDU overtemperature"))
          {
          Fehler_temp="PDU overtemperature";
          }


          if(wert->Strings[i].Pos("PDU error"))
          {
          Fehler_error="PDU error";
          continue;
          }

          if(wert->Strings[i].Pos("PDU fail-error"))
          {
          Fehler_fail_error="PDU fail-error";
          continue;
          }

          if(wert->Strings[i].Pos("PDU fail"))
          {
          Fehler_fail="PDU fail";
          continue;
          }

          if(wert->Strings[i].Pos("PDU fail-warning"))
          {
          Fehler_warning="PDU fail-warning";
          continue;
          }

          if(wert->Strings[i].Pos("Error Fuse"))
          {
          Fehler_fuse="Error Fuse";
          continue;
          }

          if(wert->Strings[i].Pos("System Error HASS"))
          {
          Fehler_system="System Error HASS";
          continue;
          }

          }


          ADOQuery1->SQL->Clear();
          ADOQuery1->SQL->Add("INSERT INTO Protokoll (Seriennummer,Slot,Prüfer,Datum,Typ,Fehler)");
          ADOQuery1->SQL->Add("VALUES ('"+Serial+"','"+Slot+"','"+Pruefer+"','"+Datum+"' ,'"+Typ+"','"+Fehler_temp+"')");
          ADOQuery1->ExecSQL();



          ListBox_Daten->Items->Add(Datum+" "+ Serial+" "+ Slot+" " + Pruefer+" " + Typ);
          k++;
          //ListBox_Daten->Items->Add(Fehler_fail+Fehler_temp+Fehler_error+Fehler_f ail_error+Fehler_warning+Fehler_fuse);

          delete wert;
          }

          Comment


          • #6
            Setze Serial vor jedem Durchlauf nun auf null...
            Kann nicht erkennen wo du das tust.

            Serial wird immer mit

            Serial=wert->Strings[1].SubString(13,12);

            belegt. Ohne weitere Bedingung

            Der erste Datensatz enthält die Seriennummer
            Wenn es der erste ist, warum greifst du dann mit
            Serial=wert->Strings[1].SubString(13,12);
            auf den zweiten zu?
            Zuletzt editiert von Christian Marquardt; 16.06.2009, 21:39.
            Christian

            Comment


            • #7
              Serial=wert->Strings[1].SubString(13,12); weil die Seriennummer in der zweiten Reihe steht... Es geht aber eigentlich hier weniger um die Seriennummer sondern um den Temp_fehler den ich rot mackiert habe... Dieser Fehler ist eventuell im Protokoll enthalten und muss in den ca. 1000 Zeilen gefunden werden. Er muss aber nicht unbedingt vorhhanden sein. Dieser String wird mit ADOQuery an die Datenbank übergeben...

              Gruß Tales

              Comment


              • #8
                Jedoch hat nicht jedes Protokoll eine Seriennummer d.H. wenn in einem Protokoll keine Seriennummer vorhanden ist wird die Seriennummer des des Protokolls davor in die Datenbank geschrieben... Wie kann ich es machen, dass das nicht mehr passiert?

                geht aber eigentlich hier weniger um die Seriennummer sondern um den Temp_fehler den ich rot mackiert habe...
                Sag bescheid wenn du dich entschieden hast
                Christian

                Comment


                • #9
                  Tut mir leid, wollte mit der Seriennummer am Anfang nur ein Beispiel machen... Bin grad ziemlich unter Druck, da ich das morgen fertig haben muss.
                  Und du bist einer von wenigen die mir helfen können.
                  Gruß Tales

                  Comment


                  • #10
                    Du hast das grundsätzliche Problem, dass du eine Schleife gebaut hast und Werte die von bestimmten Bedigungen in die DB schreiben willst.

                    Beispiel Fehler_temp
                    Die Variable ist solange "" wie dieser Wert nicht gefunden wird. Wird er einmal gefunden, so wird der Wert in die DB geschrieben, aber nie auf "" zurückgesetzt. Somit wird er in der weiteren Verarbeitung der Schleife immer wieder geschrieben. Das gilt auch noch für andere Werte.

                    Also die Werte auf einen Standardwert setzen bei jedem Durchlauf

                    Und du bist einer von wenigen die mir helfen können.
                    Das ist schlecht, weil ich jetzt gleich in die Heia gehe..
                    Christian

                    Comment


                    • #11
                      Ja, das hab ich ja schon gemacht... Nach der For- Schleife (for (int j=0;j!=anzahl ;j++ ).
                      Fehler_temp=0;

                      Jedoch ist der String dann ständig auf beispielsweise 0 gesetzt... Naja, dann muss wohl weiter versuchen...
                      Trotzdem Danke, gruß Tales

                      Comment


                      • #12
                        Fehler_temp=0;

                        wird bei einem String wohl nicht funktionieren.

                        Wenn dann auch nicht mehr die Bedingung ausgeführt wird

                        if(wert->Strings[i].Pos("PDU overtemperature"))
                        {
                        Fehler_temp="PDU overtemperature";
                        }

                        musst du mal debuggen
                        Christian

                        Comment

                        Working...
                        X