Seite 1 von 2
dynamisch Arrays erweitern ...
Verfasst: 19.04.2006 01:15
von der-sigi
Hallo heute Nacht
irgendwie bleib ich gerade überall stecken und finde nichts in den Beispielen oder im Board.
Ich sollte eine Datenbank abfragen und die Daten in ein Array schieben. Da ich nicht weiß, wieviel Datensätze in der Datenbanktabelle enthalten sind, bieten sich ja dynamische Arrays an. Darüber wird auch irgendwo informiert, die Beispiele beziehen sich aber immer auf statische Arrays oder ich habe gerade mal wieder Tomaten auf den Augen.
Ich habe das gerade wie folgt "gebastelt". Das funktioniert soweit, nur werden nicht alle zurückgegebenen Datensätze eingepflegt!?
Code: Alles auswählen
Structure DBDataType
Name.s
Aktiv.l
EndStructure
Dim DBData.DBDataType(0)
Counter = 1
...
While NextDatabaseRow()
DBData(Counter).Name = GetDatabaseString(0)
DBData(Counter).Aktiv = GetDatabaseLong(6)
Counter = Counter + 1
Wend
...
Wie gesagt schiebt der bei 96 wirklichen Datensätzen in 38 die richtigen Daten rein, dann hört es auf. Dimensioniere ich mit 200, schiebt er alle 96 rein. Aber ich will und kann das nicht vorher festnageln.
Kann mir da bitte jemand auf die Beine helfen? Dankeschön.
Viele Grüße
Sigi
Verfasst: 19.04.2006 01:40
von ts-soft
>> bieten sich ja dynamische Arrays an
Da PB direkt keine dynamischen Arrays unterstützt bieten sich eigentlich eine LinkList an

Verfasst: 19.04.2006 03:51
von edel
Du koenntest vorher auch mit einem "Count" Query die Anzahl der Zeilen
abfragen.
Verfasst: 19.04.2006 10:35
von der-sigi
Hallo ihr Helfer
hallodri: Ist korrekt, bedeutet aber eine zusätzliche DB Abfrage, die Zeit kostet. Darauf wollte ich gerne verzichten.
ts-soft: Dann muß jemand mal das Wikipedia korrigieren, denn selbst da steht, daß PB dynamische Arrays kann. ;)
Ok, das mit den LinkListen geht, aber so was Umständliches habe ich noch nicht gesehen. Für alles doppelter Aufwand. Wenn man das im PB Source ein bißchen anpaßt, dann gibt es dynamische Arrays und man kann die zusätzlichen LinkLists wegwerfen. (Meine persönliche Meinung, nicht hauen).
Viele Grüße
und Danke für die Hilfe
Sigi
Verfasst: 19.04.2006 10:45
von Kiffi
> (Meine persönliche Meinung, nicht hauen).
nee, nee, da stimme ich mit Dir völlig überein! Ein Redim [Preserve] Array(),
so wie es in VB gang und gäbe ist, wäre (nicht nur für mich) eine sehr
sinnvolle Erweiterung der PB-Befehle.
Grüße ... Kiffi
Verfasst: 19.04.2006 11:16
von remi_meier
ReDim ist in PB4.0 dabei.
In deinem ersten Post hast du einfach ohne Speicher zu reservieren
irgendwo in den Arbeitsspeicher geschrieben
Und LinkedLists sind genauso einfach

(meine Meinung)
Verfasst: 19.04.2006 11:28
von Kiffi
> ReDim ist in PB4.0 dabei.
argl! Alzheimer lässt grüssen.
Grüße ... Kiffi
Verfasst: 19.04.2006 11:33
von Karl
Was willste mit ReDim? Dafür gibt es doch dynamische Listen. Aber wahrscheinlich ist ReDim eine gekürzte LL.
Gruß Karl
Harte Typen brauchen keine Abwehrkräfte.
Verfasst: 19.04.2006 11:42
von der-sigi
Hallo remi_meier
remi_meier hat geschrieben:ReDim ist in PB4.0 dabei.
Keine Ahnung was ReDim sein soll. Ein "Dim array()" für ein dynamisches Array würde mir reichen, wenn man schon "dimmen" muß. ;)
Und PB4.0 ist noch beta, also noch nicht zu gebrauchen (sondern nur zu testen, nicht daß mich jemand haut).
remi_meier hat geschrieben:In deinem ersten Post hast du einfach ohne Speicher zu reservieren irgendwo in den Arbeitsspeicher geschrieben :shock:
Mag sein, aber er hat die Daten die er abgelegt hat auch wieder gefunden. ;) Und für mich war es ein Test, was damit passiert.
remi_meier hat geschrieben:Und LinkedLists sind genauso einfach :D (meine Meinung)
Darfste natürlich haben.
Für mich ist
Code: Alles auswählen
; --- rein
etwas(15) = "irgendwas"
; --- raus
das = etwas(133)
wesentlich einfacher und vor allem übersichtlicher als
Code: Alles auswählen
; --- rein
SelectElement(etwas(),15)
AddElement(etwas())
etwas() = "irgendwas"
; --- raus
SelectElement(etwas(),133)
das = etwas()
Wobei ich noch garnicht weiß ob das mit dem "SelectElement" und "AddElement" so geht, jedenfalls steht davon nichts in der Hilfe. Wenn nicht, dann muß man ja erst "FirstElement" plus 15 (fünfzehn) mal "NextElement" machen um dem was zuweisen zu können. Das ist dann garnicht mehr einfach und schon garnicht mehr übersichtlich. Aber selbst das hier ist umständlich.
Viele Grüße
Sigi
Verfasst: 19.04.2006 12:00
von DarkDragon
der-sigi hat geschrieben:... "dimmen" ...
... "dimensionieren" ...