AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

if anweisung

Ein Thema von cell · begonnen am 15. Jul 2005 · letzter Beitrag vom 15. Jul 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: if anweisung

  Alt 15. Jul 2005, 08:31
Zitat von Duke_2004:
Es wäre besser, wenn du die Sache nochmal kurz überdenkst...
Genau darum hatte ich das als Frage formuliert!

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.
Volker
  Mit Zitat antworten Zitat
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#12

Re: if anweisung

  Alt 15. Jul 2005, 08:33
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 ???
  Mit Zitat antworten Zitat
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#13

Re: if anweisung

  Alt 15. Jul 2005, 08:34
@flocke wenn ich das in eines packe dann ist eine überschreitung da weil ich nur 255 zeichen hab
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: if anweisung

  Alt 15. Jul 2005, 08:39
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.
Peter
  Mit Zitat antworten Zitat
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#15

Re: if anweisung

  Alt 15. Jul 2005, 08:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Duke_2004
Duke_2004

Registriert seit: 26. Jan 2005
61 Beiträge
 
#16

Re: if anweisung

  Alt 15. Jul 2005, 08:46
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 )

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;
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#17

Re: if anweisung

  Alt 15. Jul 2005, 08:51
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;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#18

Re: if anweisung

  Alt 15. Jul 2005, 08:52
Zitat von Jasocul:
Wieso nur 255 Zeichen?
In der IDE kann ein String nur 255 Zeichen am Stück haben.
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

Re: if anweisung

  Alt 15. Jul 2005, 08:52
Zitat von cell:
meines erachtens ist das "logisch" was ich geschrieben habe
Nein, es ist vollkommen unsinnig, weil du "Query" wie zwei unterschiedliche Queries behandelst. Innerhalb einer Schleife über die Ergebniszeilen von Query schließt und öffnest du die Abfrage erneut mit anderen Ergebnisfeldern.
Volker
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: if anweisung

  Alt 15. Jul 2005, 09:05
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.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz