1.高手都说Sql语句要在server端构造,但怎么实现构造啊,迷茫!!!希望高手说说具体怎么做的!
2.不知道clientdataset和datasetprovider具体是干什么的,我试了一下不用这两个控件,直接传个sql语句过去,一样可以啊.
3.看到大家经常用applyupdate,我怎么不知道在哪里用啊,比如我client那里有个Edit 和 button!我点button就把edit.text插入一个表里,象这样最简单的功能是怎样实现?
4.如果用clientdataset的commandtext,数据在程序里的流程具体是怎么走的?是不是CDS把commandtext传给providerdataset,然后provider传给dataset,然后执行!
5.问题问的很乱,大家可能看着晕,说明了我对三层的迷茫!:(

解决方案 »

  1.   

    2、客户端通过Tclientdataset组件获取数据,而Tclientdataset组件则联接上TRemoteServe组件(或者TDcomConnection等),TRemoteServe组件通过Midas。dll文件和服务器端应用程序进行通讯
      

  2.   

    简单的说:服务器端应用程序通过远程数据模块的Tdatasetprovider组件获取数据同时提供了IAppServer接口向客户端提供服务远程数据模块中的Tdatasetprovider组件和数据集组件连接而直接获得数据。多层结构其他部分和两层结构就相同了。
      

  3.   

    我也是刚刚开始用MIDAS,我也有你这样的问题,但我现在开始明白了,放服务器端就是在服务器端定义一个方法,如GetRight,只要传入一个参数用户名,然后返回一个权限的值就行了,所以可能会是这样子的:
    客户端用DCOMConnection1.AppServer.GetRitht('admin');来调用,
    服务器端用:
      function GetRight(User: WideString):OleVariant;
      var
        sSQL: string;
      begin
        sSQL := 'Select * From tables Where UserName = ''' + User + '''
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add(sSQL);
        ADOQuery1.Open;
        if not ADOQuery1.eof then
        begin
          //加入取值之类的
        end;
        Result := //返回字符串值等
      end;其中的ADOQuery1控件完全可以不与TDataSetProvider控件连系在一起,但一定要能访问到数据库就行了,而客户端你看到了调用时用的是TDCOMConnection的AppServer,所以并不一定会用到TClientDataSet控件(这是我推测的,昨天这样做的还没有测试,但我在客户端还是用TClientDataSet与TDCOMConnection控件联系起来,因为怕出问题嘛),所以客户端就叫瘦客户端一点没有错!
      

  4.   

    还有要看的书有:李维的Delphi 5.x ADO MTS COM+应用,DELPHI 5开发指南,Delphi 5....--Database与MIDAS开发我极力推荐这三本书,可以从网上DOWN到!因为我就是几天前起步到现在就基本上明白了MIDAS技术,就是这样,当然还要看大家对程序设计的悟性有多高了。
      

  5.   

    那个文件太大了,可以到www.pcbookcn.com下载!不过只有前四章,后面的要在另一个站上可以DOWN下来www.china-pub.com,有十几兆,不过一般看了前四章就差不多了。
      

  6.   

    现在补充第三点:
    多层系统中,用户在客户端调用Tclientdataset组件的post方法时,只是把数据保存在客户端的内存中,并没有传送到服务器端,并写入数据库中,要写入这些变化就要用applyupdate方法前三点懂了,四和五就不用写了
    呵呵
    找本书看看吧
    推荐李维写的书GoodLuck
      

  7.   

    to JoeSong:
    谢谢你啊!我也是这几天刚学三层.看了你上面的理解和我理解的差不多,呵呵!就是因为可以绕开clientdataset和provider,所以我才问这两个控件的具体作用(最突出的优势).
    按我的理解(不知道JoeSong兄是不是这样想),增,删,改 都写在server端,那就用不到clientdataset和provdier了吧!但查询怎么做呢?
    还有一点,在增加的时候,client要传很多参数过去吧,这些参数怎么组织呢?到了server又怎么把他们一一对应到相应的数据库字段啊!..
      

  8.   

    对了,
    <Delphi 5.X ADO/MTS/COM+高级程序设计篇>这本书后几章,我一直没找到在哪里下,各位能推荐个地址么?
      

  9.   

    从两层到多层,楼主需要转换一下编程思路了。
    两层是SQL语句在客户端的程序里,所以你把SQL语句提交给数据库服务器,三层中,你把两层中的客户端分成两部分,一部分管界面显示,另一部分管数据操作,你把数据操作的那部分放到服务器上当作中间层,所以SQL语句就到服务器上了,想象一下ASP是怎么做的,浏览器就象客户端,ASP的网页就象中间层(当然不能这麽说,只是一个类比,不过好像差不多哟^_^)。
    剩下的就不会了,没用过MIDAS:)
      

  10.   

    To eastliangliang(青苹果)(业精于勤荒于嬉):
    大哥不用MIDAS,用的啥啊?我以前做b/s的,哎,前一段又做c/s,现在做c/a/s,思路有点乱了!:(对新增一条记录,在client把参数传过去,如果参数很多的话,怎么处理?
    是不是在server里建一个方法,然后这个方法有N个in的参数?????
    不知道大家是怎么处理?教教我啊!
      

  11.   

    Delphi里做三层有MIDAS,它是Borland的技术,我是直接用MTS/COM+,没办法,ASP里怎么加载ClientDataset:),很多参数的话,用数组,或者把参数封装到XML字符串里,MIDAS也不过是一个打包的技术,只是功能很强大而已。
      

  12.   

    用数组的话,要用variant的吧,我看李维的书里说这个负荷很大!:(
    xml没试过!
      

  13.   

    返回记录集的问题看一下我当初问那个问题时别人如何回答的吧,
    http://expert.csdn.net/Expert/TopicView1.asp?id=2548270我的实现过程是这样,几乎ClientDataSet可以不用到,但Provider不可能不用到,因为要用DCOMConnection.AppServer.方法名   来调用方法,所以如果DCOMConnection没有与Provider连接的话,如何调用?是不是?参数可以通过在COM+中即中间层定义属性实现,如果你会COM+那就很好办了,其实书上讲的未必都很能说明问题,我觉得李维的那本ADO MTS COM+的书也是如此,好像有点你看了我的书就会把我的知识窃走一样,真正从0起步时有用的内容往往不见得多。多想一想之间的关系也许会有帮助吧!
      

  14.   

    比如说:我新增一个学生的信息:client端要传过去姓名,学籍,班级,年纪,...等等非常多的参数!还有可能要传另外一些参数去更新另一个表.
    象这样的情况怎样处理?
    如果在server端,定义方法属性的话,比如定义一个NewStu(这里要加N个参数),如果每个参数对应一个属性的话,我不大清楚怎么做?
    能给我发一段代码看看怎么实现的么?
      

  15.   

    打开类型库Type Library,在里面增加属性和方法,增加了以后并保存就可到相应的PAS文件中找到相对应的方法或属性的框架了,只要在里面直接加代码就行了,这是最基本的东东,随便找本书就能看到有关资料的。
    如要定义那个方法可能会有一个:
    function NewStu(参数: 类型....):返回类型;
    begin
      //这里加代码便是了
    end;
    就是这样子。
      

  16.   

    写一些通用的产生SQL的function在appserver端