Tale Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 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 eingelesen wurde wird die Seriennummer des des Protokolls davor in die Datenbank geschrieben... Wie kann ich es machen, das dass nicht mehr passiert? ADOQuery löschen??? Danke, gruß Tales Zitieren
Amstelchen Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 wenn keine seriennummer vorhanden ist, sollte die variable Serial halt leer sein. das setzt allerdings voraus, dass das datenbankfeld dann auch leere werte annimmt, d.h. kein PK ist oder eine andere einschränkung wie UNIQUE oder NICHT NULL hat. ohne mehr codezeilen, was drumherum passiert, kann man da aber nix genaues sagen. s'Amstel Zitieren
Tale Geschrieben 16. Juni 2009 Autor Geschrieben 16. Juni 2009 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.Pos("endresult")) { Last_line="End"; } if(wert->Strings.Pos("PDU overtemperature")) { Fehler_temp="PDU overtemperature"; } if(wert->Strings.Pos("PDU error")) { Fehler_error="PDU error"; continue; } if(wert->Strings.Pos("PDU fail-error")) { Fehler_fail_error="PDU fail-error"; continue; } if(wert->Strings.Pos("PDU fail")) { Fehler_fail="PDU fail"; continue; } if(wert->Strings.Pos("PDU fail-warning")) { Fehler_warning="PDU fail-warning"; continue; } if(wert->Strings.Pos("Error Fuse")) { Fehler_fuse="Error Fuse"; continue; } if(wert->Strings.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; } Es geht um den rot makierten Temperaturfehler Zitieren
Amstelchen Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 ok, und du willst nun datensätze, bei denen Fehler_temp leer bzw. NULL ist, ignorieren? eventuell hilfts dann schon, eine if-abfrage um die ADO-abfrage herum zu setzen. s'Amstel Zitieren
Tale Geschrieben 16. Juni 2009 Autor Geschrieben 16. Juni 2009 Die Datensätze in denen kein Fehler_temp enthalten ist sollen auch an die Datenbank gegeben werden... Jedoch in der Spalte Fehler ohne den Temperaturfehler. Jedoch steht in jeder Spalte dieser Temperaturfehler... Gruß Tale Zitieren
Klotzkopp Geschrieben 17. Juni 2009 Geschrieben 17. Juni 2009 Die Datensätze in denen kein Fehler_temp enthalten ist sollen auch an die Datenbank gegeben werden... Jedoch in der Spalte Fehler ohne den Temperaturfehler.Was heißt denn "ohne"? Leerer String oder NULL? Jedoch steht in jeder Spalte dieser Temperaturfehler...Das liegt doch ganz offensichtlich daran, dass du weder die Variablen in der Schleife zurücksetzt, noch für "PDU overtemperature" irgendetwas tust, wenn der Schlüsselstring eben nicht gefunden wird. So übernimmst du einfach den Wert des vorhergehenden Datensatzes. Zitieren
Tale Geschrieben 17. Juni 2009 Autor Geschrieben 17. Juni 2009 Zitat: "Was heißt denn ohne "= NULL Und wie setze ich den String Temp_fehler zurück? Geht ja nicht einfach= Tempfehler="0"; Wie mach ich das am besten? Bin leider erst Anfänger, sorry! Gruß Tale Zitieren
Klotzkopp Geschrieben 17. Juni 2009 Geschrieben 17. Juni 2009 Und wie setze ich den String Temp_fehler zurück? Geht ja nicht einfach= Tempfehler="0";Wieso nicht? Letztendlich ist es egal, worauf du es setzt, anbieten würde sich natürlich ein leerer String. Du musst dann nur am Ende darauf prüfen, und gegebenfalls ein anderes SQL-Statement zusammensetzen, in das du dann eben nicht Temp_fehler, sondern "NULL" einsetzt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.