这十个数据库名称分别为c:\1.mdb,c:\2.mdb,...,c:\10.mdb;密码均为0000
如果发现有这两个字,就把它替换成为"文章"并保存之...并把修改的情况列到memo1中显示.
显示格式如:
数据库1.mdb中的表a中的x字段原为...,其中需要修改部分已作修改.
....
可以用BDE或者ADO连接来实现.有没有高手能够做到?
如果发现有这两个字,就把它替换成为"文章"并保存之...并把修改的情况列到memo1中显示.
显示格式如:
数据库1.mdb中的表a中的x字段原为...,其中需要修改部分已作修改.
....
可以用BDE或者ADO连接来实现.有没有高手能够做到?
var
i,j:integer;
begin
for j:=0 to dataset.recored-1 do begin
for i:=0 to dataset.FieldCount-1 do begin
if dataset.filedByName(dataset.Fields.Fields[i].DisplayText).DataType=ftMemo then
begin
if pos('主题',(Trim(dataset.fields.fields[i].value))>0
begin
{替换你所要的字符串
MEMO显示你想要的结果}
end;
end;
end;
end;
end;
这是一个库的,你循环写10个库的就可以了,因为有雷同之处,
其实你仔细琢磨一下,应该很简单。
我的想法是这样的,用ADO动态连接x.mdb(最外层循环),通过某种方式取得ADO连接数据库的TABLE列表,对每个表先select top 1 * from 表,先取得文本类型和备注类型的字段列表放至string astrlist[],再select * from 表 where astrlist[x]='%文章%' or astrlist[x+1]='%文章%'.....
一有记录返回就再行操作...现在最大的问题是怎么取得ADO连接数据库的TABLE列表,其它都可以解决.
1、外循环为10个库(这个简单,不说了)
2、取出每个库中的表
测试情况:
procedure TForm1.Button1Click(Sender: TObject);
var
s : Tstringlist;
begin
s:=Tstringlist.Create;
ADOConnection1.GetTableNames(s);
showmessage(s.Text);
end;
3、然后读s(最好把s设置为全局变量)
if s.Count>0 then
begin
for i:=0 to s.count-1 do
begin
table :=s[i];
.....
end;
end;
4、hsmserver(小霍)说的
如果还是不明白的话,晚上不加班的话再来
Rt: Tstrings): integer;
var
i,j:integer;
Afields:string;
Atables:tstrings;
aq:tadoquery;
begin
Atables:=tstringlist.Create;
try
aq:=tadoquery.Create(nil);
try
aq.Connection:=acon;
acon.GetTableNames(Atables,false);
Result:=0;
for i:=0 to Atables.Count-1 do
begin
aq.Close;
aq.sql.Text:='select top 1 * from '+Atables.Strings[i];
aq.Open;
if aq.Eof then continue;
Afields:='select * from '+Atables.Strings[i]+' where ';
for j:=0 to aq.FieldCount-1 do
begin
if aq.Fields.Fields[j].DataType in [ftmemo,ftString] then
Afields:=Afields+'('+aq.Fields.Fields[j].FieldName+' like ''*'+src+'*'' )or';
end;
if Afields='select * from '+Atables.Strings[i]+' where ' then continue;
delete(Afields,Length(Afields)-1,2);
aq.Close;
aq.SQL.Text:=Afields;
aq.Open;
if aq.Eof then continue;
//发现目标
aq.First;
while not aq.Eof do
begin
for j:=0 to aq.FieldCount-1 do
begin
if(aq.Fields.Fields[j].DataType in [ftmemo,ftString])and
(pos(src,(Trim(aq.Fields.fields[j].AsString)))>0)then
begin
aq.Edit;
StringReplace(aq.Fields.Fields[j].AsString,src,dest,[rfReplaceAll]);
aq.Post;
rt.Add(Atables.Strings[i]+'....'+aq.Fields.Fields[j].FieldName);
inc(result);
end;
end;
aq.Next;
end;
end;
finally
aq.Free;
end;
finally
Atables.Free;
end;
end;
这样似乎并不行!!!没有改写到!
改成:aq.Fields.Fields[j].DataType in [ftmemo,ftWideString]),但还是不行,
在if Afields='select * from '+Atables.Strings[i]+' where ' then continue;
delete(Afields,Length(Afields)-1,2);
aq.Close;
aq.SQL.Text:=Afields;
aq.Open;//<---------------------此处打开之后记录总是为0,但我在ACCESS中运行过生成的SQL语句,并不会这样呀.
if aq.Eof then continue;//<---这里就会自动跳出.
//发现目标
if(aq.Fields.Fields[j].DataType in [ftmemo,ftString])and
该为
if(aq.Fields.Fields[j].DataType in [ftWideString]) and
你再试一试
我测试了一下,行
最新發現:免費發短信的軟件~~不信試試~~
請到下面的網址下載吧~~
http://www.m2p.com.cn/download.asp?no=m2px9m
aq.open;
这样为什么也会记录为空呢,我试过直接复制语句到ACCESS中运行,是有四条结果的!
procedure TForm1.Button1Click(Sender: TObject);
var
s : Tstringlist;
i,j ,k: integer;
adoquery2 : Tadoquery;
savestring : string;
updatestr : string;
begin
s:=Tstringlist.Create;
ADOConnection1.GetTableNames(s);
try
adoquery2 :=Tadoquery.Create(self);
adoquery2.Connection:=ADOConnection1;
for i:=0 to s.Count-1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select * from '+s[i];
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
for j:=0 to ADOQuery1.FieldCount-1 do
begin
if (ADOQuery1.Fields[j].DataType in [ ftMemo,ftWideString ]) then
begin
if pos('主题',ADOQuery1.fieldbyname(ADOQuery1.Fields[j].DisplayName).AsString)>0 then
begin
savestring:=ADOQuery1.fieldbyname(ADOQuery1.Fields[j].DisplayName).AsString;
updatestr:=copy(savestring,1,pos('主题',savestring)-1)+'文章'+
copy(savestring,pos('主题',savestring)+4,length(savestring));
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Text:='update '+s[i]+' set '+ADOQuery1.Fields[j].DisplayName+' ='''+updatestr +
''' where id = '+ADOQuery1.fieldbyname('id').AsString;
adoquery2.ExecSQL; memo1.Lines.Add('ID号 '+ ADOQuery1.fieldbyname('id').AsString +' :'+ savestring+' --> '+updatestr);
end;
end;
end;
ADOQuery1.Next;
end;
end;
finally
freeandnil(adoquery2);
end;
end;