Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBGrid und Touchscreen (https://www.delphipraxis.net/155207-dbgrid-und-touchscreen.html)

Sir Rufo 13. Okt 2010 16:07

AW: DBGrid und Touchscreen
 
Hmmm, bevor ich da sonn Aufstand um das Zählen und Positionsbestimmen machen würde, packe ich den ganzen Kram in eine Klasse TBon mit einer TBonPosList

Die Klasse macht dann den ganzen Kladeradatsch (völlig ohne DB-Zugriffe - ja bis auf die Abfrage der Stammdaten) und zeichne das in ein ListView rein (oder wo auch immer)

noisy_master 13. Okt 2010 16:49

AW: DBGrid und Touchscreen
 
Zitat:

Zitat von GHorn (Beitrag 1055617)
Performanz hängt von mehr als nur dem Scrollen ansich ab.
Da spielt die verbaute Hardware auch eine Rolle. Außerdem
scrollst du ja nicht durch 100e DS. Immer nur einen Schritt
vor und einen zurück und umgekehrt. :)
Aber das musst du selber testen.

Alles soweit gut, eingebaut, getestet und macht (fast) alles was ich will.

Dein Code muss noch ein wenig modifiziert werden, damit es auch vollständig funktioniert:
DBGrid.DataSource.DataSet.DisableControls;
// BOF:
DBGrid.DataSource.DataSet.Prior;
Btn_UP.Enabled := (NOT DBGrid.DataSource.DataSet.BOF);
>> if Btn_UP.Enabled then
DBGrid.DataSource.DataSet.Next;
// EOF:
DBGrid.DataSource.DataSet.Next;
Btn_Down.Enabled := (NOT DBGrid.DataSource.DataSet.EOF);
>> if Btn_Down.Enabled then
DBGrid.DataSource.DataSet.Prior;
DBGrid.DataSource.DataSet.EnableControls;


Tja, bleibt immer noch das Ding mit der RecordNo...

Bummi 13. Okt 2010 16:52

AW: DBGrid und Touchscreen
 
geht jetzt OT aber vielleicht solltest Du die BDE doch mal kicken und das ganz aus MS-SQLServer, Access o.ä. umstellen und per ADO weitermachen.

noisy_master 13. Okt 2010 16:54

AW: DBGrid und Touchscreen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055622)
Hmmm, bevor ich da sonn Aufstand um das Zählen und Positionsbestimmen machen würde, packe ich den ganzen Kram in eine Klasse TBon mit einer TBonPosList

Die Klasse macht dann den ganzen Kladeradatsch (völlig ohne DB-Zugriffe - ja bis auf die Abfrage der Stammdaten) und zeichne das in ein ListView rein (oder wo auch immer)

Auch das klingt sehr gut! Aber leider ist auch dort ein relativ großes Re-Design nötig...Aber Gut!!!Echt!!!

noisy_master 13. Okt 2010 16:56

AW: DBGrid und Touchscreen
 
Zitat:

Zitat von Bummi (Beitrag 1055632)
geht jetzt OT aber vielleicht solltest Du die BDE doch mal kicken und das ganz aus MS-SQLServer, Access o.ä. umstellen und per ADO weitermachen.

Jaaaaaaa doch, aber nicht jetzt!!!!

Kommt Zeit, kommt Rat, kommt andere Datenbank...

stahli 13. Okt 2010 17:21

AW: DBGrid und Touchscreen
 
Ich will mal die Fragezeichen noch aufklären :wink:

Du hast nicht erklärt,
- um wie viele Datensätze es sich handelt
- wie oft die Query aktualisiert wird
- wie komplex die Joins sind
- wieviel Daten geändert werden können
- was Du als zeitkritisch beim Scrollen betrachtest
- ob es pro Datensatz eine eindeutige und aufsteigende ID gibt
- (ob es Alternativen zur BDE gibt)

Daher muss ich bzw. müssen wir etwas orakaln...
Als Ansätze würde ich grundsätzlich folgendes sehen:

1) Daten in Objekten verwalten und zurückschreiben (wie der Sir meinte)

2) temporäre Tabelle erstellen (und TTable benutzen) und nach den Änderungen wieder in die originalen Tabellen zurüchschreiben

3) DBGrid.DrawDataCell
Sofern Du ein eindeutiges Indexfeld in der Ergebnismenge hast, kannst Du diesen Wert wärend des Zeichnens der Zellen ermittel. Das wird z.B. genutzt, um DBGrid-Zeilen, bei Negativwerten rot zu färben.
Du könntest das verwenden, um die Button zu (de-)aktivieren. Dazu müsstest Du den niedrigsten und höchsten Wert kennen und darauf abgleichen. Das ist nicht simpel, aber durchaus möglich.
Es wäre auch möglich, nach dem Abrufen einer Query alle "Indizes" in eine Stringlist zu kopieren und beim scrollen die Postion aus der Stringlist zu ermitteln.
Delphi-Quellcode:
MyCursor := StringList.IndexOf(MyField.AsString) + 1;
Das ist alles nicht optimal, aber was für Dich das sinnvollste ist, musst Du letztlich selbst entscheiden (je nachdem was genau für Daten vorliegen und was Du mirt dem Projekt weiter vor hast).

noisy_master 14. Okt 2010 08:26

AW: DBGrid und Touchscreen
 
Zitat:

Zitat von stahli (Beitrag 1055637)
Ich will mal die Fragezeichen noch aufklären :wink:

Du hast nicht erklärt,
- um wie viele Datensätze es sich handelt
- wie oft die Query aktualisiert wird
- wie komplex die Joins sind
- wieviel Daten geändert werden können
- was Du als zeitkritisch beim Scrollen betrachtest
- ob es pro Datensatz eine eindeutige und aufsteigende ID gibt
- (ob es Alternativen zur BDE gibt)

Daher muss ich bzw. müssen wir etwas orakaln...
Als Ansätze würde ich grundsätzlich folgendes sehen:

1) Daten in Objekten verwalten und zurückschreiben (wie der Sir meinte)

2) temporäre Tabelle erstellen (und TTable benutzen) und nach den Änderungen wieder in die originalen Tabellen zurüchschreiben

3) DBGrid.DrawDataCell
Sofern Du ein eindeutiges Indexfeld in der Ergebnismenge hast, kannst Du diesen Wert wärend des Zeichnens der Zellen ermittel. Das wird z.B. genutzt, um DBGrid-Zeilen, bei Negativwerten rot zu färben.
Du könntest das verwenden, um die Button zu (de-)aktivieren. Dazu müsstest Du den niedrigsten und höchsten Wert kennen und darauf abgleichen. Das ist nicht simpel, aber durchaus möglich.
Es wäre auch möglich, nach dem Abrufen einer Query alle "Indizes" in eine Stringlist zu kopieren und beim scrollen die Postion aus der Stringlist zu ermitteln.
Delphi-Quellcode:
MyCursor := StringList.IndexOf(MyField.AsString) + 1;
Das ist alles nicht optimal, aber was für Dich das sinnvollste ist, musst Du letztlich selbst entscheiden (je nachdem was genau für Daten vorliegen und was Du mirt dem Projekt weiter vor hast).

Nachdem du denn nun schon soviel geschriebe hast will ich deine Fragen mal nicht unbeantwortet lassen:

Alternative zur BDE: im Moment nicht!
Aufsteigende eindeutige ID: ja gibt es, aber leider keine kontinuierliche
Was ich als Zeitkritisch betrachte: Wenn ich mi anschaue, in welcher Geschwindigkeit die Jungs im
Restaurant auf den Screen einhämmern möchte ich jede (unnötige/umgehbare) Geschwindigkeitseinbuße vermeiden.
Wieviele Daten können geändert werden: nicht allzuviele( Bestellung kommt hinzu, Artikel kommen hinzu, es wird gedruckt... also immer nur einzelne Felder/einzelne Datensätze)
Wie komplex sind die Joins: nicht allzusehr, jeweils einzelne Verweise auf Kellnernummern bzw Artikelnummern oder Rechnungsnummern
Wann wird das Query aktualisiert: immer dann, wenn sich an den Datensätzen was ändert.
Wieviele Datensätze: Ein klares kommt drauf an:wink: : Wenn viel los ist sind es mehr... Nun nochmal ohne Scherz: Nimm die eine durchschnittliche Pizzeria mit meinetwegen 30 Tischen und 2 Bedienungen-> Anzahl offenen Bons ~max 15 und Artikel/Bestellung je nach Hunger der Kunden also ~20 Artikel pro Bestellung

Hält sich in Summe in Grenzen, aber wenn sich an irgendwelchen Stellen durch geschicktes programmieren Performance gewinnen lässt ist das immer gut.

Deinen Aussagen zu den bisherigen Vorschlägen stimme ich zu.

GHorn 14. Okt 2010 09:33

AW: DBGrid und Touchscreen
 
Solch eine erläuternde Ausführung hilft allen, die helfen wollen
und macht sich auch immer gut am Threadanfang :zwinker:

Neumann 14. Okt 2010 10:32

AW: DBGrid und Touchscreen
 
Hallo,

möchte dem Entwickler ja nicht unbedingt mutlos machen, aber so wie ich es lese ist sein Kassenprogramm noch im Anfangsstadium. Es gibt sehr viele solche Kassenprogramme am Markt; z.T. zu Preisen unter 100 €. Viel davon sind allerdings auch grottenschlecht und oft mit Visual Basic zusammengekloppt.

Um ein halbwegs brauchbares Produkt zu entwickeln, braucht man nach meiner Erfahrung mindestens 3 Jahre. Am Anfang habe ich das auch nicht geglaubt. Ob sich das dann vermarkten lässt ist eine zweite Frage. Bitte dies nicht falsch verstehen; sicher wir verkaufen Kassenprogramme, es geht mir mit meinem Posting nicht darum, mögliche Mitbewerber zu verhindern. Es spielt eigentlich keine Rolle ob es 100 oder 101 oder 110 Mitbewerber gibt, und ich sehe Mitbewerber primär als Kollegen und habe auch Kontakt zu einigen.

Zur Technik
Man sollte die BDE sofort über Bord werfen und eine zeitgemäße Datenbank verwenden wie Firebird, Postgresql oder MSSQL; sonst handelt man sich unnötige Probleme beim Betreiben der Kassen im Netzwerk ein, weiter gibt es auch Probleme mit Windows 7 wegen des nicht mehr vorhandenen 16 Bit Subsystems.

Das Scrollen in der Ansicht (dbgrid) ist eigentlich nur ein Randproblem. Wie glaube ich schon gesagt mit zwei Buttons für dataset.prior und dataset.next einfach zu lösen.

Gruß

Ralf

noisy_master 14. Okt 2010 11:23

AW: DBGrid und Touchscreen
 
Zitat:

Zitat von GHorn (Beitrag 1055698)
Solch eine erläuternde Ausführung hilft allen, die helfen wollen
und macht sich auch immer gut am Threadanfang :zwinker:

Hast ja in Summe Recht, aber diese Informationen helfen nicht wirklich bei dem eigentlichen Problem, das ich eigentlich IMHO recht gut erklärt hatte


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.
Seite 4 von 5   « Erste     234 5      

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-2025 by Thomas Breitkreuz