AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken RemObjects Data Abstract, Schema Modeler erzeugt alles auf dem Client
Thema durchsuchen
Ansicht
Themen-Optionen

RemObjects Data Abstract, Schema Modeler erzeugt alles auf dem Client

Ein Thema von Kostas · begonnen am 20. Nov 2012 · letzter Beitrag vom 3. Dez 2012
Antwort Antwort
Seite 2 von 2     12   
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: RemObjects Data Abstract, Schema Modeler erzeugt alles auf dem Client

  Alt 3. Dez 2012, 17:29
Hallo Udo,

danke für die Infos.
Ich teste gerade mit der aktuellen Testversion. Ich kenne den "alten" Modeler nicht.
Vermutlich ist hier das Problem. Sobald ich mein eigenes SQL eingebe, werde ich auch
gefragt ob ich die Felder anlegen möchte. Die Felder werden angelegt jedoch ohne das Attribut
PK, required u.s.w. Werde mal den Support bemühen. Als Anfänger geht man immer davon aus
dass man ein Bedienerfehler macht.
Das mit dem veröffentlichen, ich dachte es werden noch irgendwelche DLLs benötigt oder so.
Es wird also allen in der EXE includiert. Das ist mir am liebsten.

Udo, ich habe dich jetzt wirklich ordentlich strapaziert, sorry dafür. Nur, ich dachte ich
habe das verstanden wie ich im RODA-Server eine Dataset bereitstellen kann um im Client
die "Remote"-Methode aufrufen zu können like GetAdress(const adressnr: Integer): Binary;

Ich habe im Service Manager ein neuen Service angelegt und die Methode GetAdress als Item
mit den Parameter und ein Result vom Typ Binary angelegt. Danach die Implementierung der Methode vorgenommen.


Delphi-Quellcode:
function TMobileService.GetAdress(const adressnr: Integer): Binary;

  procedure ProcessDataset(aDataset: IDADataset);
  begin
    aDataset.ParamByName('adressnr').AsInteger := adressnr;
    aDataset.Open;
    DataStreamer.WriteDataset(aDataset, [woRows], -1);
  end;

begin
  result := Binary.Create;
  DataStreamer.Initialize(result, aiWrite);
  try
//Die Schema.Table = Adresse serialisieren
    ProcessDataset(DASchema.NewDataset(Connection, 'Adresse'));
  finally
    DataStreamer.Finalize;
  end;
end;
Was ich noch nicht verstanden habe, wie kann ich jetzt die Methode GetAdress im Client
Einbinden und aufrufen und das result als dataset ausgeben?
Was ich gemacht habe ist, mein Service MobileService_Impl vom Server im Client in Uses
einzubinden. Die Methode GetAdress wurde in MobileService_Impl automatisch als protected angelegt.

Result := (ISEPricingService as IISEPricing).GenerateCatalogPricesHotel(APeriode.ID, AHotelID, DaysOfWeek, ARoomRateID, DaysOfStay, ServiceIDs); Wenn ich den cast richtig verstanden habe, greift du damit auf die Methode zu. Doch wie bekomme ich die in den Client? Vermutlich irgendwie über den RemoteDataAdapter, doch meine Methode wird nicht angezeigt. Den Server habe ich natürlich gestartet. RemoteDataAdapter zeigt mir nur die Tabellen vom Scheme Modeler. Übrigens, im Scheme Modeler habe ich auch eine StoredProc auf die ich per Commands zugreife. Die StoredProc liefert eine Select. Die Commands werden jedoch nicht angezeigt im RemoteDataAdapter.

Wenn es deine Zeit erlaubt, würde ich dich bitten mich aus diesem Wirrwarr zu leiten.

Gruß Kostas.
  Mit Zitat antworten Zitat
kretabiker

Registriert seit: 10. Mär 2005
Ort: Bargteheide
183 Beiträge
 
Delphi 12 Athens
 
#12

AW: RemObjects Data Abstract, Schema Modeler erzeugt alles auf dem Client

  Alt 3. Dez 2012, 18:17
Hallo Kostas,

mal das zweite zuerst:

Was ich noch nicht verstanden habe, wie kann ich jetzt die Methode GetAdress im Client
Einbinden und aufrufen und das result als dataset ausgeben?
Was ich gemacht habe ist, mein Service MobileService_Impl vom Server im Client in Uses
einzubinden. Die Methode GetAdress wurde in MobileService_Impl automatisch als protected angelegt.
Grundsätzlich: Die Methode bzw. das Interface ist in der _Intf-Datei der Service Library deklariert. Das sieht dann z.B. so aus:

Delphi-Quellcode:
{ IISEPricing }
  IISEPricing = interface(IDataAbstractService)
    ['{906729C2-F241-4435-8A63-0281F6B1C2F1}']
    function GenerateCatalogPricesHotel(const APeriodID: Integer; const AHotelID: Integer; const AWeekdays: StringArray; const ARoomRateID: Integer;
                                        const ADaysOfStay: TROIntegerArray; const AServices: TROIntegerArray): Boolean;
  end;
Das wird so vom Service Builder gebaut. Du musst daher nicht die _Impl-Datei in deinen Client aufnehmen, sondern die _Intf-Datei der Service Lib (nicht zu verwechseln mit der/den _Intf-Datei/en des/der Schemas...).

Für den ersten Teil deiner Frage muss ich dich vertrösten, da muss ich mal in Source gucken, den ich nicht hier habe. Diese Art der Datenübertragung habe ich nur selten angewandt, vor allem für FetchAll über mehrere Tabellen. Was mir spontan auffällt: Muss der Rückgabewert deiner Methode GetAdress nicht vom Typ TROBinaryMemoryStream sein? Der Aufruf erfolgt in solchem Fall auch nicht wie in meinem Beispiel, sondern mit einem Aufruf von GetDataCall des RemoteDataAdapters, glaube ich mich zu erinnern. Schau am besten mal in das mitgelieferte FetchAll-Beispiel.
Udo Treichel
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: RemObjects Data Abstract, Schema Modeler erzeugt alles auf dem Client

  Alt 3. Dez 2012, 18:38
Hallo Kostas,


Für den ersten Teil deiner Frage muss ich dich vertrösten, da muss ich mal in Source gucken, den ich nicht hier habe. Diese Art der Datenübertragung habe ich nur selten angewandt, vor allem für FetchAll über mehrere Tabellen. Was mir spontan auffällt: Muss der Rückgabewert deiner Methode GetAdress nicht vom Typ TROBinaryMemoryStream sein? Der Aufruf erfolgt in solchem Fall auch nicht wie in meinem Beispiel, sondern mit einem Aufruf von GetDataCall des RemoteDataAdapters, glaube ich mich zu erinnern. Schau am besten mal in das mitgelieferte FetchAll-Beispiel.
HALT möglicherweise ist des alles Mist was ich da mache!!
Clientseitig muss ich manchmal einfach nur ein Select auf die Datenbank absetzen.
Das funktioniert mit RODA einfach indem ich im Schema Modeler eine Tabelle erstelle
von mir aus auch mit Parameter und greife vom Client über eine MemoTable und ein RemotDataAdapter zu. Das funktioniert ohne Probleme. Vorteil und Nachteil zugleich,
der Client hat auf das Schema kompletten Zugriff. Jetzt kommt es vor dass ich dem
Client eine Methode zur Verfügung geben möchte die selbst ein Dataset liefert. Wie
die Daten zusammengezogen werden, soll der Client nicht erfahren, oder die Daten
werden nach einer Logik aus mehreren Selects, und temporären Arrays gebildet. Der
Client soll die Logik nicht kennen. Er soll einfach nur das Ergebnis konsumieren können.
So meine Vorstellung. Deshalb die Methode!
Oder ist meine Vorstellung komplett Mist?
  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 19:56 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