AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Variablen im String für .Filter-Eigenschaft von TADODataSet

Variablen im String für .Filter-Eigenschaft von TADODataSet

Ein Thema von fragile · begonnen am 4. Nov 2008 · letzter Beitrag vom 5. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#1

Variablen im String für .Filter-Eigenschaft von TADODataSet

  Alt 4. Nov 2008, 11:30
Datenbank: MS SQL Server • Version: 2005 • Zugriff über: ADO
Hi,
ich möchte mir dynamisch einen Filter für Daten, die ich über eine TADODataSet-Komponente hole, generieren.
Das Format für diesen Filterstring ist ja die SQL-Syntax, also ein String mit Teilstrings in Hochkomata eingeschlossen.
Wie erzeuge ich aus einem Rückgabe-String einen String der Form '<RückgabeString>', also setze diesen nochmal explizit in Hochkomata ?

Warum dieser Post in Datenbanken ?
Ich suche derzeit nach einer Möglichkeit, mit einer Gridkomponente Daten gefilter auszugeben. Da ich keine Lösung gefunden habe (bisher),
manipuliere ich zur Laufzeit die TADODataSource mit dem Filterargument. Wenn jemand eine elegantere Lösung weiß, immer her damit .

Grundsätzliche Aufgabenstellung: Erstelle eine Datenmaske, die neben normalen TDBEdit-Feldern für firmenname etc. eine Grid-Komponente enthält,
die ein Kontaktdaten-"Array" abbildet. (Also eine Tabelle der Form : Email geschäftlich - <wert1> | Email privat - <wert2> usw.)
Kontaktdaten werden in 2 speziellen Tabellen "erzeugt": Eine Tabelle mit der Firmennummer als FK und den Feldern Kontaktart_ID und Kontaktdetail.
Kontaktart_ID wird dann in einer 2. Tabelle mit einer Bezeichnung aufgelöst...

Bin für Tipps und Hilfe dankbar, zwar Datenbank-mäßig recht fit, aber Delphi-Neuling.

Gruß
F.
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 11:38
Ich würde mir mal den Format-Befehl von Delphi anschauen. Damit sollte das von Dir gewünschte zu realisieren sein.
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#3

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 12:14
Jo danke,
das Format-Thema hab ich gelöst - zum Grid-Filter-Thema irgendwelche Ideen ?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 12:35
Hallo,

bin mir nicht ganz sicher, ob ich Deine Gridfragestellung verstanden habe:

Du hast Daten in mehreren Tabellen, die Du zusammen anzeigen möchtest?

sowas:select * from a,b where a.id = b.id Nimm Dir dafür eine TAdoQuery, versorge sie mit dem für Dich korrekten SQL und öffne sie.
Die TAdoQuery verbindest Du mit einem TDataSource und dieses mit Deinem TDBGrid.
Damit sollten die von Dir gewünschten Daten in dem Grid zu sehen sein.

Die TAdoQuery hat übrigens auch die Filterattribute, hier könntest Du wahrscheinlich per SQL "alle" Daten laden und per Filter analog zum TAdoDataSet auf den gewünschten Teilbereich einschränken.
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#5

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 13:03
Mein Grundkonstrukt auf Datenbankebene sieht wie folgt aus :

Ich fasse die relevanten Felder für z.B. die Firmen-Eingabemaske mittels JOINs in einer View zusammen (View_Firmensicht).
Dieser enthält eine Menge fast identischer Datensätze, bei denen nur die Felder Kontaktdaten_ID und Kontaktdetails abweichen.

Das Grid soll jetzt genau diese bis auf die beiden Felder zusammengehörigen Datensätze zu einem bestimmten Matchcode anzeigen.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 13:22
Hallo,

sorry, das verstehe ich nicht:
Zitat von fragile:
Mein Grundkonstrukt auf Datenbankebene sieht wie folgt aus :

Ich fasse die relevanten Felder für z.B. die Firmen-Eingabemaske mittels JOINs in einer View zusammen (View_Firmensicht).
Dieser enthält eine Menge fast identischer Datensätze, bei denen nur die Felder Kontaktdaten_ID und Kontaktdetails abweichen.

Das Grid soll jetzt genau diese bis auf die beiden Felder zusammengehörigen Datensätze zu einem bestimmten Matchcode anzeigen.
Du hast also in Deinem Dataset alle Daten zusammen, die Du brauchst?
Im Grid soll' aber nur eine Teilmenge angezeigt werden. Diese Teilmenge besteht aus mehreren Zeilen und soll nicht alle Spalten des Views enthalten?

Verbinde in der Entwicklungsumgebung Dein Dataset mit einer Datasource und diese mit dem DBGrid.
Öffne den Dataset (Active = True) im Objektinspektor.
Nun sollten im DBGrid alle Spalten der Ergebnismenge zu sehen sein.
Mache einen Doppelklick auf das DBGrid. Es erscheint ein leerer Propertyeditor.
Oben ist der dritte Button von links aktiviert.
Klicke drauf.
Es sollte nun eine Liste der zur verfügungstehenden Spalten erscheinen.
Entferne alle die Spalten, die Du im Programm nicht sehen möchtest.
Schließe den Propertyeditor und schließe das Dataset.

Hoffentlich liege ich jetzt mit meiner Spekulation nicht vollständig daneben.
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#7

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 13:39
Hehe,
ja ich weiß, ist nicht ganz so trivial - ich möchte nicht einzelne Spalten ausblenden, sondern quasi einzelne Reihen ...

Grundsätzlich :

Wie oben schon beschrieben habe ich eine ganz normale Firmendatentabelle, die aber zu 3 anderen Tabellen in Beziehung steht.
Eine Beziehung , in der der Firmentabellen-Datensatz als Fremdschlüssel auftaucht, ist die Tabelle "Kontaktdetails".

Ich kanns nicht anders erklaeren, ich habe halt eine dynamisch wachsende Struktur der Kontaktdaten "Email, Telefon,Telefax" etc. erzeugt.
Dies eben mit einem Auslagern der entsprechenden Datenfelder der Firmentabelle in eigene Tabellen - übliche Vorgehensweise denke ich.

Auf Datenbank-Ebene habe ich einen View, der mir dieses Konstrukt wieder zusammenführt, sprich die FK-Felder entsprechend aufschlüsselt, so daß ein Datensatz
wie folgt aussieht : <Firmentabelle_Matchcode>,<Firmentabelle_Name>,... ,<Kontaktart>,<Kontaktdetail>.
Soweit so gut.

Hat eine Firma also z.b. Email, Telefax, Telefon, Handynrn stehen in diesem View mehrere Datensätze zur gleichen Firma, die sich nur in den Feldern "Kontaktart" und "Kontaktdetail" unterscheiden, also:

Müller GmbH , Müller ,.....,Email 1,fff@ddd.de
Müller GmbH , Müller ,.....,Telefon,02293485857
Müller GmbH , Müller ,.....,Telefax, 02293485858

Soweit klar ? Diese Struktur möchte ich in Delphi in eine Formulartab zur Anzeige bringen....
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 13:54
Hallo,

meiner Meinung nach, sollte das mit dem von mir beschriebenen Weg funktionieren. Du nimmst halt eben keine Spalten weg.

Oder bin ich hier immer noch auf dem falschen Dampfer?

Malen wir mal virtuell eine Maske.

Links sind die Detailfelder zu Deinem Datensatz Müller zu sehen, alles DBEdit's ....
Irgendwo ist ein DBNavigator, mit dem man zum nächsten Satz kommt.
Rechts ist das DBGrid mit den Kontaktdetails.

In Deiner Ergebnismenge kommt Müller dreimal vor, weil er halt drei Kontaktdetails hat.

Im Grid sieht's Du aber alles was vor und nach Müller kommt, der kleine schwarze Pfeil links am Grid steht halt auf dem Detail, das als erstes zum Müller passt.

Letztlich brauchst Du 'nen Filter auf die Kontaktdetails von Müller. Also nichts weiter als 'ne klassische 1:n-Beziehung, nur mit dem Haken, dass alle Daten in einer Ergebnismenge hintereinander stehen.

Ach, das wird mir zu kompliziert. Häng doch bitte mal 'nen Screenshot von Deiner Maske hier rein, sonst reden wir noch Jahre aneinander vorbei.
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#9

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 15:13
Die Maske ist genauso, wie von dir beschrieben.
Und ja ich brauche im Grid einen Filter - wie mach ich das am besten ?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

Re: Variablen im String für .Filter-Eigenschaft von TADOData

  Alt 4. Nov 2008, 15:27
Hallo,

Du musst der Datasource des DBGrids einen Filter verpassen, vermutlich sowas:

Delphi-Quellcode:
DataSource.Filtered := False;
DataSource.Filter := 'Kontaktdaten_ID = müllers_id';
DataSource.Filtered := True;
Wenn Du allerdings die Daten für das Grid und für die "restliche" Anzeige in einer Ergebnismenge hast, hast Du hier vermutlich ein Problem.

Solltest Du die Daten (so wie ich vermute) in einer Ergebnismenge haben, so löse das bitte wieder auf.
Arbeite mit zwei Ergebnismengen, eine für Müllers Details und eine für Müllers Kontakte.

Wenn Du nun in der Detailtabelle einen Satz vor oder zurück gehst, setzt Du für die Kontaktdaten einen neuen Filter auf die entsprechende ID. Dafür kannst Du das AfterScroll-Ereignis der Detailmenge nutzen. Das Ereignis wird nach jeder Änderung des Datensatzzeigers ausgelöst.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz