AGB  ·  Datenschutz  ·  Impressum  







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

Objecte / Datensatz(record)

Offene Frage von "EarlyBird"
Ein Thema von EarlyBird · begonnen am 5. Mai 2007 · letzter Beitrag vom 8. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#11

Re: Objecte / Datensatz(record)

  Alt 7. Mai 2007, 18:49
Zitat von EarlyBird:
Ich muss Datensätze in einer vertikalen Ansicht darstellen.
Ich nutze aus diversen Gründen kein Stringgrid unter anderem ist das scrollen durch die Datensätze zu langsam.
Ein schnelles scrollen durch die Datensätze ist äußerst wichtig.

Ich zeichne die Daten selbst in ein TBitmap und bin dabei so flexibel wie ich es benötige.
Das scrollen funktioniert dann auch wesendlich schneller.

Nun muss ich aber Änderungen in meinem "VerticalGridBild" machen können und das möglichst schnell.
Dazu speichere pro Datensatz ein Bitmap mit Koordinaten in einem Objekt.
ändern sich nun die Daten in der Tabelle kann ich dieses Bitmap einfach auf das "VerticalBild" kopieren.
Es geht also darum, die Daten, die du schon mal gezeichnet hat, in einen Cache zu packen, damit es beim 2. Mal schneller geht.
Das geht aber stark auf Kosten des Hauptspeichers!! 10000 Bitmaps brauchen halt doch einige MBs.
Besser wäre wohl EMF (Enhanced Meta File) zu benützen.
Ein (Windows) Meta File ist sozusagen ein Playback aller Zeichenbefehle, die auf einen Canvas angewendet wurden.
Es muss dabei nicht unbedingt in einer Datei gespeichert werden.

Ich würde mich an deiner Stelle auf bessere Filtermöglichkeiten konzentrieren anstatt das DBGrid neu zu erfinden!
Es ist doch viel sinnvoller die Datenmenge vor der Anzeige stark einzuschränken, als Tausende Datensätze anzuzeigen und das Scrollverhalten zu optimieren. Letztendlich müssen die Tausende Datensätze ja doch mindestens ein Mal eingelesen werden. Ändern sich die Daten im Hintergrund, wird der Cache wertlos und muss erneut aufgebaut werden.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Objecte / Datensatz(record)

  Alt 7. Mai 2007, 18:51
Davon abgesehen macht es überhaupt keinen Sinn, einem Benutzer zisch tausend Datensätze in egal welcher Form vor die Nase zu knallen. Bau ein kluge Suchfunktion/Filterfunktion ein. Deine Anwender werden es dir danken.
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#13

Re: Objecte / Datensatz(record)

  Alt 7. Mai 2007, 20:14
Zitat von shmia:
Es geht also darum, die Daten, die du schon mal gezeichnet hat, in einen Cache zu packen, damit es beim 2. Mal schneller geht.
Das geht aber stark auf Kosten des Hauptspeichers!! 10000 Bitmaps brauchen halt doch einige MBs.
Fast richtig, allerdings fülle ich direkt den cache und erstelle daraus das Bitmap.
Es werden immer höchstens 2000 Datensätze sein.
(von 10000 habe ich nie gesprochen)

Zitat von shmia:
Besser wäre wohl EMF (Enhanced Meta File) zu benützen.
Ein (Windows) Meta File ist sozusagen ein Playback aller Zeichenbefehle, die auf einen Canvas angewendet wurden.
Es muss dabei nicht unbedingt in einer Datei gespeichert werden..
Das hört sich interessant an.
Hast Du eventuell einen Link zu mehr Infos dazu?


Zitat von shmia:
Ich würde mich an deiner Stelle auf bessere Filtermöglichkeiten konzentrieren anstatt das DBGrid neu zu erfinden!
Es ist doch viel sinnvoller die Datenmenge vor der Anzeige stark einzuschränken, als Tausende Datensätze anzuzeigen und das Scrollverhalten zu optimieren. Letztendlich müssen die Tausende Datensätze ja doch mindestens ein Mal eingelesen werden. Ändern sich die Daten im Hintergrund, wird der Cache wertlos und muss erneut aufgebaut werden.
Das ist sicherlich richtig aber leider nicht in allen Fällen.
Die maximal 2tausend Datensätze die ich anzeigen möchte sind leider nicht mehr zu Filtern.
Gern würde ich auch auf das DBGrid zurückgreifen aber leider kann ich die Daten damit nicht vertical anzeigen.
Das StringGrid habe ich auch schon getestet aber Leider ist das zu langsam.
Beim scrollen von einem Datensatz werden allen Zellen neu gezeichnet das dauert halt.


Zitat von Jelly:
Davon abgesehen macht es überhaupt keinen Sinn, einem Benutzer zisch tausend Datensätze in egal welcher Form vor die Nase zu knallen. Bau ein kluge Suchfunktion/Filterfunktion ein. Deine Anwender werden es dir danken.
Auch Du hast im Allgemeinen sicherlich recht aber halt nur im Allgemeinen.
Es gibt schon Anwendungen wo es durchaus Sinn macht dem User schnellst möglich 2tausend Datensätze zu präsentieren.

Vielen Dank für die Vielen Beiträge
Gruß EarlyBird
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Objecte / Datensatz(record)

  Alt 7. Mai 2007, 21:56
Zitat von EarlyBird:
Die maximal 2tausend Datensätze die ich anzeigen möchte sind leider nicht mehr zu Filtern.

Wenn du sie programmiertechnisch nicht filtern kannst, wie willst du dem Anwender zumuten, sich durch 2000 Datensaätze zu wühlen.

Würd mich mal interessieren was für eine Anwendung du da programmierst.
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#15

Re: Objecte / Datensatz(record)

  Alt 8. Mai 2007, 08:19
"sind nicht mehr zu Filtern" ist vielleicht ein bisschen missverständlich.
Natürlich lassen sich Daten einer Tabelle Filtern, aber die max. 2tausend die ich geschrieben habe sind die, die schnell im Zugriff sein müssen.
(der normal Fall werden auch eher zwischen 400 und 800 sein aber man sollte ja vom Maximum ausgehen)

Die Daten werden farblich gekennzeichnet, nach verschiedenen Kriterien.
So das die Datensätze sehr wohl schnell "zu durchwühlen" sind.
(Ein roter Datensatz in 5 blauen fällt auch ohne lesen des Inhalts sehr schnell auf).
Das ganze dient nicht hauptsächlich der Daten Eingabe sonder eher der Datensortierung.
Die Sortierung geschieht aber "manuell" der User legt die Reihenfolge fest.
Und in einer vertikalen Darstellung kann ich auf 3 Bildschirmen schon eine ganze Menge Daten nebeneinander anzeigen und behalte durch die Farben immer noch eine gewisse Übersicht.

Ob das ganze jetzt die beste Lösung ist weiss ich auch noch nicht aber mit einem StringGrid geht das ganze halt zu langsam (das war mein erster Lösungsansatzt der auch erst ganz vielversprechend aussah).

Zitat von shmia:
Besser wäre wohl EMF (Enhanced Meta File) zu benützen.
Ein (Windows) Meta File ist sozusagen ein Playback aller Zeichenbefehle, die auf einen Canvas angewendet wurden.
Es muss dabei nicht unbedingt in einer Datei gespeichert werden.
Gibt es dazu noch mehr Infos??



Außerdem drifte ich im Augenblick ganz vom eigentlichen Thema ab.
Mir ist immer noch nicht klar wie ich einen Record an ein Objekt binde und umgekehrt?

das muss doch irgendwie möglich sein.

Gruß EarlyBird
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: Objecte / Datensatz(record)

  Alt 8. Mai 2007, 08:59
Hallo,

wie schon 100 mal gesagt,
das einfachste ist der Primär-Schluessel des Records.
Der ist bei dir ja wohl ein Integer, also

Delphi-Quellcode:
type
  TMyClass = class
    iDBId: Integer;
  end;

Heiko
Heiko
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#17

Re: Objecte / Datensatz(record)

  Alt 8. Mai 2007, 12:48
Sorry wenn ich immer wieder Frage
Aber irgend wie macht es einfach nicht klick.

Zitat von hoika:
wie schon 100 mal gesagt,
das einfachste ist der Primär-Schluessel des Records.
Der ist bei dir ja wohl ein Integer, also

Delphi-Quellcode:
type
  TMyClass = class
    iDBId: Integer;
  end;
nun noch ein 101stes mal
Wie kann ich dann direkt das Objekt verwenden??
Delphi-Quellcode:
for i := 0 to objects.count - 1 do
  begin
    if MyClass.iDBId = 101 then
      ....
      .....
    break;
  end;
Das kann doch nicht die beste Lösung sein!?!?
Dann brauche ich ja immer noch eine schleife
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: Objecte / Datensatz(record)

  Alt 8. Mai 2007, 13:11
Hallo,

sortiere diese Liste nach der iDBId
und buntze BinSearch zum Suchen.
Ab D6 (?) gibt es auch TBucketList (Hash-Liste),
die sowas ähnliches macht.

Du könntest auch eine eigene Klasse von TBitmap ableiten
und dort das iDBId eintragen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:13 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