一个表中的数据有重复,要把多余的数据删除,我定义了一个string数组,把每一个不同的数据都写到这个数组中,而相同的我就把它删除。
procedure Tinputform.Button4Click(Sender: TObject);
var
a: array[0..10000] of string;
i,j,k:integer;
begin
//showmessage(hrdm.ADOTable1.FieldByName(姓名).AsString);
begin
for k:=0 to 10000 do
begin
a[k]:='0';
end;
for i := 0 to 10000 do
begin
for j := 0 to i do
if a[i] = hrdm.ADOTable1.FieldByName('姓名').AsString
then
begin
hrdm.ADOTable1.Active:=false;
hrdm.ADOTable1.Delete;
hrdm.ADOTable1.Active:=true;//这个地方运行的时候说我关了数据库以后不可以这样做。
end
else
begin
a[i]:=hrdm.ADOTable1.FieldByName('姓名').AsString;
hrdm.ADOTable1.Next;
end;
end;
end; end;delphi6说我搞错了,运行的时候hrdm.ADOTable1.Active:=true;这行有错误。
procedure Tinputform.Button4Click(Sender: TObject);
var
a: array[0..10000] of string;
i,j,k:integer;
begin
//showmessage(hrdm.ADOTable1.FieldByName(姓名).AsString);
begin
for k:=0 to 10000 do
begin
a[k]:='0';
end;
for i := 0 to 10000 do
begin
for j := 0 to i do
if a[i] = hrdm.ADOTable1.FieldByName('姓名').AsString
then
begin
hrdm.ADOTable1.Active:=false;
hrdm.ADOTable1.Delete;
hrdm.ADOTable1.Active:=true;//这个地方运行的时候说我关了数据库以后不可以这样做。
end
else
begin
a[i]:=hrdm.ADOTable1.FieldByName('姓名').AsString;
hrdm.ADOTable1.Next;
end;
end;
end; end;delphi6说我搞错了,运行的时候hrdm.ADOTable1.Active:=true;这行有错误。
解决方案 »
- Delphi 读取Excel多个表
- 如何将第三方控件自动安装?高手请进!
- 如何用quickrep在一页纸中打印一式两份的报表?
- 遇到这样的问题,你怎么解决?!
- Delphi能否调用EJB等中间件?
- 如何建一个如下的明细表???急急急
- access表最多能放几条记录?
- xe5 dev 11.2.6 源码 安装版 方便
- 各位救命, 为什么我的DEPHI6最上面哪个FORM(就是菜单,TOOLBAR...)都没啦,怎么会这样啊?
- Delphi 5.0 中使用Ado连接带密码的 Access 2000 数据库的问题?
- 这里的女程序员们,你们的芳龄是多少呀(只要大概)?
- 急,在线等待!在radioGroup中如何将一个item设成(默认)选定状态?
hrdm.ADOTable1.Delete;//错误发生在这一行,你关闭了active,怎么还能再执行删除呢?
给个思路,试试用select distinct
你为什么不用adoquery,用sql语句?
adotable1.Delete;
其中sql中加这样一句:select distinct tablename.fieldname from tablename这样选择得到的结果即可。
var
priStr, //前一条记录字段值
curStr: string; //本记录字段值
begin
ADOtable1.Open;
priStr := ADOtable1.FieldByName('姓名').AsString;
ADOtable1.Next;
while not ADOtable1.Eof do
begin
curStr := ADOtable1.FieldByName('姓名').AsString; //取当前字段值
if curStr = priStr then //重复
ADOtable1.Delete //删除后自动滚到下条记录
else
begin
priStr := curStr; //不重复,改变参考字符串
ADOtable1.Next; //滚到下条记录
end;
end;
ADOtable1.Close;
end;
hrdm.ADOTable1.Delete;
hrdm.ADOTable1.Active:=true;//这个地方运行的时候说我关了数据库以后不可以
----------------------------------------------------------------废话,你把数据表关闭了还能进行删除操作吗?你为什么在进行删除操作钱要把表关闭啊?我再看看。
键列信息不足或不正确,更新影响到过多的行?
你的好象只是在一起的记录才可以,如果相同的记录在不同的地方就不行了
你的方法很好,我试了一下,只是我该怎么把我执行这个操作好的得到的数据保存下来,也就是把那些东西删除了,实现我开始想达到的效果?
var
aNameList : TStringList;
sName : String;
begin
aNameList := TStringList.Create;
try
with hrdm.adoTable1 do
begin
first;
repeat
sName := FieldByName('姓名').asString;
if aNameList.IndexOf(sName) = -1 then
begin
aNameList.Add(sName);
Next;
end else
Delete;
Until eof ;
end;
finally
aNameList.Free;
end;
end;刚才不好意思说话没有太注意,对不起了。这段代码看能不能解决你的问题,我是顺着你的思路写的。但是这段代码没有经过测试。如果一定要用程序来解决这个问题的话,这个思路应该是对的。其实我想用SQL语句也能解决这个问题。但是我没有试过。希望有高手解决
可以将adoquery中的记录读入到你想保存的数组中,
以你定义的数组a: array[0..10000] of string;来说
定义一个变量i
while not adoquery1.eof do
begin
a[i]:=adoquery1.filedbyname('字段名').asstring;
adoqueyr1.next;
inc(i);
end;
insert newtable select distinct tablename.fieldname from tablename这句SQL有错误吗?
insert newtable select distinct tablename.fieldname from tablename这句SQL有错误吗?
SELECT INTO 语句创建一个新表,并用 SELECT 的结果集填充该表。新表的结构由选择列表中表达式的特性定义,例如:SELECT Shippers.*, Link.Address, Link.City,
Link.Region, Link.PostalCode
INTO NewShippers
FROM Shippers
JOIN LinkServer.DB.dbo.Shippers AS Link
ON (Shippers.ShipperID = Link.ShipperID)
给个思路,试试用select distinct干嘛那么烦