🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
3 messages
3 total messages Started by ExM Tue, 28 Aug 2018 08:28
DataSet from REST/JSON
#346731
Author: ExM
Date: Tue, 28 Aug 2018 08:28
4 lines
1516 bytes
Mam pytanie, 
jak realizujecie pobieranie danych do DataSet'ów w przypadku konieczności pobierania ich przez REST / JSON ?

Czy są do tego jakieś komponenty czy trzeba się ręcznie pobawić w formatowanie i wczytać dane np. do jakiejś wirtualnej tabeli (MemoryTable) ?
Re: DataSet from REST/JSON
#346732
Author: wloochacz
Date: Thu, 30 Aug 2018 16:09
17 lines
1872 bytes
W dniu 2018-08-28 o 10:28, ExM pisze:
> Mam pytanie,
> jak realizujecie pobieranie danych do DataSet'ów w przypadku konieczności pobierania ich przez REST / JSON ?
Nie realizujemy, bo to niepotrzebne :)

> Czy są do tego jakieś komponenty czy trzeba się ręcznie pobawić w formatowanie i wczytać dane np. do jakiejś wirtualnej tabeli (MemoryTable) ?
A jakże, są.
Rozuumiem, że na to nie wpadłeś?
http://docwiki.embarcadero.com/Libraries/Tokyo/en/REST.Response.Adapter.TRESTResponseDataSetAdapter

FireDAC coś tam ma, mORMot też ma.
Pytanie tylko czy to Twój serwer czy obcy?
Jeżeli obcy to dlaczego nie ODATA?
https://www.cdata.com/drivers/odata/firedac/

-- 
wloochacz
Re: DataSet from REST/JSON
#346733
Author: Jan Drawski
Date: Thu, 30 Aug 2018 20:41
65 lines
3292 bytes
W dniu 2018-08-28 o 10:28, ExM pisze:
> Mam pytanie,
> jak realizujecie pobieranie danych do DataSet'ów w przypadku konieczności pobierania ich przez REST / JSON ?

Osobiście właśnie też zaczynam zabawę z mORMotem.

> Czy są do tego jakieś komponenty czy trzeba się ręcznie pobawić w formatowanie i wczytać dane np. do jakiejś wirtualnej tabeli (MemoryTable) ?

Jeszcze nie korzystałem ale w pliku mORMot i SynCrossPlatformREST są 
klasy TSQLTableJSON. TSQLTableJSON dziedziczy z TSQLTable. Mozna znaleźć 
np: "UpdateFrom(const aJSON: RawUTF8"...

Można napisać SQLa wyciągającego strukturę tabeli i użyć Execute.

Trochę druciarstwa:
     Props.GetFields('users'{table name}, Fields);
     for I := 0 to Length(Fields) - 1 do
       writeln(
         Fields[I].ColumnName + ', ' +
         Fields[I].ColumnTypeNative + ', ' +
         IntToStr(Fields[I].ColumnLength) + ', ' +
         ColumnTypeToStr(Fields[I].ColumnType)
       );

Jeszcze coś z tej kategorii:
var
   Rows : ISQLDBRows; // - from Execute
...
     for I := 0 to Rows.ColumnCount - 1 do
       begin
         writeln(
           Rows.ColumnName(I) + ', ' +
           ColumnTypeToStr(Rows.ColumnType(I))
         );
       end;

Choć tu typy wyglądaja już tak (TSQLDBFieldType): ftUnknown, ftNull, 
ftInt64, ftDouble, ftCurrency, ftDate, ftUTF8, ftBlob.

Z tego co widzę, to raczej nie przesyła się struktur, choć, odbiegając 
trochę od tematu, jak się np. zapisuje zawartość FDMemTable do 
strumienia czy pliku to typy danych są choć format tego moim zdaniem 
jest mało czytelny.

Przy okazji, gdzieś znalazłem, może komuś się przyda, choć ja chwilowo 
nie widzę zastosowania:
procedure TestQuery(ODBCConnProp: TSQLDBConnectionProperties);
var
   SQLDBConnection: TODBCConnection;
   Q: TQuery;
begin
   SQLDBConnection := TODBCConnection.Create(ODBCConnProp);
   Q := TQuery.Create(SQLDBConnection);
   try
     Q.SQL.Clear; // optional
     Q.SQL.Add('select * from dbo.Station');
     Q.Open;
   finally
     Q.Free;
   end;
end;

-- 
Pozdrawiam
Janek
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads