Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben
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.
Geschrieben

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

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...