#1 SQL´s in eigener Unit von Klaus 16.05.2010 12:17

Ich habe die SQL`s in einer eigenen Unit abgelegt. Darin eine Function die mir das Ergebnis eines sql in eine TStringList legen soll.
Probleme habe ich mit Result. Wie müsste "result :=" aussehen?
Ich kann die Funktion (trotzt einbinden in Uses) auch nicht aus einer anderen Unit aufrufen. Was habe ich da übersehen?
Hier der Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
unit USQL;
 
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Verbindung, Menus, DB, ADODB, StdCtrls, DBCtrls, Mask;
 
type
TKlaus = class
 
private
public
function gebeLand(aLand: string): string;
 
end;
 

const
sql_Land_Waehrung = 'SELECT DISTINCT A.ID, A.Land, B.Waehrung FROM Laender A, Waehrung B WHERE A.ID = B.ID_Land ORDER BY A.LAND';
sql_Laender = 'SELECT DISTINCT Land FROM Laender GROUP BY LAND';
 

implementation
 
{ TKlaus }
 
function TKlaus.gebeLand(aLand: string): string;
 
var
i, x: integer;
lst_alles: TStringList;
q1: TADOQuery;
 
begin
result := '';
Verbindung.DataModule1.OpenDatabase;
q1 := TADOQuery.Create(Application);
q1.Connection := Verbindung.DataModule1.ADOConnection1;
q1.SQL.Add(sql_Land_Waehrung);
lst_alles := TStringList.Create();
 
with q1 do
begin
for i := 0 to q1.SQL.Count - 1 do
q1.Open;
q1.First;
while not q1.eof do
begin
for x := 0 to lst_alles.Count - 1 do
lst_alles.Add(q1.FieldbyName('Land').AsString);
 
Next;
 
result := (q1.FieldbyName('Land').AsString);
end;
 
end;
 
FreeAndNil(q1);
FreeAndNil(lst_alles);
Verbindung.DataModule1.CloseDatabase;
end;
end.
 

#2 RE: SQL´s in eigener Unit von Justice59 25.05.2010 12:18

Hallo Klaus,

deine Fragen sind leider nicht mit ja oder nein zu beantworten (wie fast immer in Delphi ).

Zum einen fällt mir auf, dass du nach dem "with q1 do begin " eine Schleife für den SQL.count absetzt.
Wofür soll das gut sein?

while .. ergebnis not(EOF) lässt dich doch alle Resultate ablaufen. Hm.

Und dann noch " for x := 0 to lst_alles.Count - 1 do lst_alles.Add(q1.FieldbyName('Land').AsString);" ist so nicht richtig.

Wenn du mit not(EOF) doch schon feststellst, dass noch Ergebnisse kommen, dann schreib doch gleich ...
with ... do
begin
q1.add(sql_land_waehrung);
open;
while not(eof) do
begin
lst_alles.add(FieldByName('Land').asstring + ' - ' + FieldByName('Waehrung').asstring);
next;
end;
close;
//... als result hast du alle aus dem SQL gewonnenen Ergebnisse in deiner Listbox stehen.
free;
end;

Das Problem, eine function oder procedure aus einer anderen Unit aufzurufen, sollte über das Schoeffenmodul doch schon erkennbar sein.

Unit A (Ablauf) .............................. Unit B (funcs und procs, classes etc.)
uses B function tu_was: Boolean;
procedure tform1.ich_brauch_was; begin teste_x; result := true else false;
begin end;
if (tu_was) then prima else doof;
end;

War das verständlich genug?

LG
Rainer

#3 RE: SQL´s in eigener Unit von Klaus 25.05.2010 18:57

War sehr verständlich. So wie Du es mir erklärt hast, ist das ganze ja auch loglisch.
Ich habe eh einen Denkfehler, da ich es nicht hinkriege, das Ergebnis aus einerr StringList in DBcomboBoxen anzuzeigen.
Vermutlich funktioniert das ganze nur in einer Listbox.

Klaus

#4 RE: SQL´s in eigener Unit von Justice59 27.05.2010 18:27

Zitat von Klaus
War sehr verständlich. So wie Du es mir erklärt hast, ist das ganze ja auch loglisch.
Ich habe eh einen Denkfehler, da ich es nicht hinkriege, das Ergebnis aus einerr StringList in DBcomboBoxen anzuzeigen.
Vermutlich funktioniert das ganze nur in einer Listbox.

Klaus





Wie meinst du Das jetzt wieder?
Aus einer StringList in eine Combobox? Warum einfach, wenns auch schwierig geht; ts, ts, ts.

Xobor Ein Kostenloses Forum | Einfach ein Forum erstellen
Datenschutz