急急急~~!!我已经用asp得到数据库的数据集(50分)

  • 主题发起人 主题发起人 ivan526
  • 开始时间 开始时间
I

ivan526

Unregistered / Unconfirmed
GUEST, unregistred user!
我已经得到recordset,可以显示数据库内容,但是呢
除了显示内容之外,其他操作都不行啊。
例如 rs.movenext,rs.close,rs.recordcount都不行啊,怎么回事呢
部分源码:
uses
ComObj, ActiveX, AspTlb, Project1_TLB, StdVcl,ADODB_TLB,ADODB,dm;
type
Taspcom = class(TASPObject, Iaspcom)
private
FDM:Taspcom_dm;
DataConnection: OleVariant;
protected
procedure OnEndPage;
safecall;
procedure OnStartPage(const AScriptingContext: IUnknown);
safecall;
function Get_ADORecordSet: OleVariant;
safecall;
function GetADOConnection: OleVariant;
safecall;
public
procedure Initialize ;
override;
destructor Destroy;
override;
end;

implementation
uses ComServ;
procedure Taspcom.OnEndPage;
begin
inherited OnEndPage;
end;

procedure Taspcom.OnStartPage(const AScriptingContext: IUnknown);
begin
inherited OnStartPage(AScriptingContext);
end;

destructor Taspcom.Destroy;
begin
if FDM.ADOQuery1.Active then
FDM.ADOQuery1.Close;
FDM.Free;
inherited;
end;

procedure TASPCom.Initialize;
begin
inherited;
try
FDM := Taspcom_dm.Create(nil);
except
;
//do
something
end;
end;

function Taspcom.Get_ADORecordSet: OleVariant;
begin
//Result := nil;
try
FDM.ADOConnection1.Connected:=true;
FDM.ADOTable1.Active:=true;
result:=fdm.ADOTable1.Recordset as RecordSet;
{with FDM.ADOQuery1do
begin
if Active then
Close;
SQL.Clear;
SQL.Add('SELECT * FROM products');
Open;
end;
Result := FDM.ADOQuery1.Recordset ;
}
except
;
// Todo
Something
end;
//result:='tset';
end;
function Taspcom.GetADOConnection: OleVariant;
begin
Result := DataConnection;
end;
 
各位大富翁,是不是看分太少,都不回答我的问题啊。我剩下的分也不多了,我真的很急知道这个问题的答案,帮帮我吧。。。
谢谢各位大富翁。。
 
给你点经验:
用VCL的方法获得recordset后,因为VCL在源代码中会在整个程序结束时释放所有资源(也就是在你调用组件结束时),所以他当然连recordset、以及recordset和数据库之间的关系也释放掉了,你当然不能进行rs.delete、rs.insert等等操作了!
如果你想通过组件获得的rs也能进行rs.delete等操作,那么就不要通过vcl获取,直接建立原生的ADO对象。例如以下办法:
function TDMAuthors.GetAuthors(const cSqlStr: WideString): OleVariant;
VAR
DataConnection: OleVariant;
ador:Olevariant;
begin
try
DataConnection:= CreateOleObject('ADODB.Connection');
DataConnection.Open(ConnString);
ador:=CreateOleObject('ADODB.RecordSet');
//只读方式打开
ador:=DataConnection.execute(cSqlStr);
//读写方式打开
//ador.open(cSqlStr,DataConnection,adopenstatic,adLockoptimistic,adcmdtext)
Result:=ador;
SetComplete;
except
on Exceptiondo
SetAbort;
end;
end;

因为这个原生ADO不会被释放,所以你可以在asp里面进行各种操作了!
 
好像不行啊,发生错误。。。你有没有完整的例子啊,上次那个好像也不行 ??
 
后退
顶部