Seite 1 von 1

DataObjects

Verfasst: Mo, 29. Dez 2014 11:27
von Manfred
Hat sich jemand schonmal mit den neuen DataObjects der 2.0 beschäftigt?

Re: DataObjects

Verfasst: Mo, 29. Dez 2014 12:08
von Jan
Moin Manfred,

nur zur Info: Auf dem Forentreffen am 24./25. April in Potsdam werde ich darüber eine Session halten. Da werde ich dann sicher auch ein paar Antworten zu dem Thema geben können. Andererseits bin ich natürlich auch noch auf der Suche nach noch ein paar mehr praktischen Anwendungsbeispielen dafür ... wenn jemand eine gute Idee dazu hat ... auch gerne bilateral (mein Weib würde jetzt sagen: Mein Dank würde demjenigen ewig nachschleichen :-D )

Jan

Re: DataObjects

Verfasst: Mo, 29. Dez 2014 12:56
von georg
Hallo, Jan -


interessieren würde mich z.B., das Result Set eines MySQL-Zugriffs in einem solchen Objekt abzubilden.

Mit der 1.9x geht das nur, indem ich die Daten in ein Array packe und das Data Object mit diesem Array als Quelle erzeuge. Nicht sonderlich praktisch, und auch nicht sonderlich hilfreich, da das Data Object zerstört und neu erstellt werden muss, wenn sich z.B. der Array-Inhalt ändert (laut Alaska), da das Data Object wohl eine Kopie des Arrays "zu den Akten" nimmt.

Re: DataObjects

Verfasst: Mo, 29. Dez 2014 18:15
von brandelh
georg hat geschrieben:Mit der 1.9x geht das nur, indem ich die Daten in ein Array packe und das Data Object mit diesem Array als Quelle erzeuge.
DataObjects in der 1.90 ????

Es gibt in der 2.0 Befehle die nach Datenbankoperationen das Ergebnis auch als Array mit Dataobjects zurückgeben kann, aber das setzt wohl voraus, dass man die PostGreSQL-DBE nutzt.
In der 1.90 habe ich dynamische Klassen verwendet um DataObjects nachzubilden, die sind aber deutlich langsamer als Echte (Laut Vortrag auf der Devcon 2012).
Was mir z.B. gefehlt hat sind Methoden, mit dem man einen kompletten Datensatz in ein DataObject laden kann (ähnlich wie SCATTER / GATHER bei Arrays).
Anfrage in NEWS hat geschrieben:SCATTER() for DataObjects ?
I use this function to read a record into an DataObject and it works, but I asked me if there is a better / build in solution for it ?
Den Code dazu muss man selbst schreiben, und genauso muss man alles andere selbst schreiben wenn man keine DBE nutzt. Hier die verbesserte Version:

Code: Alles auswählen

function ReadRecord(nSelect)
   local nFC := (nSelect)->(fcount())
   local o   := DataObject():new()
   local i, cFN
   IF PCount() == 0    // Verbesserung von Alaska - Anfang
      nSelect := Select()
      nFC := (nSelect)->(fcount()) 
   ENDIF                   // Verbesserung von Alaska - Ende
   for i := 1 to nFC
       cFN := (nSelect)->(fieldName(i))
       o:&(cFN) := (nSelect)->(fieldGet(i))
   next
return o 
Aktuell verwende ich (falls ich SQL nutze) immer Arrays, die Resultsets (oder Teile davon) speichern. Diese Arrays browse ich dann.

Ich könnte mir vorstellen in Zukunft eher ein Array mit DataObjects zu erstellen, aber ich habe auch nur kurze Codeschippsel von kleineren Tests.

Was genau interessiert dich ?

Re: DataObjects

Verfasst: Mo, 29. Dez 2014 18:24
von Manfred
Hi Hubert,

es gab ja mal einen längere Diskussion hier im Forum, in der auch meine Datenbankklassen zur Sprache kamen. Ich habe zu jedem Feld einer DBF eine membervar bereitgestellt, in die der jeweilige Inhalt des jeweiligen DBF Feldes geschrieben wird bei mir. Es gibt eine Routine, die ließt das ein aus der DBF und eine, die alles wieder wegschreibt. Das geschieht aber derzeit alles noch statisch. D.h. ich muß selbst darauf achten, dass es zu jedem Feld eine Membervar gibt und umgekehrt. Das klappt bei mir alles. So kann ich einer DBF Tabelle eine klasse zuordnen, die dann alles macht was ich haben will und brauche. Laut Steffen soll das aber alles jetzt automatisch per Laufzeit klappen. (So wie ich es verstanden habe) Ich öffne eine DBF und dann wird (vereinfacht ausgedrückt) alles automatisch/dynamisch gemacht, was ich derzeit statisch mache.
Und das würde mich jetzt interessieren, ob das mit den DAtaObjects gemeint war.

Re: DataObjects

Verfasst: Mo, 29. Dez 2014 19:55
von georg
Hallo,


sieht so aus, als habe ich DataObjects mit den DacSession bzw. DacPagedDataStore verwechselt. Sorry und Asche auf mein Haupt.

Re: DataObjects

Verfasst: Mo, 29. Dez 2014 23:15
von brandelh
Der Select-Bereich als solcher ist ein Objekt, ob dieses aber das macht was du willst weiß ich nicht.
Was automatisch geht ist z.B. ein neuer SQL Befehl (Syntax kenne ich nicht) INTO DataObjects ... oder so und dann weiß das Dataobjekt alle Felder des Resultsets.
Mehr ist möglich, aber ich habe nichts in der Doku gefunden.

Neu mit den DataObjekts ist auf jeden Fall dass du keine Klasse pro DBF anlegen musst, sondern einfach ein DataObjekt anlegst und z.b. mit dem obigen Code alle Felder (oder auch nur die nötigen) überträgst. Du kannst natürlich auch Klassen ableiten und mehr Methoden anlegen, aber das ist das was ich aus dem damaligen Chat mit Steffen und seinem Vortrag noch in Erinnerung habe. Wenn mehr geht wäre das schön, aber der Hauptvorteil soll sein, dass man eben nicht für jede DBF eine eigene Klasse braucht und dass der Zugriff und das Anlegen von iVars (per Feldname) viel schneller sein soll als mit der alten NoIVar-Methode und auf jeden Fall weniger Code benötigt als die Klassendeklarationen.