请教delphi 中用ado进行数据库开发的问题………..我以前有pb开发 ﹐不知道ado 与pb的datawindow 有什么区别﹐
即ado对后能数据进行读取与更新时 ﹐无非就是向数据库服务器发送了dml 语句 ﹐不知ado 控件对数据进行操作是是如何来构造DML SQL 语句的 ﹐
如 ﹐我在前台 的一个控件时改变了一个值 ﹐调用ado的更新函数后 ,它是如何来构造该update 语句的。。初接触ado ﹐请高手们指点点………….

解决方案 »

  1.   

    adoquery1.sql.add('insert into table1(A,B,C) values(:A,:B,:C)');
    adoquery1.sql.add('update table1 set A='0001',B='abcd' where ....');
    ......
      

  2.   

    回复 赤脚
    这个写入sql语句﹐然后调用执行我了解 ﹐我是想问 ﹐
    如 ﹕窗体上一个dbgrid 控件联上了某数据源﹐如果我修改了该 dbgrid 显示
    控件上的数据﹐那关闭窗体后﹐后台数据也被修改了﹐又因对后台的数据修改﹐只能通过DML SQL语句﹐但不知该ado控件﹐是如何来根据前台dbgrid 数据的变化来自动产生一些sql 语句给后台的 . 请高手讲解讲解啊 ﹐我以前一直用
    Pb 开发 ﹐听人说ado 处理方式与pb 的datawindow 控件相似 ﹐故想了解了解 。
      

  3.   

    補充﹕
    也即是:
    當修改了dbgrid 上的數據后,調用post 方法 ﹐后台數據也就跟著變化﹐即這個使后台數據變化的
    sql 語句﹐ado 控件是依據什么來產生的。請老手們回復啊 ﹐我會加分的。
      

  4.   

    我没深究过后台的处理过程 但是我想 
    你想知道的
    在DBGrid以及几个ADO控件的几个类的源码以及帮助文件中可以找到
      

  5.   

    pb 中的datawindow 是直接把数据库中的内容显示出来的.
    delphi中的ado用来连接数据库并对数据库进行操作的,通过发送dml.
    在dbgrtid中修改了以后,在数据库中已经起了变化.有个post的原因.post就和pb中的update一样的
    with  ado do
    begin
       close;
       sql.text:='insert into table1(A,B,C) values(:A,:B,:C)'
       execsql;
      \\ 其中:A,:b,:C是参数;
    end;
      

  6.   

    回复﹕wtg476(起飞) 
    我想了解delphi 中ado控件如何构造dml语句 ﹐因为如困不清楚﹐那后始数据被变更了﹐自已可以都不清楚 ﹐我想ado 应该与pb的datawindow控件相似﹐pb 是通过四个缓冲区 及新增﹐修改﹐删除﹐等几种标志来反映前台数据的变化﹐然后通过update函数 ﹐即可产生想应的dml 语句。 但不知ado是如何处理的。如果我在dbgrid 里新增了一条记录 ﹐然后写入后台﹐应如何做呢 .急请高手讲解啊………….
      

  7.   

    俺没看懂你问的啥意思呢,我给个代码你看看,不知道是不是你要的!
    procedure TForm1.btn2Click(Sender: TObject);
    begin
      try
      qry1.First;
      qry1.Filtered := True;
      qry1.FilterGroup:=fgPendingRecords ;
      while not qry1.Eof do
      begin
        Case qry1.UpdateStatus of  //缓存状态
          usDeleted:
            begin
              ShowMessage('Delete');
              ShowMessage(qry1.FieldValues['uName']);
            end;
          usInserted:
            begin
              ShowMessage('Insert');
              ShowMessage(qry1.FieldValues['uName']);
            end;
          usModified:
            begin
              ShowMessage('Edit');
              ShowMessage(qry1.FieldValues['uName']);
            end;
        end;
        qry1.Next;
      end;
      qry1.Filtered:=True;
      qry1.FilterGroup:=fgNone;    qry1.UpdateBatch();
        Application.MessageBox('保存成功!', '系统提示', MB_OK +
          MB_ICONINFORMATION);
      except
        Application.MessageBox('保存失败!', '系统提示', MB_OK + MB_ICONWARNING);
      end;
    end;
      

  8.   

    感谢楼上回复﹗
    因对于sql server ﹐oracle等后台管理工具﹐如果我们想读取数据 , 写入数据或修改数据, 删除数据等 ﹐必须通过DML (select , insert ,update,delete ) 三种语句来完成﹐ ado 控件应也不例外﹐ 如你的程序中调用adoquery . post ,那你的变更数据就被写入了后台 .。我的意思就是ado 控件将变更数据写入后台 的dml 语句﹐是依据什么来产生的 。如何來查看該語句 . 请高手们讲解一下 ﹐我以前用pb ﹐知道pb中datawidow 控件是如何构造sql语句来更新后台 ﹐故有此一问 还请大家指点啊…….
      

  9.   

    其实无非就是送一条执行的sql语句执行而已
    with adoquery do 
    begin
      close;
      sql.clear;
      sql.add('select * from dcb_asset');
      open;
    end;
      

  10.   

    回復樓上﹕
    高手﹐能講說細點嗎 ﹖我知道 是批語行一條sql語句﹐但該sql語句是如何來的啊..............
      

  11.   

    看了一下楼主的问题和各位的回答,以及楼主后来问的问题;
                該sql語句是如何來的啊
        这个问题就象是说。
      

  12.   

    dbgrid变数据库也变,你用的是adotable吧,adotable显示的是一个物理表啊,当然可以啊