您好,请教几个问题。望各位赐教1. 数据库相关,游标在数据库有哪些用途? 也就是说,在哪些情况下会想到使用游标 ? 
   游标 在功能上可否用 Delphi中的 
      while not ADOQuery1.eof  do
        begin
          ......
          next;
        end;  
  这种结构来替换?  还有,游标说到底是不是一个指针?2.在 Sql Server 2000中,可不可以在一个语句中用到2个或者多个数据库? 如:
    两个库db1,db2, 现在取db1中的表soucetable1中的字段 k1 存入 db2中的表 
   targettable1 ?该怎样写 ?  我用  数据库.数据表  不行3. TADOQuery .create(nil/self) 中, nil/self 指什么,它与具体创建的对象有何关系?4. COM 到底为何物? 一种接口特殊的组件? COM就是接口? COM是一个DLL或者可执行文件?
   COM 有何用途? 谢谢.

解决方案 »

  1.   

    1.游标是在需要对查询出每条记录进行单独处理时用的。
    2.我没用过SQL SERVER,不过我认为可以,要授权。
    3.create(nil/self)是指的owner,也就是这个控件的拥有者。
    4.com 是component object model 组件对象模型,是ole 和activex的基础,com有很多接口,用户可以通过接口来使用com,所谓的接口只不过是开发者做的一些属性,方法,就象你用vcl控件,不必理会里面怎么做的,他主要用于跨语言,跨平台的之间的通信
      

  2.   

    谢谢 lws0472(天外飞仙) 的答复 1. 您认可游标可以用
        while not ADOQuery1.eof  do
            begin
              ......
              next;
            end;  
       替代?  您对我说的游标可以理解为指针有异议吗?
     2. DatabaseName.TableName的写法不行,我试过,也许有别的写法
     3."所有者" 是哪种意义上的所有? 只有“if Ower Distory then Distory it “的含义吗?  
     4.对,COM我依然没有一个明晰的概念,一本书和一本书的说法不同...... 望继续指导
      

  3.   

    1. 游标需要用cursor定义,只要你能循环对每一条记录单独操作,就可以替代,上面你定义的也可以替代,。
      游标跟指针不一样,但有些数据库书中也把游标叫做指针,但跟pointer是完全不一样的。
    2。你有没有在数据库中对这个表的SELELCT权限授给另一个database,只有授权后才可以写为DatabaseName.TableName.
    3.所有者是if Ower Distory then Distory it 
      如果你定义为create(nil/self),在使用完后,你要自己负责释放。
    4。看一下<<delphi com开发>>这本书吧
      

  4.   

    看看李维的《com/com+》你会有一定的理解
      

  5.   

    lws0472(天外飞仙) : 谢谢您的回复“游标跟指针不一样,但有些数据库书中也把游标叫做指针,但跟pointer是完全不一样的。“ -----您能否具体讲一下自己的见解? 我认为,数据库中的游标和
    程序里的指针虽然两者的本质不同,但在功能上是相同的,都是用来定位操作,虽然一个是地址,一个是索引号;  您认为呢?您指的“完全不同“是什么含义? 能否讲一下,谢谢 链接多个库可以用以下写法: DatabaseName.dbo.TableName   ,加上所有者。 这个问题就算过去了:0 create(nil/self),在使用完后,你要自己负责释放。----当Ower为 nil时要自己手动释放,为Self也要手动释放吗? 应该不是,对马? 请您勘误 这一段以来,自认为看了不少关于COM和COM+的资料,但说法很多,我觉得对于接口应该有一个一致的定义,也许我的理解不对;还是请您勘误:),请大家指正 谢谢  
     
      
     
     
      

  6.   

    1.我的“完全不一样”的意思你已经自己作了解答。游标只能用于数据库,只能一条一条的处理,不能够跳跃。VCL中的控件大部分是用来显示的,你不能因为他们都是用来显示的就说他们一样。
    2。DatabaseName.dbo.TableName ,用这种写法是连接了多个库,不应该算是多个用户。
    3。create(nil/self)是拷的你的,应该是create(nil)要自己手动释放,self不用。
    4。COM接口包含的函数和过程用来操纵一个COM组件,但不同的COM组件函数过程是不一样的。接口分为两部分,接口定义部分和接口实现部分。就象函数,他也有函数定义部分,实现部分。
      引用开发人员指南的一句话,接口定义了一个对象的函数怎样在内存中布置的标准,是不是很笼统。有些东西理解他的意思,用法就可以了.
      

  7.   

    lws0472(天外飞仙) : 您好,再次感谢您的回复。
     
     能否就第二个问题
    “2。DatabaseName.dbo.TableName ,用这种写法是连接了多个库,不应该算是多个用户。“  我原来问的问题已经解决,现在你让我想到一个新问题: 多个用户
    怎么控制? 我想只要改变 DatabaseName.dbo.TableName 中的dbo为需要的用户即可,您说呢?
     
     4.就COM/COM+能否给我举例说明一下?  谢谢您   
      

  8.   

    2.同一个DBMS的多个用户,在联合使用时不需要每个都要连接,只需授权就可以了。“只要改变 DatabaseName.dbo.TableName 中的dbo为需要的用户即可”这个我倒是没用过,自己测一下吧。不知你这里的DBO指的什么,就ORACLE来说,他是用户级管理,但大部分人都认为一个用户是一个数据库,也就是在使用时,在一个数据库实例下建了一个用户(可以在一个实例下建N个用户),再在用户下建表,视图等。对于这种情况,你上面的写法可能不行,恐怕你的databasename也要改,这只是我相当然的认为,具体情况你自己测吧。
    4。举个例子,那内容就多了,我如果简略的说也没什么意思,若详细的说那就是长篇大论了,网上有很多例子,你最好自己做一个,在做的过程中肯定会遇到问题,然后去查资料,慢慢的就会精通了。
      

  9.   

    2.我用的Sql Server 2000 :)4.我就按你说的作吧:) 到时再请教:)另:  关于ADO的困惑......谢谢   我真的不明白,为什么会是这样。
    我们有个程序,有多个模块组成,每个模块都为独立的EXE。进程间用WM_COPYDATA通信。
    存在这样一个问题:一个模块在运行时总是出现:  
    “ [Microsoft][ODBC SQL Server Driver]连接占线导致另一个hstmt“
    但程序并不会死掉,后来将这个模块与数据库采用ADO直接连接(指定数据库服务器、数据库)
    避开ODBC,如上错误不再出现,但数据访问速度我觉得有点下降;但更不可思议的是:偶尔,
    程序会出现逻辑错误,这种错误从来没有出现过,而且没有规律,也就是说,第一次出现后用相
    同的条件测试跟踪但错误不可再现。我怀疑为ADO的问题,请您帮我分析一下原因,真的很蹊跷。 谢谢
    这几个模块都是采用想同的方式和数据库链接,公用一个DSN通过
    ODBC和数据库链接。 这个出问题的模块和别的模块的唯一区别就是 对数据库的存取很频繁;但我想着并不是问题的根源;我对数据库的操作都是用如下方式:procedure ExecSqls(ss:string);
    begin
      with TADOQuery.Create(nil) do
        begin
          try
            begin
              Connection:=TheConnection;
              Sql.Text:=ss;
              ExecSql;
            end;
          finally
            Free;
          end;
        end;
    end;
     
    这段代码我认为是安全的。 帮我分析一下,谢谢您
    还有,3星到4星要多少分?:):)
      

  10.   

    你的代码应该没有问题,肯定另有其它的原因,sql server我不熟,我一直是用oracle的,在oracle中,如果share pool和rollback segment太小的话,如果数据量太大会导致数据库出现异常,但重新启动数据库后就没有问题。不知sql server在数据的处理上是怎么管理的,这个问题我可能帮不上忙了。但你的代码是没有问题。  1个三角  100
      2个三角  200
      3个三角  500
      4个三角  1000
      5个三角  2000
      一星 5000
    再往上就要按名次来了
      

  11.   

    谢谢lws0472(天外飞仙) :);xiatianyun(夏天的云) : 在我看来,游标更像一种浏览纪录的“指针“,更象一种遍历某个纪录集的结构
      

  12.   

    欢迎大家讨论,欢迎大家指导,关于COM/COM+,关于数据库,关于Delphi,关于......谢谢问题同题
      

  13.   

    发送者 wjlsmail 发送时间 2002-11-7 14:35:43 CoolSlob您好,要是不忙,您能否帮我看看这个问题?谢谢
      其实我也我真的不明白,为什么会是这样。
      我们有个程序,有多个模块组成,每个模块都为独立的EXE。进程间用WM_COPYDATA通信。存在这样一个问题:一个模块在运行时总是出现:  
      “ [Microsoft][ODBC SQL Server Driver]连接占线导致另一个hstmt“
    但程序并不会死掉,后来将这个模块与数据库采用ADO直接连接(指定数据库服务器、数据库)避开ODBC,如上错误不再出现,但数据访问速度我觉得有点下降;但更不可思议的是:偶尔,程序会出现逻辑错误,这种错误从来没有出现过,而且没有规律,也就是说,第一次出现后用相同的条件测试跟踪但错误不可再现。
      我怀疑为ADO的问题,请您帮我分析一下原因,真的很蹊跷。 谢谢
    还有,您能否看看这个贴子,COM与COM+我实在不明白,那么多说法...
       http://expert.csdn.net/Expert/topic/1141/1141965.xml?temp=.1377375谢谢您----------------------------------------------------------让大家讨论吧~~ :)今天我没时间了,玩了很久了:)一下先
      

  14.   

    ok,谢谢CoolSlob的光临:),大家继续:)
      

  15.   

    1. 数据库相关,游标在数据库有哪些用途? 也就是说,在哪些情况下会想到使用游标 ?
        对这个问题的理解,我觉得是可以的。如果搂主用过PB的话就知道在PB中是用游标获取数据集,然后循环Fetch,就跟搂住说的一样。2.在 Sql Server 2000中,可不可以在一个语句中用到2个或者多个数据库? 如:
    在Oracle里面,至少这样子查询是可以。但是注意不是两个数据库,而是两个不同的表空件。至于编辑的话,我没有做过。3. TADOQuery .create(nil/self) 中, nil/self 指什么,它与具体创建的对象有何关系?对于每一个从TComponent继承下来的空件,他都可以有一个拥有者,在拥有者被指定后,如果该用有着被释放,那么这个控间也会被释放。
    如果你 ADOQ := TADOQuery.Create(Form1)。那么你就只要管理Form1的内存释放,不需要ADOQ.Free了。4. COM 到底为何物? 一种接口特殊的组件? COM就是接口? COM是一个DLL或者可执行文件?
       COM 有何用途?
    至于COM是什么。就我现在的了解的话。COM不是一种实物,而是一种标准。它规定了一些实现的标准。如果一个对象实现了 IUnKown,IQueyrIntface, AddRef那么我们可以认为这是一个COM了。也就是说我们平常说的COM就是符合COM规范的一些实现。
       DLL,EXE, OCX都有可能实现对COM的支持。这些东西的话可是说一实现COM的一种具体方案。所以主要是看这些文件包含的东西是什么。如果它里面包含的东西是符合COM标准的。那么我们就可以称之为COM组件。
        COM标准主要是想实现二进制级别的对象复用。COM标准是跨平台的。
      

  16.   

    Create(AOwner: TComponent);
     Owner属性是指组件的所有者,它负责组件的创建和释放.系统默认窗体上的所有组件的Owner是窗体,而窗体的Owner是Application.
      delphi中一般是在窗体类的作用范围内编程,因此,self指窗体,是一个隐含的对窗体的引用(很像C++中的this).如果超出了窗体类的作用范围,self就是其它的组件或类.
    create(nil) 就是不给创建的对象指定Owner, 因此要自己动手Free.
    create(self) 就是给创建的对象指定Owner,但不一定是一个窗体.可以不用管Free,
      

  17.   

    谢谢 ColdWolf(天边流星)先生对COM的精彩解释,让我懂了一些:)
    谢谢 case_sheng(宁静致远)先生对 Owner的精彩阐述,谢谢欢迎各位继续给出自己的见解 ,谢谢