这样在不可以 --创建一个与执行存储过程得到的结果集一样的临时表 create table #t(....) --表结构与存储过程返回的结果集一样--执行存储过程将结果保存到临时表中 insert #t exec 存储过程 参数--从临时表中删除记录 delete from #t where 条件--将临时表做为最终结果 select * from #t--完成后删除临时表 drop table #t
在delphi中可以这样实现: var asstr: string; begin with qryQueryInfo do begin close; Connection := FAPSConnection; LockType := ltBatchOptimistic; with sql do begin clear; asstr := 'select * From Tb ' Add(asstr); end; try Open; finally close; end; end;把数据取到数据集之后,你可以任意删除里面的数据,前提是删除后运行qryQueryInfo.UpdateBatch()这句。你还可以把你需要的数据先放到一个临时表,以后直接操纵这个表。
写错了,修改如下: 在delphi中可以这样实现: var asstr: string; begin with qryQueryInfo do begin close; Connection := FAPSConnection; LockType := ltBatchOptimistic; with sql do begin clear; asstr := 'select * From Tb ' Add(asstr); end; try Open; finally close; end; end;把数据取到数据集之后,你可以任意删除里面的数据,前提是删除后不能运行qryQueryInfo.UpdateBatch()这句。你还可以把你需要的数据先放到一个临时表,以后直接操纵这个表。
--创建一个与执行存储过程得到的结果集一样的临时表
create table #t(....) --表结构与存储过程返回的结果集一样--执行存储过程将结果保存到临时表中
insert #t exec 存储过程 参数--从临时表中删除记录
delete from #t where 条件--将临时表做为最终结果
select * from #t--完成后删除临时表
drop table #t
--创建一个与执行存储过程得到的结果集一样的临时表
create table #t(....) --表结构与存储过程返回的结果集一样--执行存储过程将结果保存到临时表中
insert #t exec 存储过程 参数--从临时表中删除记录
delete from #t where 条件--将临时表做为最终结果
select * from #t--完成后删除临时表
drop table #t
--------------------------------
使用这个方法比较好
--创建一个与执行存储过程得到的结果集一样的临时表
create table #t(....) --表结构与存储过程返回的结果集一样--执行存储过程将结果保存到临时表中
insert #t exec 存储过程 参数--从临时表中删除记录
delete from #t where 条件--将临时表做为最终结果
select * from #t--完成后删除临时表
drop table #t
有一个变通的方法是这样的,用Recordset.save "本地文件名"
然后用另外一个Recordset设置CursorLocation为ClientSide LockType=批更新方式,用这个记录打开上面保存的文件 Recordset.open "本地文件名",就可以支持删除等操作了
这样,定义一个AdoConnection,keepconnection 为true
在前台编写一个创建临时表 str=create table #tmp(.....)
ado->sql->add(str)
ado->... -生成临时表
ado->close
ado->sql.clear;
ado.sql.add('select * from #tmp')
只要这个Adoconnection 为同一连接,就可以拉
create table #t(....) 先
比如update,batchUpdate 之类的方法.如果调用的话就变成
真的删除数据库中的记录了,如果不调用的话,只是在内存中进行
不影响数据库
procedure tmp_table
var
s:string;
Con:Tadoconnection;
Ado:Tadoquery;
begin
s:='Create table #tmp(Fid Int ,Fname Varchar(30) NULL) '
s:='Insert into #tmp Select * from table'
con:=Tadoconnection.Create(self);
con.Provider:='SQLOLEDB.1';
con.LoginPrompt:=False;
con.KeepConnection:=true; //一定要
ado:=Tadoquery.Create(self);
ado.connnection:=Con;
ado.sql.clear;
ado.sql.add(s);
adoExecSQL;
ado.Close;
ado.SQL.Clear;
ado.SQL.Add('Select * From #tmp');
ado.Open;
end
这样,就可以进行操作了
我在delphi下是这样实现的
procedure tmp_table
var
s:string;
Con:Tadoconnection;
Ado:Tadoquery;
begin
s:='Create table #tmp(Fid Int ,Fname Varchar(30) NULL) '
s:=s+'Insert into #tmp Select * from table' //这里写错了
con:=Tadoconnection.Create(self);
con.Provider:='SQLOLEDB.1';
con.LoginPrompt:=False;
con.KeepConnection:=true; //一定要
ado:=Tadoquery.Create(self);
ado.connnection:=Con;
ado.sql.clear;
ado.sql.add(s);
adoExecSQL;
ado.Close;
ado.SQL.Clear;
ado.SQL.Add('Select * From #tmp');
ado.Open;
end
这样,就可以进行操作了
调用ado执行sql:select * from #tmp,总是提示找不到#tmp对象的错误。
楼上的方法我也试了,不行啊
高手帮忙!着急啊
--创建一个与执行存储过程得到的结果集一样的临时表
create table #t(....) --表结构与存储过程返回的结果集一样--执行存储过程将结果保存到临时表中
insert #t exec 存储过程 参数--从临时表中删除记录
delete from #t where 条件--将临时表做为最终结果
select * from #t--完成后删除临时表
drop table #t
var
asstr: string;
begin
with qryQueryInfo do
begin
close;
Connection := FAPSConnection;
LockType := ltBatchOptimistic;
with sql do
begin
clear;
asstr := 'select * From Tb '
Add(asstr);
end;
try
Open;
finally
close;
end;
end;把数据取到数据集之后,你可以任意删除里面的数据,前提是删除后运行qryQueryInfo.UpdateBatch()这句。你还可以把你需要的数据先放到一个临时表,以后直接操纵这个表。
在delphi中可以这样实现:
var
asstr: string;
begin
with qryQueryInfo do
begin
close;
Connection := FAPSConnection;
LockType := ltBatchOptimistic;
with sql do
begin
clear;
asstr := 'select * From Tb '
Add(asstr);
end;
try
Open;
finally
close;
end;
end;把数据取到数据集之后,你可以任意删除里面的数据,前提是删除后不能运行qryQueryInfo.UpdateBatch()这句。你还可以把你需要的数据先放到一个临时表,以后直接操纵这个表。