Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - wiederkehrende Prozeduren


Josef-B - Fr 11.07.03 16:20
Titel: wiederkehrende Prozeduren
Wie programmiert man eigentlich am besten Programmteile, die öfter gleich vorkommen

z.B. ne Select-Abfrage

Als eigene Prozeduren?

Ist es richtig, dass man bei diesen die Variablen und Objecte (z.B. IBQuery) extra deklarieren muss?

Oder über eine extra Unit?

Ich habe mal bei Doberenz/Kowalski gelesen, ist mir aber noch nicht richtig klar.

Danke


CenBells - Fr 11.07.03 17:40

Hallo,

ja, also ich habe meine anfragen in ein objekt gekapselt. Ein select statement, daß mir dann eine datenmenge zurückliefern soll sieht dann so aus.

Delphi-Quelltext
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:
function TCBDBLink.getQuery(ASQLStatement: String;
  ATransaction: TIBTransaction = nil;
  AErrorMessage: String = '';
  ASilent: Boolean = FALSE): TIBQuery;
var
  LTransaction: TIBTransaction;
begin
  try
    result := TIBQuery.Create(nil);
    result.Database := self;
    if not assigned(ATransaction) then begin
      LTransaction := getTransaction;
      result.Transaction :=  LTransaction;
    end
    else
      Result.Transaction := ATransaction;
    result.SQL.add(ASQLStatement);
    result.Prepare;
    result.Open;
  except on E: Exception do
    begin
      if not ASilent then
        MessageDlg(
          AErrorMessage + #13#10#13#10 + 
          'Folgende Meldung:'#13#10#13#10 +
          E.Message + #13#10#13#10 +
          ASQLStatement, mtError, [mbOk], 0);
      if LTransaction.InTransaction then
        LTransaction.Commit;
      if Assigned(LTransaction) then
        FreeAndNil(LTransaction);
      if assigned(result) then
        FreeAndNil(result);
    end;
  end;
end;

Ein aufruf sieht dann immer so aus


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure WasWeissIch;
var 
...
  LQuery: TIBQuery;
begin
  ...
  LQuery := GCBDBLink.getQuery('SELECT * FROM TABELLE_E');
  ...
end;


Gruß
KEn[/delphi]


grayfox - Fr 11.07.03 17:43

hallo josef!

ganz versteh ich dein anliegen nicht, aber wir werden uns schon zusammenraufen ;)

für selectabfragen, die du öfters benötigst, kannst ohne weiteres eigene proceduren einrichten.
meinst du sowas in der art?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
{$UNTESTED}
procedure TForm1.QueryShowAll(Query: TQuery);
begin
  with Query do begin
    Close;
    SQL.Clear;
    SQL.Add(Select * from tabelle);
    Open;
  end  
end;


gleich eine eigene unit dafür zu erstellen finde ich übertrieben

Zitat:

Ist es richtig, dass man bei diesen die Variablen und Objecte (z.B. IBQuery) extra deklarieren muss?

was meinst denn damit :?

mfg, stefan


Josef-B - Fr 11.07.03 18:49

Hallo Stefan,

ja genausowas meinte ich,

Wie wird denn jetzt deine Prozedur aufgerufen?


grayfox - Fr 11.07.03 19:36

hallo josef!

freut mich, dass ich es gleich auf anhieb erraten hab, was du meinst ;)

das ist aber nicht dein ernst, oder? *gg*
:lol:
Zitat:

Wie wird denn jetzt deine Prozedur aufgerufen?


du könntest die procedure zb mit

Delphi-Quelltext
1:
QueryShowAll(Name_Deiner_Query);                    

aufrufen. ich dachte, das geht eh aus dem procedurenamen hervor...

mfg, stefan