Thema: Delphi Datensätze zählen???

Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#9

Re: Datensätze zählen???

  Alt 19. Sep 2005, 04:02
Hallo Romber,

ich denke, das eine kleine Stored Procedure dein Problem am besten lösen sollte.
Du kannst deine Abfrage mit den "statistischen" Ausgabeparameter sauber kombinieren.


kleines Beispiel:


Erstelle dir auf dem SQL-Server eine SP ...

SQL-Code:
CREATE PROCEDURE proc_RechnungsSuche
  @Suchbegriff VARCHAR(50) = NULL,
  @stat_Bezahlt INT = 0 OUTPUT,
  @stat_Offen INT = 0 OUTPUT,
  @stat_Storniert INT = 0 OUTPUT
AS
BEGIN

  IF @Suchbegriff IS NOT NULL
  BEGIN
    -- Suchbegriff normieren
    SET @Suchbegriff = LOWER(@Suchbegriff)

    -- Datensätze suchen und zählen
    SET NOCOUNT ON

    SELECT @stat_Bezahlt=
            SUM( CASE WHEN LOWER(Status) = 'b-- Counter >> bezahlt
                      THEN 1
                      ELSE 0
                 END
               )
           ,@stat_Offen=
            SUM( CASE WHEN LOWER(Status) = 'o-- Counter >> offen
                      THEN 1
                      ELSE 0
                 END
               )
           ,@stat_Storniert=
           SUM( CASE WHEN LOWER(Status) = 's-- Counter >> storniert
                      THEN 1
                      ELSE 0
                 END
               )
    FROM VERWALTUNG
    WHERE (LOWER(Name) = @Suchbegriff) -- LIKE %@Suchbegriff% geht auch
         OR (LOWER(produkt) = @Suchbegriff) -- ist aber weniger performant
         OR (LOWER(preis) = @Suchbegriff)
         OR (LOWER(status) = @Suchbegriff)

    -- Ausgabeparameter >> NULL ersetzen
    IF @stat_Bezahlt IS NULL SET @stat_Bezahlt=0
    IF @stat_Offen IS NULL SET @stat_Offen=0
    IF @stat_Storniert IS NULL SET @stat_Storniert=0


    -- Datensätze suchen und ausgeben
    SET NOCOUNT OFF

    SELECT Name
           ,Produkt
           ,Preis
           ,Status
    FROM VERWALTUNG
    WHERE (LOWER(Name) = @Suchbegriff) -- LIKE %@Suchbegriff% geht auch
         OR (LOWER(produkt) = @Suchbegriff) -- ist aber weniger performant
         OR (LOWER(preis) = @Suchbegriff)
         OR (LOWER(status) = @Suchbegriff)

   -- Fertig.
   -- Die SP liefert die gewünschten Suchergebnisse und
   -- die statistischen Werte in Form von Ausgabeparametern

  END
  ELSE BEGIN
    -- Fehlermeldung falls kein Parameter übergeben wurde
    RAISERROR('Diese Procedure erfordert einen Suchbegriff !',16,1,'Parameter fehlerhaft')
  END

END
Aufruf aus Delphi:

Nimm dir eine TADoStoredProc und verbinde diese mit deiner AdoConnection und mit einer Datasource (für das Grid)

Delphi-Quellcode:
Procedure TForm1.Auftragssuche(Suchbegriff:String);
begin

{ SQL INFO
  CREATE PROCEDURE proc_RechnungsSuche
    @Suchbegriff      VARCHAR(50) = NULL,
    @stat_Bezahlt      INT = 0 OUTPUT,
    @stat_Offen        INT = 0 OUTPUT,
    @stat_Storniert    INT = 0 OUTPUT
  AS
}


  if Suchbegriff = 'then exit;

  // SP schließen
  AdoSP.Close;
  // SP Zuweisen
  AdoSP.ProcedureName:='proc_RechnungsSuche';
  // Parameter holen
  AdoSP.Parameters.Refresh;
  // Eingabeparameter setzen
  // Ausgabeparameter müssen nicht initialisiert werden da auf dem SQL-Server Standardwert "0" gesetzt wurde
  AdoSP.Parameters[1]:=Suchbegriff;
  // SP Öffnen
  AdoSP.Open;
  // Jetzt die Ausgabeparameter holen und in der Statusbar anzeigen
  Statusbar.Panels[0].text:= 'Sum: bezahlt : ' + inttostr(AdoSP.Parameters[2]);
  Statusbar.Panels[1].text:= 'Sum: offen : ' + inttostr(AdoSP.Parameters[3]);
  Statusbar.Panels[2].text:= 'Sum: storniert : ' + inttostr(AdoSP.Parameters[4]);

  // Fertig


end;
Schöne Grüße,
Jens
  Mit Zitat antworten Zitat