Announcement

Collapse
No announcement yet.

DBGrid mit Detaildaten

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

  • DBGrid mit Detaildaten

    Hallo,

    ich habe ein kleines Problemchen und weiß nicht wie ich das mit Delphi lösen soll:

    Es gibt zwei Access-Tabellen: Eine enthält einen kleinen Kundenstamm, eine andere die Auftragseingänge. Nun möchte ich in einem DBGrid zu den Auftragseingängen der Kunden auch die Kundennamen aus dem Kundenstamm anzeigen. Eine SQL-Abfrage geht leider nicht weil dann automatisch beim löschen eines Auftrages auch der Kunde aus dem Kundenstamm gelöscht wird.

    Ich habe sehr wenig Erfahrung mit Datenbanken unter Delphi.

    Vielleicht kann mir jemand auf die Sprünge helfen. Über einen Tipp wäre ich sehr Dankbar

    Viele Grüße

    Christoph Krieg

  • #2
    Vielleicht hilft Dir ja schon die Aussage, dass Selects über mehrere Tabellen grundsätzlich schreibgeschützt sind. Brauchst also keine Angst zu haben, etwas versehentlich wegzulöschen.

    Grüße Joche

    Comment


    • #3
      Hallo Jochen,

      tausend Dank für Deinen Tipp. Aber leider ist es tatsächlich so dass beim Löschen eines Datensatzes des dBGrids die Datensätze der "referenzierten" Tabellen auch gelöscht werden. Normalerweise programmieren ich SQL unter einem PPS-System. Da wird aber auch, im Gegensatz zu Delphi, keine eigenständige Datenmenge erzeugt sondern quasi ein großer Join. Deshalb tue ich mich bei SQL unter Delhpi auch so schwer.

      Aber irgndwie muß es doch gehen dass ich in einem DBGrid einen join als Summe aller Datenfelder der ausgewähten Tabellen darstellen kann?????

      Vielleicht hast Du ja noch eine Idee!!!!

      Vielen Dank nochmal. Viele Grüße

      Christop

      Comment


      • #4
        Hallo Christoph,

        mit welchen Komponenten greifst Du auf die Datenbank zu?

        Klingt mir fast, als würdest Du irgendwelche xxxTable-Komponenten verwenden.

        Grüße Joche

        Comment


        • #5
          Hallo Christoph,
          kannst Du mal die SQL-Query bekannt geben.
          Ich habe Dein Problem eben mal nachgestellt und konnte es nicht rekonstruieren.
          Im Übrigen ist es kein SQL-Problem, sondern wäre, wenn es ein Problem wäre, ein Access-Problem - aber siehe oben -

          Comment


          • #6
            Hallo Norbert,

            ich habe das nochmal nachgestellt:
            Ich habe eine Datenbank unter Access2000 angelegt mit zwei Tabellen:
            Einen Mitarbeiterstamm (Tabelle: Mitarbeiter) und
            einen Produktionsstundenstamm (Tabelle: Produktionsstunden)
            (Vorher: Kunden und Auftragseingänge. Ist aber das gleiche Problem!)

            Nun habe ich eine ADOQuery-Komponente, DataSouce, DBGrid und DBNavigater angelegt.
            SQL-Statement in ADOQuery:
            select * from Produktionsstunden, Mitarbeiter where Produktionsstunden.PNR = Mitarbeiter.PNR

            (Mitarbeiter.PNR und Produktionsstunden.PNR sind die Personalnummern)

            DataSource.DataSet = ADOQuery
            DBGrid.DataSource = DataSource
            DBNavigator.DataSource = DataSource

            Nun erhalte ich in meinem DBGrid sämtliche Datenfelder wie ich es wollte. Lösche ich aber jetzt über den Navigator einen Datensatz heraus wird nicht nur der Datensatz in "Produktionsstunden" sondern auch der Datensatz in "Mitarbeiter" gelöscht. Und das möchte ich nicht.

            Ich kenne das eigentlich nur so dass beim löschen eines Datensatzes über ein SQL-Statement die zu löschende Tabelle explizit über das Statement "for update" gekennzeichnet werden soll.

            Bei Delphi bin ich wirklich ratlos! Was mache ich falsch?

            Tausend Dank für Eure Mühe.

            Christop

            Comment


            • #7
              Hallo Cristoph,

              in Andreas Koschs schlauem Buch liest sich folgendes:

              In der Erreignisbehandlungsmethode für das AfterOpen-Ereignis von TADODataSet:

              ADODataSet1.Properties['Unique Table'].Value := 'Tabelle1';

              wobei Tabelle1 diejenige ist, aus der ausschließlich gelöscht werden soll.

              So soll dann die andere Tabelle aus dem join verschont werden. Habe ich allerdings bis jetzt nie ausprobieren müssen.

              Grüße

              Juli

              Comment


              • #8
                Vielen herzlichen Dank Julia,
                und auch alle Anderen die mir geholfen haben,

                das ist die Lösung! Jetzt werden ausschließlich die Datensätze der richtigen Tabelle gelöscht! Super!

                Vielen Dank

                Viele Grüße

                Christop

                Comment

                Working...
                X