Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Strings an eine Funktion übergeben (https://www.delphipraxis.net/80269-strings-eine-funktion-uebergeben.html)

needatip 6. Nov 2006 11:27


Strings an eine Funktion übergeben
 
Hallo,
ich möchte die ausgewählten Strings einer Listbox an eine Funktion übergeben. Diese soll dann eine SQL Berechnung mit den übergebenen Strings durchführen.
In etwa so:
ListBox-Einträge
AGT
RET
BGH
TSB
RZU
FHG

z. B. ausgewählt Eintrag 1,2,5 u. 6

Übergabe der Strings 1,2,5 u. 6 an SQL Funktion
wie kann ich die Listbox-Einträge an die Funktion übergeben ???

Delphi-Quellcode:
function CalcAlle(MYList :TStringList): TSTringlist;
var SQLTEXT: string;
begin
  With Query do
  begin
    SQL.Clear;
    SQLTEXT := 'SELECT AG,SUM(Preis) AS GESPREIS' +
      ' FROM PosListe' +
      ' WHERE AG IN '+MyList+ 
      ' GROUP BY AG;
    SQL.Add(SQLText);
    Close;
    Open;
    Result := ????
  end
end;
Anschließend möchte ich das Ergebnis an eine TChart Komponente übergeben.
Wer kann mir bei dieser Aufgabenstellung helfen.
Bin noch kein Profi.

Luckie 6. Nov 2006 11:31

Re: Strings an eine Funktion übergeben
 
Was ist dein konkretes Problem?
a) Du weißt nicht, wie man eine Funktion schreibt, der man einen String als Parameter übergeben kann.
b) Du weißt nicht, wie man die Werte der ausgewählten Einträge einer Listbox ermittelt.
c) Keins von beiden und ich habe dich falsch verstanden. ;)

JonnyGuitar 6. Nov 2006 11:55

Re: Strings an eine Funktion übergeben
 
hi,

bin mir nicht ganz sicher was sql da erwartet, ich glaube (string1, string2, ...).
also müsstest du dir vorher schon den string passend zusammenbasteln, also in einer schleife über die stringlist
laufen und dann einen string an die funktion übergeben.

mfg Jonny

marabu 6. Nov 2006 12:21

Re: Strings an eine Funktion übergeben
 
Hi,

Jonny hat Recht - die Strings müssen als Literale noch in Quotes verpackt werden:

Delphi-Quellcode:
function GetSelectedStrings(lb: TListBox): String;
var
  i: Integer;
begin
  with TStringList.Create do
  try
    for i := 0 to Pred(lb.Count) do
      if lb.Selected[i] then
        Add(QuotedStr(lb.Items[i]));
    QuoteChar := #0;
    Result := DelimitedText;
  finally
    Free;
  end;
end;
Grüße vom marabu

needatip 6. Nov 2006 13:18

Re: Strings an eine Funktion übergeben
 
Ja super, danke.
jetzt muss ich noch versuchen die SQL Prozedur zusammenzubauen; vielleicht kannst du mir da noch ein wenig behilflich sein.
Hab so angefangen:

Delphi-Quellcode:
procedure Calc;
var SQLTEXT: string;
begin
  With Query do
  begin
    SQL.Clear;
    SQLTEXT := 'SELECT AG,SUM(Preis) AS GPREIS ' +
      'FROM PListe ' +
      'WHERE AG IN :AGListe '+
      'GROUP BY AG';
    SQL.Add(SQLText);
    ParamByName('AGListe').AsString := GetSelectedStrings(lb);
    Close;
    Open;
  end
end;
Funktioniert nicht !
Der Parameter :AGListe wird nicht ausgewertet.
Woran liegts ?

marabu 6. Nov 2006 13:48

Re: Strings an eine Funktion übergeben
 
Du kannst einen Parameter nicht an jeder beliebigen Stelle verwenden.

Delphi-Quellcode:
procedure Calc;
const
  SEL
    = 'SELECT AG, SUM(Preis) AS GPREIS '
    + 'FROM PListe '
    + 'WHERE AG IN (%s) '
    + 'GROUP BY AG'
    ;
begin
  with Query do
  begin
    SQL.Text := Format(SEL, [GetSelectedStrings(lb)]);
    Open;
  end
end;
Freundliche Grüße

needatip 6. Nov 2006 21:02

Re: Strings an eine Funktion übergeben
 
Ja wunderbar. Klappt jetzt alles super.
Vielen Dank nochmals.
:bounce2: :bounce2: :bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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