Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rechnen mit Werten aus der DB (https://www.delphipraxis.net/101616-rechnen-mit-werten-aus-der-db.html)

Jack23 16. Okt 2007 13:17

Datenbank: Access • Zugriff über: ADO

Rechnen mit Werten aus der DB
 
Hallo,

ich möchte mit Werten aus einer Access Datenbank rechnen.

Jetzt kommt wieder eins meiner Beispiele:

Ich habe ein Formular.

Auf dem sind CheckBoxen oder ComboBoxen ist jetzt erstmal egal oder?

Gehen wir jetzt mal von 5 Werten aus. Nein besser ich erkläre meine Datenbank.

wert | daten (meine beiden spalten) Die Daten sind durch Komma getrennt.
-------------
wert1 | 3ABCDE, 56FG, 1HI
wert2 | 2ABCDE, 78FG, 3ASDE
wert3 | 3ABCDE, 98LK, 2HI
wert4 | 1ABCDE, 60PL, 5TZ
wert5 | 9VFEFD, 23TR, 8ZU

So sieht jetzt meine Datenbank aus. Jedenfalls die benötigten Werte.

So nun habe ich drei ComboBoxen. In diesen ComboBoxen sollen die oben genanten werte angezeigt werden.
Ohne die Daten!

Dann habe ich in diesen drei Boxen jetzt wert1, wert4 und wert2 ausgewählt.

Dann drücke ich auf einen Button nennen wir in "Rechnen". Das Ergebnis wird berechnet.

In einem Label steht dann das Ergebnis aus wert1, wert4 und wert2:
6 ABCDE, 134 FG, 60 PL, 5 TZ, 1 HI, 3 ASDE

Es fällt kein Wert weg auch wenn mit dem Wert nicht Addiert wurde. Er wird einfach wieder angezeigt.

Das ist das Ergebnis aus den oben ausgewählten Werten.

Wie fange ich das an?

Das größte Problem ist die Werte aus der DB in die ComboBoxen kriegen und dann mit ihnen rechnen.

Ich hoffe ihr könnt mir helfen.

marabu 16. Okt 2007 14:02

Re: Rechnen mit Werten aus der DB
 
Hi Jack,

für den Umgang mit den ADO-Komponenten findest du reichlich Code im Forum und der Online-Hilfe. Deine Benutzerschnittstelle ist auch nicht so klar beschrieben, als dass ich dir Code für die Übernahme von Access-Daten in deine Controls zeigen könnte.

Das Rechnen ist eigentlich recht einfach: Deine Daten musst du am Delimiter (Komma) zerlegen, das geht recht einfach mit einer TStringList und deren property CommaText. Für das Rechnen studiere mal den folgenden Code:

Delphi-Quellcode:
uses
  RTLConsts;

type
  TCountedStringList = class(TStringList)
  private
   function GetString(Index: Integer): string;
  public
    procedure AddString(const s: string);
  end;

procedure TCountedStringList.AddString(const s: string);
var
  index, i, n: Integer;
  sDim: string;
begin
  n := 0;
  for i := 1 to Length(s) do
    if s[i] in ['0'..'9'] then
      n := n * 10 + Ord(s[i]) - Ord('0') else
    begin
      sDim := Copy(s, i, MaxInt);
      if Find(sDim, index)
        then Objects[index] := TObject(Integer(Objects[index]) + n)
        else Objects[Add(sDim)] := TObject(n);
      Break;
    end;
end;

function TCountedStringList.GetString(index: Integer): string;
begin
  if (Index < 0) or (Index >= Count) then Error(@SListIndexError, Index);
  Result := Format('%d%s', [Integer(Objects[index]), Strings[index]]);
end;
3ABCDE ist nichts anderes als eine Kombination einer Zahl mit einem String - wie 500KG oder 2STD und 10MIN. Du kannst die einzelnen Strings mit AddString('3ABCDE') einer CountedStringList hinzufügen und mit GetString() und Count die Ergebnisse iterativ abholen.

Grüße vom marabu

Jack23 16. Okt 2007 14:08

Re: Rechnen mit Werten aus der DB
 
Ok mit ADO ist alles klar. Ich habe eine ADOQuery.

Allso das Problem ist ja wie ich die Daten die ich über die Query hole in die ComboBoxen bekomme und in die STringlist. Weil das sind ja immer unterschiedliche. Die kann ich ja nicht fest definieren.

marabu 16. Okt 2007 14:29

Re: Rechnen mit Werten aus der DB
 
Aus der Query kannst du die Daten mit FieldByName('FELDNAME').AsString auslesen, dann weist du sie der Eigenschaft CommaText einer StringList zu und schon kannst du auf die einzelnen Werte als Strings[i] zugreifen. Oder du fügst sie der ComboBox hinzu: ComboBox.Items.Add(Query.FieldByName('FELDNAME'));

Jack23 16. Okt 2007 15:30

Re: Rechnen mit Werten aus der DB
 
Erstmal noch zwei kleine fragen:

Was ist eine TStringList?

Und was du geschrieben hast:
3ABCDE ist nichts anderes als eine Kombination einer Zahl mit einem String



Zwischen dem 3ABCDE sind aber mehrere Leerzeichen. Deswegen auch nach Komma trennen. 3 AB CD E,

Hat macht das irgendwelche Probleme?

mkinzler 16. Okt 2007 15:36

Re: Rechnen mit Werten aus der DB
 
Zitat:

Was ist eine TStringList?
Eine Liste von Strings.
Eine Stringliste hat die Eigenschaft .DelimitedText, wenn man der etwas zuweist, wird anhand der Eigenschaft .Delimiter getrennt.

Jack23 16. Okt 2007 15:43

Re: Rechnen mit Werten aus der DB
 
Wo finde ich?

Oder gibt es dafür ein Tutorial?

semo 16. Okt 2007 15:57

Re: Rechnen mit Werten aus der DB
 
ist in der unit classes enthalten.

tutorial= delphi hilfe, sollte reichen.
wenn du eine alte version zur verfügung hast nutze die (<Delphi 7)

marabu 16. Okt 2007 16:17

Re: Rechnen mit Werten aus der DB
 
Zitat:

Zitat von Jack23
... Zwischen dem 3ABCDE sind aber mehrere Leerzeichen. Deswegen auch nach Komma trennen. 3 AB CD E ...

Mein Code orientiert sich an den Beispielen aus deinem ersten Beitrag.

Zitat:

Zitat von Jack23
... Hat macht das irgendwelche Probleme?

Mir nicht.

Wegen der Leerzeichen musst du bei D7 die Daten vorbehandeln - die durch Komma getrennten Strings müssen in Quotes stehen, damit man sie mit CommaText zerlegen kann: klick

Jack23 16. Okt 2007 16:29

Re: Rechnen mit Werten aus der DB
 
Ich habe Delphi11. Also so ganz komme ich noch nicht klar.

Ich habe jetzt ein StringList:

'Test' ist der .FieldByName Name.

Dann weise ich in der gleichen Procedur der ComboBox die felder zu:

Delphi-Quellcode:
ComboBox1.Items.Add(Query1.FieldByName('Test'));
Wie baue ich nun aber das mit dem Delimiter ein?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Seite 1 von 2  1 2      

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