一、连接

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;

delphi xe -芒果数据库(FDConnection,DataSource,FDMongoQuery,FDMongoDataSet)连接,查询(展示数据),这里有mongodb为例子的更多相关文章

  1. DELPHI XE MYSQL数据库操作类 MYSQLHELPER

    注: 无需odbc配置 {* * MySQL Helper v1.0 * 2015.6.19 * 说明: * 这是一个操作MySQL的类,该类必须和libmysql.dll,dbxmys.dll两个文 ...

  2. 三十二:数据库之SQLAlchemy.query函数可查询的数据和聚合函数

    准备工作 from sqlalchemy import create_engine, Column, Integer, String, Floatfrom sqlalchemy.ext.declara ...

  3. Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决(对三层的例子配置有帮助)

    Delphi IDE中包含一个Data Explorer的组件,如下图所示: 该组件基于dbExpress(包含TSQLConnection.TSQLDataSet.TSQLQuery.TSQLSto ...

  4. Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决

    Delphi IDE中包含一个Data Explorer的组件,如下图所示: 该组件基于dbExpress(包含TSQLConnection.TSQLDataSet.TSQLQuery.TSQLSto ...

  5. Delphi XE 10 跨平台三层数据库应用教程

    Delphi XE 10 跨平台三层数据库应用教程 前言: Delphi XE 开始越来越庞大,比经典的Delphi7难用,但依然是目前所有跨平台开发工具中开发效率最高.最容易上手的,其快速设计RAD ...

  6. delphi 2010与delphi XE破解版的冲突

    在系统中同时安装了Dephi 2010LITE版与Delphi XE lite后,总是会有一个有问题 是因为两者都是读取C:\ProgramData\Embarcadero目录下的license文件, ...

  7. [转载]: delphi中XLSReadWrite控件的使用(2)---delphi XE下安装

    一.下载 官方下载网址: http://www.axolot.com/components/download.htm 从这里可以下载到从Delphi5到DelphiXE全部支持的版本. 二.软件安装 ...

  8. delphi XE Berlin ReadProcessMemory WriteProcessMemory

    delphi  XE,Berlin [dcc32 Error] Unit9.pas(93): E2033 Types of actual and formal var parameters must ...

  9. FastReport for delphi xe 安装步骤

    FastReport for delphi xe 安装步骤 1.先关闭DELPHI:2.下载后解压到一个目录,比如:D:FR:3.打开D:FR,运行recompile.exe ->点击" ...

随机推荐

  1. LNMP架构三

    Nginx代理(正向代理) 正向代理:让局域网内的用户 访问外网,外网不能访问局域网, 场景:如果要从国内访问美国的服务器会很慢,这时候就可以找个香港服务器做代理,香港访问美国是很快的. 代理服务器作 ...

  2. atitit.html5动画特效----打水漂 ducks_and_drakes

    atitit.html5动画特效----打水漂  ducks_and_drakes 1. 原理 1 2. fly jquery插件 1 3. ---------code 2 4. 参考 4 1. 原理 ...

  3. 用verilog表示两个4x4矩阵的乘法运算?及单个矩阵的求逆

    input[63:0] A0, //A0表示A矩阵的第一行 其中A0[63:48] A0 [47:32] A0[31:16] A0 [15:0]分别表示第一行中的四个元素(每个元素16位表示),下同i ...

  4. IntelliJ IDEA Mybatis Plugin 破解安装

    破解文件和截图全部在附件中,亲自破解,在使用中,感觉很棒: https://files.cnblogs.com/files/icenter/carck.zip

  5. pycharm-community-3.1.1.tar.gz下载

    国外服务器着实慢, 下载地址:http://yun.baidu.com/share/link?shareid=2521912381&uk=3020189984

  6. phpcms 初次建站心得

    最近要给客户建个网站,考虑到效率问题,直接找了个开源的phpcms,(现在被收购了,以前的时候我还知道是个开源的).由于对这个东西不熟悉,原来就是了解一些,php的建站系统,php的MVC框架.故此, ...

  7. 使用randA()生成randB()

    randA()表示可以随机生成1--A的整数 rand7()生成rand5() int Rand5(){ int x = ~(1<<31); // max int while(x > ...

  8. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...

  9. SonarQube代码质量管理平台安装与配置

    1.安装说明 操作用户:root 软件下载目录:/root/opt 无root权限时,放到自定义目录即可 ================ 2.预置条件 1.需要JDK1.6+支持: 2.需要Mysq ...

  10. 配置Docker中国区官方镜像http://get.daocloud.io/ 很好的一个源http://get.daocloud.io/#install-docker

    https://www.daocloud.io/mirror#accelerator-doc 配置Docker中国区官方镜像http://get.daocloud.io/ 很好的一个源http://g ...