FDMemTable登録時におけるDataType判定

解決


Hide  2023-04-11 05:58:49  No: 150935  IP: 192.*.*.*

お世話になります。
Delphi11.3 ENTで開発を行っております。
JSONで取得したデータをFDMemTableにデータを登録する際に、次の様にデータ型を判定して登録を行おうとしておりますが、
「'TFieldType' と 'TGeneratorFieldType' には互換性がありません」とエラーになってしまいます。
function TDMSample.InitializeMaster: Boolean;
var
  // データJSONValue
  resJval, recJval: TJSONValue;
  // 対象MemTable
  mem: TFDMemTable;
  fdf: TFieldDef;
  val: TJSONValue;
  :::中略:::
            for var j := 0 to TJSONArray(resJval).Count-1 do
            begin
              // 配列の1要素を取り出す
              recJval := TJSONArray(resJval).Items[i];
              // 対象MemTableのフィールド数分繰り返し
              for var k := 0 to mem.FieldDefs.Count-1 do
              begin
                // FieldDefs
                fdf := mem.FieldDefs[k];
                // JSONから値を取得
                val := recJval.FindValue(fdf.Name);
                if Assigned(val) then
                begin
                  // データ型判定
                  case fdf.DataType of
                    ftString:  mem.FieldByName(fdf.Name).AsString := val.ToString;
                    ftInteger: mem.FieldByName(fdf.Name).AsInteger := val.Value.ToInteger;
                  end;
                end;
              end;
            end;

確かに、ftStringはTGeneratorFieldTypeにもTFieldTypeにも存在している模様ですね。
そこで、case文の中を
           TFieldType(ftString):  mem.FieldByName(fdf.Name).AsString := val.ToString;
           TFieldType(ftInteger):  mem.FieldByName(fdf.Name).AsString := val.ToString;
の様に型キャストするとエラーは消えましたが、対応としては正しいでしょうか。

編集 削除
mam  2023-04-11 08:19:41  No: 150936  IP: 192.*.*.*

  // データ型判定
  case fdf.DataType of
    Data.DB.ftString:  mem.FieldByName(fdf.Name).AsString := val.ToString;
    Data.DB.ftInteger: mem.FieldByName(fdf.Name).AsInteger := val.Value.ToInteger;
  end;

ではだめでしょうか。外していたらすいません。

編集 削除
Hide  2023-04-11 10:18:17  No: 150937  IP: 192.*.*.*

mamさん
いつも有難うございます。
正しく判定できる様になりました。※自分が投稿した型キャストの方法ですと何故か型を正しく判定できませんでした。
しかしながら不思議なのは、同一ソース内で、Data.DBが、「未定義の識別子」でエラーになる場合があります。

編集 削除
Hide  2023-04-11 10:41:04  No: 150938  IP: 192.*.*.*

Data.DBが見えなくなってしまう事象は発生しなくなりました。
どうやら、with FDMemTable1 do・・・の中にData.DBを記述してしまうと「未定義の識別子」が発生してしまう模様です。
※根本的な原因は掴み切れてはおりませんが、お蔭様で数日悩んでいた事が解決できましたので、解決済にはさせて頂きます

編集 削除