Tadodataset 在调用的地方创建,在参数里传递一个var Tadodataset。

解决方案 »

  1.   

    rec1.Close;
    rec1.Free;
    这两句去掉
      

  2.   

    帮你去提提前吧.我觉的你没有必要这样做吧,多用一个Tadodataset不就什么都解决了!:)
      

  3.   

    不要下面两句,没关系的!
    rec1.Close;
    rec1.Free;
    你以后来Free也可以啊!
      

  4.   

    你应该这样使用:
    rec1:=TADODataSet.Create(self);
    并且不要释放它
      

  5.   

    对象是什么?
    指针又是什么?
    你没有弄清楚啊!
    在你的例子中,
    你可以将对象看成一块内存,
    Result是一个指向这块内存的指针,
    result:=rec1;
    rec1.Close;等于result.Close;
    rec1.Free;等于result.Free;
    这样,你的函数返回后,
    result不就变成空的了吗!
      

  6.   

    rec1本身就是一个指针,在没有Create之前是nil,Create之后是一个指向一个TADODataSet实例的指针,你可以用 IntToStr(Integer(rec1))得到指针的整数值。
      

  7.   

    谢谢大家的热情帮助和参与,总结各位的看法,我认为:vb 中的函数可以以函数名称返回一个对象的拷贝,而dephi 的函数返回的是指针。
    dephi 中最好不要通过函数返回对象,而是通过 var 参数来返回对象。
    liang_z(千山一刀之忍者神龟) 的方法虽然可以,但假如我在一个过程里面
    在 用 
    rec1:=GetRec(StrSql:string);
    rec2:=GetRec(StrSql:string):
    读取 rec1 的值则出错
    读取 rec2 的值则正确
    原因是 调用 rec2 时将 rec1 已经关闭了。好了,如果大家没有别的高见,我就解分了!