Announcement

Collapse
No announcement yet.

View oder Prozedur und Variable

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • View oder Prozedur und Variable

    Moin,

    ich suche nach einer eleganten Lösung für folgende Aufgabenstellung:

    Ich habe zum Beispiel eine Tabelle Lieferadressen von Kunden
    mit 20 Feldern.

    Eindeutigt sind hier KULA_A_ KUNDENNR + KULA_N_LFDNR
    Jetzt will ich diese Tabelle View oder prozedurgesteuert zurückgeben.

    Normal würde man sagen
    'Select * from Lieferanschriften where KULA_A_ KUNDENNR = :kunde'

    Jetzt würde ich aber gern in Abhängigkeit vom User hier direkt eine Suche einbauen. Also wenn der Benutzer einen Suchbegriff eingegeben hat dann
    soll da stehen:

    'Select * from Lieferanschriften where KULA_A_ KUNDENNR = :kunde
    and ( upper(KULA_A_NAME1) containing :such or upper(KULA_A_NAME2) containing :such)'


    Das erst mal zur Problemstellung. Sicher kann man die Abfrage schon in Delphi einsetzen aber ich wollte das ganze über View oder Prozedur steuern.


    Jetzt zum Problem:
    Ich bin faul !
    Wenn ich das Ganze über eine Prozedur mache, muss ich die 20 Felder als
    Ausgabeparameter anlegen. Weiterhin muss ich die Prozedur immer anpassen,
    wenn ich an der Tabelle was ändere. Is also der Stress vorprogrammiert.
    (mir geht es um eine generelle Lösung, nicht nur um die eine Tabelle...)

    Wenn das ganze über eine View laufen könnte (dort brauche ich ja nur select * zu machen), dann muss ich aber Variablen an die View übergeben.
    Im oberen Fall die Kundennummer und den Suchbegriff.
    und dann müsste ich in die Bedingungsklausel der View
    ein Konstukt wie unten reinbringen.

    where
    kula_a_kundnr = :kunde
    and
    iif(:such is null, True, upper(kula_a_name1) containing or :such upper(kula_a_name2) containing :such)


    oder so ähnlich.
    Geht aber net, weil ich keine Variablen rüberbringe.
    Arbeite aktuell noch mit dem FB 2.0 könnte aber auch endlich
    mal den 2.1 einsetzen... ( siehe Ausgangsproblem )

    Kann mich jemand auf die richtige Bahn führen ?

    Grüße und Danke im Voraus..

  • #2
    Hallo,

    > Jetzt würde ich aber gern in Abhängigkeit vom User hier direkt eine Suche einbauen <

    Das habe ich nicht verstanden ...

    Aber ich würde einfach den View so lassen
    und in der Abfrage dynamisch das where mit übergeben.
    Ein View ist ja auch nur eine (virtuelle) Tabelle.


    Heiko

    Comment


    • #3
      Hi,

      ich glaube, dass werder View noch Procedure dir in diesem Fall die Arbeit erleichtern können.
      Bei einer Suche setzt man IMHO bem "where" an.

      Eine View kann keine Variablen verarbeiten und verhält sich genauso wie ein simpler Select.

      Die meisten Zugriffskomponenten (FibPlus, IBO etc.) haben sogar die Möglichkeit, nur den WhereSQL anzupassen. Dann gibt es noch die Filter, die z.B. bei IBO auch Serverseitig verarbeitet werden.

      Ich würde an einer Methode zur Generierung des where - Statements entsprechend der Suchkriterien arbeiten (bzw. mache ich es bereits so)
      oder halt den Filter setzen.

      Frank

      Comment


      • #4
        Hallo Heiko und Frank,
        vielen Dank für Eure Antworten.

        @Heiko
        Ich suchte halt nach der eierlegenden Wollmilchsau
        und wollte beim Aufruf des View eine Variable übergeben.
        Wenn die leer ist dann solle der select * bringen
        und im anderen Fall die Where Klausel selber setzen.
        Damit wollte ich mir die ellenlangen Texte im select sql der
        Delphi-Komponente sparen. Das schwemmt auch die exe auf.


        Aber der Denkansatz war hier falsch.
        Der View ist auch gar nicht für solche Konstrukte gemacht.




        Grüße Jens

        Comment


        • #5
          Originally posted by delling View Post
          Damit wollte ich mir die ellenlangen Texte im select sql der
          Delphi-Komponente sparen. Das schwemmt auch die exe auf.
          Ich hole meine Statements aus diesem Grund aus der DB.
          In den Sourcen habe ich keine Statements.

          Beim Öffnen oder Prepare seh ich nach, ob SQLText leer ist.
          Wenn ja, dann lade ich über eine Stored Procedure das Statement.
          Hier lohnt es sich schon, ein weng Zeit zu investieren.

          Frank

          Comment

          Working...
          X