AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Aufgaben mit LiveBindings und Delphi-DB's erledigen

Ein Thema von Harry Stahl · begonnen am 2. Mai 2016 · letzter Beitrag vom 10. Mai 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#1

Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 2. Mai 2016, 17:59
Ich habe jetzt mal ein paar Informationen im Delphi DOC-Wiki zu LiveBindings gelesen. Da scheinen mehr Möglichkeiten drin zu stecken, als ursprünglich von mir vermutet.

Daher meine Frage: Ist es möglich, in einem VCL-Projekt mit LiveBindings und einer (welcher?) Delphi-Datenbank eine einfache Datei mit 10 Feldern ohne viel Aufwand zu verwalten und dabei die folgenden Anforderungen zu erfüllen:

* Die Liste sollte bei Bedarf sortierbar sein, aber auch ohne Sortierung darstellbar sein
* Feldinhalte sollten mit unterschiedlichen Farben in der Liste angezeigt werden können
* Datensätze sollten gefiltert werden können und dann nur die gefilterten Sätze in der Liste angezeigt werden
* Es sollte ohne großen Aufwand eine andere Datenbank-Datei (Standard / User) gewählt werden können, gleiche Felder
* Es sollten Icons in den Spalten darstellbar sein
* Datensätze sollten in der nicht sortierten Liste eine Zeile nach oben oder eine nach unten verschiebbar sein
* Datensätze sollten in der nicht sortierten Liste per Drag und Drop verschiebbar sein.
* Wäre toll, wenn die Datenbank ohne Feldlängenbegrenzung auskommt und ich mich nicht um so was kümmern müsste
* Ein Datensatz sollte mit einem eigenständigen Dialog erzeugt / bearbeitet werden können

Ich wäre dankbar für generelle Aussagen, ob das so mit LiveBindings (incl. Expressions) RELATIV EINFACH realisierbar wäre und wenn Ja, welche Datenbank zu empfehlen wäre (bitte möglichst eine einfache, ich bin da völlig ahnungslos mit Delphi-DB's - mir steht Delphi-Enterprise 10.1 zur Verfügung).

Die Funktionalität ist derzeit im Programm mit einer Alternativlösung (einfache TStringlist, Felder getrennt durch Sonderzeichen) schon vorhanden (zur Verdeutlichung 2 anliegende Screenshots). Mich nervt aber, dass für so relativ einfache Aufgaben - Verwaltung einer einfachen Liste - (immer wieder mal) so ein großer Aufwand betrieben werden muss (Source-Zeilen in der Unit, die das bei mir erledigt, hat ca. 600 Zeilen). Daher würde ich hier gerne als "Blaupause" mal eine Umstellung auf LiveBindings testen.

Bevor ich mich jedoch an die Arbeit mache, wäre ich über einige Hinweise oder Ratschläge von Euch dankbar.
Miniaturansicht angehängter Grafiken
grid-lb.jpg   edit-dlg.jpg  
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 3. Mai 2016, 11:28
Also ich denke nicht das Du mit den Livebindings da wirklich "schnell" zum Ziel kommst. Mein Eindruck ist eher das die LiveBindigs VCL stiefmütterlich behandelt werden. Das ganze Konzept ist sh..... (meine Meinung).
Zur Datenbank schaue dir sqlite an dass sollte Deinen Anforderungen noch am nächsten kommen.
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 3. Mai 2016, 12:28
Es gab schon einige solche Versuche. Zuletzt hier: http://www.delphipraxis.net/188754-b...iskussion.html

Ist aber meiner Kenntnis nach noch nichts nachhaltiges draus entstanden.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 3. Mai 2016, 13:00
Da die VCL spezielle DB Controls hat, würde ich das gerade bei einer Datenbank/Dataset als Backend jederzeit irgendeiner Binding Lösung bevorzugen.
Bei FMX sieht das (leider) anders aus, da es dort keine speziellen DB Controls gibt, die mit einer TDataSource zusammen arbeiten.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 3. Mai 2016, 16:07
"Wenn man's kann ist alles einfach."

Für mich sehen Deine beiden Beispiele wie eine klassische DB-Anwendung aus.
Ich würde da keinen Gedanken an LiveBindings oder DB-Controls verschwenden.
Wenn ich Dich richtig verstanden habe und die richtigen Schlüsse ziehe, dann hast Du z.Zt eine Stringlist, die Du in einer Listview anzeigst. (OK da gibt's noch etwas zum sortieren und ..)
Wahrscheinlich wird Deine Stringlist aus einer Datei gefüllt. Diese Datei würde ich durch eine Query und eine Firebird-DB ersetzen. Sprich Filtern und Sortieren z.B. wird in der SQL-Abfrage erledigt, und die Query schreibt die entsprechenden Ergebnisse in eine Stringlist. Diese wird wie gehabt angezeigt. Kombinierst Du die Query noch mit einer Connection ist der Wechsel der DB eine Kleinigkeit (ist aber ach so kein Hexenwerk!)
Was die DB angeht, bevorzuge ich Firebird, aber auch alle anderen lokalen DBs sollten erst einmal genügen. Und der Austausch sollte in zwei Schritten erledigt sein:
a) Konvertieren/Übertragen der Daten
b) Ändern der Connection-Parameter
uU. ist noch ein dritter Schritt notwendig
c) Anpassen der SQL-Texte

Und wenn Du das alles noch in ein DataModule auslagerst hast Du eine richtig pflegeleichte Anwendung.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 3. Mai 2016, 19:40
Erst mal vielen Dank für Eure Antworten.

Habe mir mal das ClientDataset in Verbindung mit dem DBGrid angesehen, ich denke, das erfüllt bestens die gestellte Aufaben (Sortierung, Filterung). Mit meiner bisherige StringList befüllte ich das ClientDataset, wenn der Bearbeitungsdialog gestartet wird. Dann kann ich Filtern, sortieren, bearbeiten usw. und nach OK übertrage ich den Inhalt aus dem ClientDataset wieder in meine Stringliste. Einfache Sache und ich kann die bestehende Dateistruktur beibehalten.

Per LiveBindings habe ich eine Edit.Text Eigenschaft mit der Filter-Eigenschaft aus dem ClientDataset verbunden (über eine Expression), so dass ich hier ganz einfach über die Eingabe von Suchtext in das Editfeld filtern kann.

Was mir dabei auffällt:

* Nach dem Setzen des Filters aktualisiert sich das DBGrid erst, wenn ich einmal darauf klicke. Gibt einen Befehl, der das sofort nach Setzen des Filters macht?

* Wenn das Programm mit Styles arbeitet, werden Farben im DBGrid, die man über den Spalten-Editor setzt (den kannte ich noch gar nicht), nicht berücksichtigt, AUCH DANN, wenn man über StyleElements den entsprechenden Ausschluss vornimmt. Ist das ein bekannter Bug und wie kann man das umgehen?

* Wenn ich filtere, kann ich z.B. mit NameOFField = 'TTab*' mir einen gesuchten Eintrag anzeigen lassen. Gibt es eine Möglichkeit, direkt in allen Feldern zu suchen ('*' hat nicht funktioniert).

Wie gesagt, die ganze Datenbankarbeit mit den typischen Delphi-Datenbank-Komponenten ist neu für mich. Aber die Funktionalität von ClientDataset und DBGrid finde ich schon toll. Damit kann man viel Handarbeit ersparen.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 4. Mai 2016, 09:34
Wie setzt du denn den Filter? Ich mach das immer wie folgt und das Grid aktualisiert sich ohne das ich reinklicken muss:

Delphi-Quellcode:
//ggf.: ClientDataset.Filtered:=false;
ClientDataset.Filter:='irgendwas';
ClientDataset.Filtered:=true;

Bei deinem dritten Sternchen, hab ich die Intention nicht ganz verstanden, aber du kannst den Filterstring ja beliebeig formulieren, fast wie eine Where-Bedingung in einem SQL-Statement.

NameOFField1 = 'TTab*' Or NameOFField2 = 'TTab*' or NameOFField3 = 'TTab*'
Ralph

Geändert von Jumpy ( 4. Mai 2016 um 09:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 4. Mai 2016, 19:32
Wie setzt du denn den Filter? Ich mach das immer wie folgt und das Grid aktualisiert sich ohne das ich reinklicken muss:

Delphi-Quellcode:
//ggf.: ClientDataset.Filtered:=false;
ClientDataset.Filter:='irgendwas';
ClientDataset.Filtered:=true;
Ja mach ich jetzt auch so. Dann funktioniert das auch. Allerdings reagiere ich nun direkt auf das OnChange-Event des Edits, zuvor hatte ich den Edit.Text über LiveBindings mit einer Expression verbunden, vielleicht gibt es da ein Problem.

Bei deinem dritten Sternchen, hab ich die Intention nicht ganz verstanden, aber du kannst den Filterstring ja beliebeig formulieren, fast wie eine Where-Bedingung in einem SQL-Statement.

NameOFField1 = 'TTab*' Or NameOFField2 = 'TTab*' or NameOFField3 = 'TTab*'
Um mehrere Felder zu berücksichten, muss ich

Delphi-Quellcode:

qf := QuotedStr (bnFind.Text+'*');

cds1.Filter := 'QuellDaten = ' + qf + ' OR ' +
               'ZielDaten = ' + qf + ' OR ' +
               'AusnahmeKomp = ' + qf + ' OR ' +
               'Wert = ' + qf;
eingeben.

Schön wäre es, wenn es ein "SearchInAnyField"-Platzhalter gäbe, so das dass ich nicht jedes einzelne Feld hier angeben muss.

Weiterer Punkt: Ist hier tatsächlich die Beschränkung gegeben, dass man nur nach

grid*

filtern kann,

aber nicht nach

*grid*?

Mit der ersten Variante wird z.B. bei der Eingabe von "grid" der gesuchte Text nicht gefunden, wenn der mit "TGrid" beginnt, die zweite Variante wird aber anscheinend nicht unterstützt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 4. Mai 2016, 20:04
@Harry

Du kennst die Methode Delphi-Referenz durchsuchenTDataSet.OnFilterRecord?

Das kombiniert mit dem Bei Google suchenSpecification Pattern macht es sehr schlank
Delphi-Quellcode:
procedure TWhatever.DataSetOnFilterRecord( Dataset: TDataSet; var Accept: Boolean );
begin
  Accept := CurrentFilter.IsSatisfiedBy( DataSet );
end;
Delphi-Quellcode:
DataSetSpecifications = class
  class function IsInAnyField( aStr: string ): ISpecification<TDataSet>;
  // usw.
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 4. Mai 2016, 20:33
Danke für den Hinweis. Nein, kannte ich noch nicht (mal kurz gesehen).

Aber verstehe ich das richtig, hier wird mir eine Datenmenge als Ergebnis meines Filters gegeben, die ich nun akzeptieren kann oder nicht.

D.h. ich kann nur weiter einschränken, aber nicht den Filter erweitern, oder?

Ich möchte erreichen, dass statt "TGrid" auch schon "grid" akzeptiert wird als ein valides Ergebnis des Filters, wenn ich z.B. auf ein TStringGrid treffe.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:56 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