一、连接
1、FDConnection:创建一个临时连接定义
资料:http://www.cnblogs.com/zhenfei/p/4105515.html
连接芒果数据库:选则Mongo(芒果),服务器地址。
2、FDMongoQuery:与数据库、表关联,并与上面的Connection连接。
直接选择连接
代码连接
FDMongoQuery1.Close; FDMongoQuery1.FieldDefs.Clear;
// Setup new connection FDMongoQuery1.DatabaseName := EditDatabase.Text; FDMongoQuery1.CollectionName := EditCollection.Text; FDMongoQuery1.QMatch := EditMatch.Text;//查询条件 FDMongoQuery1.QSort := EditSort.Text;//排序 FDMongoQuery1.QProject := EditProjection.Text;//显示字段(0不显示,1显示) dsQuery.DataSet := FDMongoQuery1; FDMongoQuery1.Open;
FDMongoQuery1.FieldDefs.Count;//最外层字段个数
FDMongoQuery1.FindField("grades") != NULL//找到某字段
FDMongoGQ_devch.QProject:='{"name":1}';//要显示的字段
FDMongoGQ_devch.QProject:='{"vdev.channels.2":0,"vdev.channels.32dplqsx":0}';//不要显示整个内嵌
FDMongoGQ_devch.FindField('_id').Visible:=False;//隐藏不需要显示的字段
例子:
procedure TFrm_0201_dev.ds_CHSDataChange(Sender: TObject; Field: TField); var sdev,sch,styep:string; begin if(dbgrd_ch.DataSource.DataSet.FieldByName('_id').Value<>null) then begin sdev:=dbgrd_ch.DataSource.DataSet.FieldByName('dev').Value; sch:=dbgrd_ch.DataSource.DataSet.FieldByName('ch').Value; styep:=dbgrd_dev.DataSource.DataSet.FieldByName('type').Value; if(styep='VIRTUAL')then begin FDMongoGQ_devch.Close; FDMongoGQ_devch.Query.Options.Explain := False; FDMongoGQ_devch.FieldDefs.Clear;
FDMongoGQ_devch.QMatch:='{"dev":'''+sdev+'''}'; FDMongoGQ_devch.QProject:='{"vdev.channels.'+sch+'.inputs" :1,"vdev.channels.'+sch+'.unit":1}'; ds_devch.DataSet := FDMongoGQ_devch; FDMongoGQ_devch.Open; FDMongoGQ_devch.FindField('_id').Visible:=False; FDMongoGQ_devch.FindField('vdev').Visible:=False; FDMongoGQ_devch.FindField('vdev.channels').Visible:=False; FDMongoGQ_devch.FindField('vdev.channels.'+sch+'').Visible:=False; end;
end
else Exit; end;
二、批量修改,最后统一保存
cachedUpdates :true;//试过可以
3、DataSource:数据源控件用于数据集控件和数据显示控件的链接作用,比如grid 等一些数据显示控件都有 datasource 属性。
4、将grid与datasource连接就可以了。
5、为空时:if(FDMongoGQ_phdev.IsEmpty and (FDMongoGQ_phdev.FieldDefList.Count = 1)) then exit;
二、查询
1、一个grid查询
procedure TFrm_0201_dev.Act_QueryExecute(Sender: TObject); var q:TMongoWireQuery; d:IJSONDocument; i:Integer; begin BuildQuery; FDMongoQuery1.Open;
end;
procedure TFrm_0201_dev.BuildQuery; var scondition :string; begin if(Trim(edt_dev.Text)<>'') then scondition:=' {"dev" :{$regex:'+''''+edt_dev.Text+''''+'}}'//正则表达式:进行模糊查询 FDMongoQuery1.Close; FDMongoQuery1.Query.Options.Explain := False; FDMongoQuery1.FieldDefs.Clear;
FDMongoQuery1.QMatch := scondition; end;
2、两个grid联动
procedure TFrm_0201_dev.DataSourceDataChange(Sender: TObject; Field: TField); var DataSetField: TDataSetField; begin BuildQuery1; FDMongoQuery2.Open;
if(FDMongoQuery2.FindField('tags') <>nil) then begin DataSetField :=FDMongoQuery2.FieldByName('tags') as TDataSetField;//这个是数据集,后面会讲到,用来展示数组 ds_tags.DataSet := DataSetField.NestedDataSet; end; end;
procedure TFrm_0201_dev.BuildQuery1; var scondition:string; begin sID:= DBGrid1.DataSource.DataSet.FieldByName('_id').Value ; FDMongoQuery2.Close; FDMongoQuery2.Query.Options.Explain := False; FDMongoQuery2.FieldDefs.Clear;
FDMongoQuery2.QMatch:='{"dev":'''+sID+'''}';//查询条件 DataSource1.DataSet := FDMongoQuery2; end;
3、芒果数据库里,数组的展示,用到TDataSetField
网上的图
自己的例子,如tags数组
procedure TFrm_0201_dev.DataSourceDataChange(Sender: TObject; Field: TField); var DataSetField: TDataSetField; begin BuildQuery1; FDMongoQuery2.Open;
if(FDMongoQuery2.FindField('tags') <>nil) then begin DataSetField :=FDMongoQuery2.FieldByName('tags') as TDataSetField; ds_tags.DataSet := DataSetField.NestedDataSet; end; end;
|
请发表评论