postgresql – 在Delphi上使用FireDAC从sql表中获取text []值
发布时间:2020-12-13 18:05:57 所属栏目:百科 来源:网络整理
导读:在带有简单查询’select * from data’的pgAdmin上,我只得到一条包含字段类型text []的记录,其值为'{“1”,“2”,“3”}’. 以下简化代码仅返回值的“1”部分: function GetData: string;var q: TFDQuery; s: string; i: integer; av: array of variant; as
在带有简单查询’select * from data’的pgAdmin上,我只得到一条包含字段类型text []的记录,其值为'{“1”,“2”,“3”}’.
以下简化代码仅返回值的“1”部分: function GetData: string; var q: TFDQuery; s: string; i: integer; av: array of variant; as: array of string; begin result:=''; q:=TFDQuery.Create(nil); try q.Connection:=FDConnection; q.SQL.Text:='select * from data'; try q.Open; while not q.Eof do begin //s:=q.FieldByName('data_array').AsString; //s = '1' //as:=q.FieldByName('data_array').AsVariant; //as length = 1; as[0] = '1' av:=q.FieldByName('data_array').AsVariant; for i:=0 to Length(av)-1 do s:=s+av[i]; //av length = 1; s = '1' q.Next; end; result:=q.RecordCount; except result:=-2; end; finally q.Free; sl.Free; end; end; 获取整个数据的方法是什么?
虽然
Embarcadero documentation说你应该使用TArrayField cast(它适用于Interbase):
procedure TFrmMain.Button1Click(Sender: TObject); var F: TArrayField; V: Variant; begin F := TArrayField(q.FieldByName('data_array')); V := F.FieldValues[0]; ShowMessage(VarToStr(V)); end; 它似乎不适用于PostgreSQL(至少对于C builder XE6我只得到第一个数组项). Firedac将PostgreSQL数组字段作为嵌套数据集处理,因此如果上述内容对您不起作用, TDataSetField * TT = (TDataSetField*)q->FieldByName("data_array"); TT->NestedDataSet->RecNo=2; // or while(!q->NestedDataSet->eof) etc. ShowMessage(TT->NestedDataSet->Fields->Fields[0]->AsString); 在您的情况下翻译为delphi的wchich看起来像(可能拼写错误): ... var TT: TDataSetField; ... begin TT:= TDataSetField(q.FieldByName('data_array')); while not TT.NestedDataSet.Eof do begin s:= s+ TT.NestedDataSet.Fields.Fields[0].AsString; //0 - only single dimension supported TT.NestedDataSet.Next; end; end; 亲切的问候 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |