Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ADOQuery

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

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.

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.