AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Daten von versch. Quellen zusammenfassen mit Dataset?
Thema durchsuchen
Ansicht
Themen-Optionen

Daten von versch. Quellen zusammenfassen mit Dataset?

Ein Thema von FatPap · begonnen am 5. Jun 2014 · letzter Beitrag vom 6. Jun 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#1

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 5. Jun 2014, 16:37
Mit DataSnap geht das supereinfach.
Professional ... da ist das nicht mit dabei

Aber ja, auf der einen Seite ein DataSet befüllen und um die Übertragung kümmert sich das DataSnap.
Am Ende ist das fast wie ein lokaler Prozeduraufruf, wobei DataSnap den Aufruf zum Server schickt und die Antwort (hier das DataSet) zurück holt.
z.B. function TMyDataSnapModul.HoleMeldungen(Anlagentyp: string; MeldungenSeit: TDataTime; Aufsteigend: Boolean=True): TDataSet;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Jun 2014 um 17:06 Uhr)
  Mit Zitat antworten Zitat
FatPap

Registriert seit: 23. Jul 2013
Ort: Österreich
17 Beiträge
 
Delphi XE6 Architect
 
#2

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 6. Jun 2014, 08:35
Danke für die ausführlichen Antworten

Zitat:
Professional ... da ist das nicht mit dabei
Was ist damit gemeint?
edit: Du meintest wahrscheinlich die XE2 Version. Ja ich verwende Professional.

Ich hatte gerade ein Gespräch mit dem Chef.

Wir stellten fest dass es ungünstig ist immer von verschiedenen Quellen abzufragen. Deshalb wird auf dem Server auch eine lokale Datenbank (sqlite) zur Anwendung kommen in der sämtliche Daten der verschiedenen Anlagen eingetragen werden.
Für den Umgang mit sqlite habe ich einen Delphi Wrapper -> https://github.com/plashenkov/SQLite3-Delphi-FPC

Am server werden die Daten dann so abgefragt:
Delphi-Quellcode:
var Statement : TSQLite3Statement;
begin
  Statement := Database.Prepare('SELECT * from table where bla bla bla');
  while Statement.Step = SQLITE_ROW do
  begin
    RecordOderSonstwas.Feld0 := Statement.ColumnText(0);
    RecordOderSonstwas.Feld1 := Statement.ColumnText(1);
    usw...
  end;
end;

Zum Übertragen verwende ich die INDY_10 Komponente TIdTCPServer und TIdTCPClient.
Also stellt sich für mich jetzt die Frage was nehmen für "RecordOderSonstwas" (bzw. warum die Daten nicht einfach im Statement lassen und direkt übertragen) und in welcher Form übertragen?

Wie ich einen Record mit dem TCPServer übertrage hab ich schon herausgefunden:
Delphi-Quellcode:
procedure TFrmStart.TCP_SERVERExecute(AContext: TIdContext);
var Buf : TidBytes;
begin
  Buf := RawToBytes(einRecord, Sizeof(einRecord));
  AContext.Connection.IOHandler.Write(Buf);
end;
Ich und google werden sich jetzt mal mit Datasnap und TClientDataSet auseinandersetzen.

Geändert von FatPap ( 6. Jun 2014 um 08:49 Uhr)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
535 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 6. Jun 2014, 08:57
Ich und google werden sich jetzt mal mit Datasnap und TClientDataSet auseinandersetzen.
Dann zieh auch mal noch RemObjects in betracht.
Insbesondere wenn Du Delphi unabhängig(er) entwickeln willst.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.874 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 6. Jun 2014, 09:09
Oder
mORMot
RemoteDB
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#5

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 6. Jun 2014, 09:19
Zitat:
Was ist damit gemeint?
edit: Du meintest wahrscheinlich die XE2 Version. Ja ich verwende Professional.
Jupp, und DataSnap gibt es erst ab der Enterprise. -> Feature Matrix

http://en.wikipedia.org/wiki/DataSnap
http://docwiki.embarcadero.com/RADSt...gen_entwickeln
http://docwiki.embarcadero.com/RADSt...nd_Architektur
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Jun 2014 um 09:21 Uhr)
  Mit Zitat antworten Zitat
FatPap

Registriert seit: 23. Jul 2013
Ort: Österreich
17 Beiträge
 
Delphi XE6 Architect
 
#6

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 6. Jun 2014, 09:28
mORMot klingt interessant danke.

Zitat:
Eine Konzentration von Daten in einer Datenbank, nur aufgrund von Befindlichkeiten des Programmierers, ist mE völlig unsinnig und kann uU mehr Probleme schaffen.
Daten müssen auch verfügbar sein wenn eine Anlage mal gerade nicht läuft.

Zitat:
Solange du in dem Record keine string Typen verwendest wird das auch so funktionieren - sonst aber nicht.
Ja, musste die strings bisher so definieren string[255] Danke für den Tipp.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 6. Jun 2014, 12:28
Ich schmeiß mal ICS Middleware in den Raum. Damit kann man auch direkt Datasets durch die Gegend schmeißen, ich weiß aber nicht, ob das noch state-of-the-art ist.

Aber ein TClientDataset hat- soweit ich weiß- eine Eigenschaft 'Data' als Variant. Nun kann man diesen Variant in einen Stream packen und dann per TCP verschicken. Auf der anderen Seite holt man den Stream ab, wandelt ihn in ein Variant und füllt lokal ein TClientDataset.Data mit dem Variant.

Fupps, fertig.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Daten von versch. Quellen zusammenfassen mit Dataset?

  Alt 6. Jun 2014, 09:18
Ich hatte gerade ein Gespräch mit dem Chef.

Wir stellten fest dass es ungünstig ist immer von verschiedenen Quellen abzufragen. Deshalb wird auf dem Server auch eine lokale Datenbank (sqlite) zur Anwendung kommen in der sämtliche Daten der verschiedenen Anlagen eingetragen werden.
Der Kern-Anwendung sollte es völlig egal sein, wo die Daten genau herkommen. Die muss nur wissen, wie sie an die Daten kommt. Das erledigt man über die Definition von Repositories. Das jeweilige Repository weiß, wie man an die Daten kommt und die Anwendung fragt einfach das Repository. Schon wird es (aus Sicht der Anwendung) egal, wo die Daten liegen und wie die konkrete Abfrage zu bewerkstelligen ist.
Delphi-Quellcode:
// Generisches Repository
type
  IRepository<T,TID> = interface
    function Find( AID : TID ) : T;
    function FindAll : TList<T>;
  end;

  IPersonRepository = interface( IRepository<TPerson,integer> )
    function FindByName( const AName : string ) : TList<TPerson>;
  end;
Eine Konzentration von Daten in einer Datenbank, nur aufgrund von Befindlichkeiten des Programmierers, ist mE völlig unsinnig und kann uU mehr Probleme schaffen.
Zum Übertragen verwende ich die INDY_10 Komponente TIdTCPServer und TIdTCPClient.
Also stellt sich für mich jetzt die Frage was nehmen für "RecordOderSonstwas" (bzw. warum die Daten nicht einfach im Statement lassen und direkt übertragen) und in welcher Form übertragen?

Wie ich einen Record mit dem TCPServer übertrage hab ich schon herausgefunden:
Delphi-Quellcode:
procedure TFrmStart.TCP_SERVERExecute(AContext: TIdContext);
var Buf : TidBytes;
begin
  Buf := RawToBytes(einRecord, Sizeof(einRecord));
  AContext.Connection.IOHandler.Write(Buf);
end;
Solange du in dem Record keine string Typen verwendest wird das auch so funktionieren - sonst aber nicht.
Bei einem String befindet sich im Record lediglich eine Referenz auf den String und nicht der String selber.

Such mal nach Serialisierung (z.B. nach JSON oder XML) und übergib das an den Client. Der kann sich daraus dann wieder eine Instanz/Record zusammenbauen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 6. Jun 2014 um 09:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:37 Uhr.
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