AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Speichern eines großen Arrays
Thema durchsuchen
Ansicht
Themen-Optionen

Speichern eines großen Arrays

Ein Thema von Shubit · begonnen am 31. Mär 2010 · letzter Beitrag vom 13. Apr 2010
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 11:13
Es gibt die Property RecordCount, die soll aber nicht immer zuverlässig sein (hab ich zumindest gelesen, ich nutze die eigentlich nie). Was auf jeden Fall zuverlässige Werte liefern sollte, ist ein SELECT COUNT(ID) FROM Tabelle Damit bekommst Du aber lediglich die Anzahl der Datensätze der Tabelle, nicht hingegen deren ID an sich. Also würde ich die Anzahl einmalig ermitteln und mir in einer Variablen merken (zumindest solange ausgeschlossen ist, dass während des Programmablaufs Datensätze eingefügt oder gelöscht werden können). Einen zufälligen DS müsste man dann so bekommen können (ungetestet):
Delphi-Quellcode:
Query.First;
for i := 1 to Random(Anzahl_DS) do
  Query.Next;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#12

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 12:19
Zitat von DeddyH:
Es gibt die Property RecordCount, die soll aber nicht immer zuverlässig sein (hab ich zumindest gelesen, ich nutze die eigentlich nie).
uiuiui... sicher?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 12:34
Ich vermute das mit einer Datenbank die genannten Probleme eher noch wachsen und neue hinzukommen werden, insbesondere wenn man sich noch nie mit Datenbanken beschäftigt hat.

Wenn man Strings variabler Größe verwendet, muss man zwar auf "File of" verzichten und die Daten z.B. Binär speichern, aber da die meisten Begriffe kürzer sind, wird die Datei auch kleiner. Das Problem mit der Ladezeit lässt sich dann vermutlich einfach dadurch lösen, daß man die Daten komprimiert speichert/liest und nur im Speicher packt/entpackt. Das lässt sich nach meiner Meinung relativ simpel und schnell realisieren.
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#14

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 13:38
Nun ich bin für alle Lösungen offen, aber da Datenbanken extra für großen Mengen an Daten ausgelegt sind, sollten sie gerade für längere Vokabellisten sehr gut geeignet sein und wenn sie die restlichen Anforderungen erfüllen, lohnt es sich sicher sich mal damit zu beschäftigen.

Mir ist gerade noch eine Methode zur Ermittlung eines eines zufälligen Datensatzes eingefallen:
Delphi-Quellcode:
DeineQuery.SQL.Text := 'SELECT COUNT(ID) FROM Tabelle';
DeineQuery.Open;
x := DeineQuery //ja hier müsste irgendwie die Antwort der SQL hin
x := x-2;
repeat
DeineQuery.SQL.Text := 'SELECT * FROM VokabelListe WHERE id != LetzteID LIMIT :x, 1 ';
DeineQuery.ParamByName('x').Value := random(x);
DeineQuery.Open;
until DeineQuery.FieldByName('Feld1').AsFloat > Random;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 14:03
Moment, Du möchtest also auf jeden Fall vermeiden, dass einzelne Vokabeln doppelt abgefragt werden? Dann könntest Du Dir die bereits abgefragten DS (besser gesagt: deren IDs) in einer Liste merken und das SQL entsprechend dynamisch zusammenbauen. Angenommen, die IDs 3 und 7 wurden bereits abgefragt, dann könnte das nächste Statement dann so aussehen:
SQL-Code:
SELECT * FROM VokabelListe
WHERE ID NOT IN (3,7)
Allerdings kenne ich mich mit der Syntax von SQLite nicht aus, evtl. muss das dort anders formuliert werden.

Achja, und zu Deinem Problemchen: enweder einen Alias verwenden
Delphi-Quellcode:
DeineQuery.SQL.Text := 'SELECT COUNT(ID) AS Anzahl FROM Tabelle';
DeineQuery.Open;
x := DeineQuery.FieldByName('Anzahl').Value;
oder über den Index auf das Feld zugreifen
Delphi-Quellcode:
DeineQuery.SQL.Text := 'SELECT COUNT(ID) FROM Tabelle';
DeineQuery.Open;
x := DeineQuery.Fields[0].Value;
Ich persönlich würde den Alias verwenden, das ist auch später noch nachzuvollziehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#16

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 17:17
Eigentlich wollt ich nur vermeiden dass er die gerade gefragt Vokabel gleich wieder fragt, aber ansonsten gute Idee
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#17

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 19:55
Was muss ich jetzt alles machen wenn ich die Tabelle in einem Grid darstellen will?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 20:01
In einem DBGrid? Eine Datasource dazupacken, diese dem DBGrid und als Dataset die Query zuweisen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#19

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 20:03
Moin,
erstmal mach wegen deiner Gridfrage einen neuen Post auf. Und bezüglich SQLite könntest du eventuell das Problem haben, wenn du eineindeutige IDs benutzt. Wenn wir also keine ID jemals zweimal vergeben und zu Anfang mal n Vokabeln haben, dann haben wir 1 bis n IDs (wenn ich mich richtig erinnere beginnen die IDs bei 1). Wenn du jetzt eine ID x zwischen n und 1 löscht und einen Eintrag hinzufügst, dann hat er die ID n + 1 und nicht x.

Ich würde also mir alle IDs holen (SELECT ID FROM Vocs) und dann zufällig eine davon Auswählen.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
1. Apr 2010, 23:50
Dieses Thema wurde von "Luckie" von "Sonstige Fragen zu Delphi" nach "Datenbanken" verschoben.
Mittlerweile sind wir wohl bei Datenbanken angekommen. Für das Internetupdate deines Programms machst du aber bitte einen neuen Thread auf.
Antwort Antwort
Seite 2 von 3     12 3      


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 06:50 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