1

kinvey.com を使用していますが、取得しようとするたびにManga._idnull が返されます。理由を理解するのを手伝ってもらえますか?

TManga = class
  strict private
    FSite,
    FManga,
    FID: String;
  published
    property Site        : string  read FSite        write FSite;
    property Manga       : string  read FManga       write FManga;
    property _id         : string  read FID          write FID;

/////////////////////////////////////////////// /////////////////////////

var
  Mangas: TBackendObjectList<TManga>;
  Manga : TManga;
  QueryStr: TArray<string>;
  i: Integer;
begin
with xQuery do
  begin
    Execute;
    Mangas := TBackendObjectList<TManga>.Create;

    QueryStr := TArray<string>.Create('');

    xStorage.Storage.QueryObjects<TManga>('xxxx' ,QueryStr ,Mangas);

    with xListBox do
    begin
      Items.BeginUpdate;
      try
        Items.Clear;
        for I := 0 to Mangas.Count -1 do
        begin
          Manga := Mangas.Items[I];
          items.add(Manga.Site + ' - ' + Manga._id) // Manga._id this is everytime null 

        end;

      finally
        Items.EndUpdate;
      end;

    end;
  end;

http://i.hizliresim.com/M94QPN.png

4

2 に答える 2

0

QueryStr の配列要素の 1 つで値 'fields=_id' を使用しようとしましたか?

于 2014-09-17T19:10:49.957 に答える
0

Kinvey API は _id 列を単純な列としてではなく、レコードのオブジェクト ID として取得するため、列 _id は常に null です。マンガ レコードのオブジェクト ID を取得するには、次のような変数を追加する必要があります。

  oEntity: TBackendEntityValue;

したがって、「for」ステートメントのこの行のすぐ下:

  Manga := Mangas.Items[I];

次の 2 つの新しい行を追加できます。

oEntity := FBackendList.EntityValues[Manga]; // Gets the Kinvey object
Manga._id := oEntity.ObjectID; // Sets the _id property of the current TManga instance

Kinvey コレクションに新しいレコードをいつ追加するかは、重要なことの 1 つです。新しいレコードを作成する前に、新しい TManga アイテムの _id プロパティに書き込む必要はありません。ただし、新しいレコードを挿入した直後に、Kinvey から取得する必要があります。このコードは、Embarcadero の ToDo サンプルから改作されました。

procedure TDataModule1.AddBackendItem(const AItem: TManga);
var
  oEntity: TBackendEntityValue;
begin

  // After the execution of this command the new record will be inserted in Kinvey, and the variable oEntity will get the respective object ID 
  BackendStorage1.Storage.CreateObject<TManga>(
    TMangaNames.BackendClassname, AItem, oEntity);

  AItem._id := oEntity.ObjectID; // Updates the property _id of the current instance of TManga

  FBackendList.Add(AItem, oEntity);

end;

お役に立てば幸いです。

于 2015-04-01T07:11:20.070 に答える