AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensätze zählen???
Thema durchsuchen
Ansicht
Themen-Optionen

Datensätze zählen???

Ein Thema von romber · begonnen am 18. Sep 2005 · letzter Beitrag vom 21. Sep 2005
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz