![]() |
Re: if anweisung
Zitat:
Außerdem: Du selektierst mit den beiden Queries aus derselben Tabelle mit denselben Kriterien! Pack das in eine Abfrage! ...und wenn du schon zwei Queries brauchst, dann nimm wenigstens zwei unterschiedliche TQuery-Objekte dafür. |
Re: if anweisung
hmm wie soll ich das sonst machen ??
aufgebenstellung ist so: ich habe einige werte agewvo, agewvu,.... und mit denen soll ich rechnen aber wenn keine werte vorhanden sind in der datenbank dann kann ich nichts rechnen , also soll er mir einen fehlermeldung geben ?? hat jemand einen besseren lösungsvorschlag als den da ??? |
Re: if anweisung
@flocke wenn ich das in eines packe dann ist eine überschreitung da weil ich nur 255 zeichen hab
|
Re: if anweisung
Wieso nur 255 Zeichen?
In einen String passen schon ein paar mehr Zeichen rein. Es sein denn, du hast das in deiner Funktion als String[255] oder ShortString deklariert. Kann es sein, dass da auch mal ein Leerzeichen enthalten ist? Falls ja, solltest du noch ein "Trim" auf die Werte machen. |
Re: if anweisung
hmmm wenn ich die beiden SQL befehle zusammenfüge kommt eine zeichenüberschreitung :(
ein leerzeichen kann nicht vorkommen aber ich verstehe nicht warum die if anweisung nicht funktioniert .. meines erachtens ist das "logisch" was ich geschrieben habe :mrgreen: |
Re: if anweisung
Eine eher "gewagte" Lösung wäre z.B.: (müsste funktionieren, da ja dieselbe Anzahl Datensätze als Ergebnis kommen müssten -> gleiche Tabelle -> gleiche Bedingung)
Delphi-Quellcode:
var
agewvo, agewvu, agewho, agewhu, egewvo, egewvu, egewho, egewhu, agewscheibe, egewscheibe: Float; begin with DataModule1 do begin Query1.SQL.Clear; Query1.SQL.Text := selectsql('Anfangsgewicht_Belag_vorne_oben, Anfangsgewicht_Belag_vorne_unten, Anfangsgewicht_Belag_hinten_oben, Anfangsgewicht_Belag_hinten_unten, Endgewicht_Belag_vorne_oben, Endgewicht_Belag_vorne_unten, Endgewicht_Belag_hinten_oben, Endgewicht_Belag_hinten_unten', 'Friktionstest', 'Testnummer=' + frmtestauswahl.cbotestnummer.Text, '', ''); Query1.Open; query2.SQL.Clear; Query2.SQL.Text := selectsql('Anfangsgewicht_Scheibe,Endgewicht_Scheibe', 'Friktionstest', 'Testnummer=' + frmtestauswahl.cbotestnummer.Text, '', ''); Query2.Open; while not Query1.Eof do begin agewvo := (Query1.FieldsByName['Anfangsgewicht_Belag_vorne_oben'].AsFloat); agewvu := (Query1.FieldsByName['Anfangsgewicht_Belag_vorne_unten'].AsFloat); agewho := (Query1.FieldsByName['Anfangsgewicht_Belag_hinten_oben'].AsFloat); agewhu := (Query1.FieldsByName['Anfangsgewicht_Belag_hinten_unten'].AsFloat); egewvo := (Query1.FieldsByName['Endgewicht_Belag_vorne_oben'].AsFloat); egewvu := (Query1.FieldsByName['Endgewicht_Belag_vorne_unten'].AsFloat); egewho := (Query1.FieldsByName['Endgewicht_Belag_hinten_oben'].AsFloat); egewhu := (Query1.FieldsByName['Endgewicht_Belag_hinten_unten'].AsFloat); agewscheibe := (Query2.FieldsByName['Anfangsgewicht_Scheibe'].AsFloat); egewscheibe := (Query2.FieldsByName['Endgewicht_Scheibe'].AsFloat); if ((agewvo = 0.00) and (agewvu = 0.00) and (agewho = 0.00) and (agewhu = 0.00) and (egewvo = 0.00) and (egewvu = 0.00) and (egewho = 0.00) and (egewhu = 0.00) and (agewscheibe = 0.00) and (egewscheibe = 0.00)) then begin Showmessage('Es gibt keine Werte für diese Testnummer'); //ShowMessage(Query.SQL.Text); end else begin lblbelagverschleiss.Caption := FloatToStr((agewvo + agewvu + agewho + agewhu) - (egewvo + egewvu + egewho + egewhu)); lblscheibeverschleiss.Caption := FloatToStr(agewscheibe + egewscheibe); end; Query1.Next; query2.Next; end; Query1.Close; Query2.Close; end; Aber besser wäre alles in einem... (das mit den 255 Zeichen versteh ich auch net...hab auch SQL-Abfragen mit mehr Zeichen :-D )
Delphi-Quellcode:
var
agewvo, agewvu, agewho, agewhu, egewvo, egewvu, egewho, egewhu, agewscheibe, egewscheibe: Float; begin with DataModule1 do begin Query.SQL.Clear; Query.SQL.Text := selectsql('Anfangsgewicht_Belag_vorne_oben, Anfangsgewicht_Belag_vorne_unten, Anfangsgewicht_Belag_hinten_oben, Anfangsgewicht_Belag_hinten_unten, Endgewicht_Belag_vorne_oben, Endgewicht_Belag_vorne_unten,' + ' Endgewicht_Belag_hinten_oben, Endgewicht_Belag_hinten_unten,Anfangsgewicht_Scheibe,Endgewicht_Scheibe', 'Friktionstest', 'Testnummer=' + frmtestauswahl.cbotestnummer.Text, '', ''); Query.Open; while not Query.Eof do begin agewvo := (Query.FieldsByName['Anfangsgewicht_Belag_vorne_oben'].AsFloat); agewvu := (Query.FieldsByName['Anfangsgewicht_Belag_vorne_unten'].AsFloat); agewho := (Query.FieldsByName['Anfangsgewicht_Belag_hinten_oben'].AsFloat); agewhu := (Query.FieldsByName['Anfangsgewicht_Belag_hinten_unten'].AsFloat); egewvo := (Query.FieldsByName['Endgewicht_Belag_vorne_oben'].AsFloat); egewvu := (Query.FieldsByName['Endgewicht_Belag_vorne_unten'].AsFloat); egewho := (Query.FieldsByName['Endgewicht_Belag_hinten_oben'].AsFloat); egewhu := (Query.FieldsByName['Endgewicht_Belag_hinten_unten'].AsFloat); agewscheibe := (Query.FieldsByName['Anfangsgewicht_Scheibe'].AsFloat); egewscheibe := (Query.FieldsByName['Endgewicht_Scheibe'].AsFloat); if ((agewvo = 0.00) and (agewvu = 0.00) and (agewho = 0.00) and (agewhu = 0.00) and (egewvo = 0.00) and (egewvu = 0.00) and (egewho = 0.00) and (egewhu = 0.00) and (agewscheibe = 0.00) and (egewscheibe = 0.00)) then begin Showmessage('Es gibt keine Werte für diese Testnummer'); //ShowMessage(Query.SQL.Text); end else begin lblbelagverschleiss.Caption := FloatToStr((agewvo + agewvu + agewho + agewhu) - (egewvo + egewvu + egewho + egewhu)); lblscheibeverschleiss.Caption := FloatToStr(agewscheibe + egewscheibe); end; Query.Next; end; Query.Close; end; |
Re: if anweisung
Ich würde das mit 'ner StringListe machen !
Etwa so !
Delphi-Quellcode:
var StringList : TStringList;
i : Integer; begin StringList := TStringList.Create; with DataModule1 do begin Query.SQL.Clear; Query.SQL.Text:= selectsql('Anfangsgewicht_Belag_vorne_oben, Anfangsgewicht_Belag_vorne_unten, Anfangsgewicht_Belag_hinten_oben, Anfangsgewicht_Belag_hinten_unten, Endgewicht_Belag_vorne_oben, Endgewicht_Belag_vorne_unten, Endgewicht_Belag_hinten_oben, Endgewicht_Belag_hinten_unten','Friktionstest','Testnummer=' + frmtestauswahl.cbotestnummer.Text,'', ''); Query.Open; while not Query.Eof do begin for i := 0 to 7 do StringList.Add(Query.Fields[i].AsString); Query.SQL.Clear; Query.SQL.Text:=selectsql ('Anfangsgewicht_Scheibe,Endgewicht_Scheibe','Friktionstest', 'Testnummer='+frmtestauswahl.cbotestnummer.Text,'',''); Query.Open; StringList.Add(Query.Fields[0].AsString); StringList.Add(Query.Fields[1].AsString); if StringList.Text = '' then begin Showmessage('Es gibt keine Werte für diese Testnummer'); //ShowMessage(Query.SQL.Text); close; end else lblbelagverschleiss.Caption :=FloatToStr((StrToFloat(StringList[0]) + StrToFloat(StringList[1]) + StrToFloat(StringList[2]) + StrToFloat (StringList[3])) - (StrToFloat(StringList[4]) + StrToFloat(StringList[5]) + StrToFloat(StringList[6]) + StrToFloat(StringList[7]))); lblscheibeverschleiss.Caption:=FloatToStr(StrToFloat(StringList[8]) +StrToFloat(StringList[9])); Query.Next; Query.Close; end; StringList.Free; end; |
Re: if anweisung
Zitat:
Delphi-Quellcode:
var
s : string; begin s := 'Text mit mehr als 255 Zeichen'; // -> Fehler. s := 'Text mit bis zu 255 Zeichen' + 'wieder 255 Zeichen' + 'und noch einmal 255 Zeichen'; //-> Kein Fehler end; |
Re: if anweisung
Zitat:
|
Re: if anweisung
Wenn der If-Fall nicht eintritt, dann ist die Bedingung nicht erfüllt. Da kannst du nicht dran rütteln.
Debuggen und jede Variable einzeln prüfen. Ändere doch mal die Bedingung und überprüfe die Länge der Strings (falls du überhaupt noch die String-Variante verwendest). Wenn sie leer sind, ist Length(variable) = 0. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz