一个简单的办法,用一个全局变量vg_str_japan:array[1..26] of char保存26个已知的片假名 用adoquery1读取数据库所有记录,然后while not adoquery1.eof begin s:=adoquery1.fieldbyname('歌手').asstring; b:=false; for i:=1 to 26 do begin if pos(self.vg_str_japan[j],s)>0 then begin b:=true; break; end; end; if b then adoquery1.delete else adoquery1.next; end;我没测试,你自己试一下
这个解决你的问题了,你也测试了,嘿嘿self.ADOQuery1.SQL.Add('select 名称,歌手,下载次数 From 歌曲库 where InStr(1,LCase(名称),LCase(s1),0)=1'); self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;
执行 select top 100 * from table order by id
依次修改显示的记录数,直到出现错误,然后手工找到错误的所在行。
但是如果是select * from 歌曲库 where 歌手 like ''%'+sedit1.Text+'%''
这样就会出现内存溢出
感觉能处理,没试过,呵呵~~
找到个文章,哪位高手看看如何解决,比如一次干掉所有有日文的行?
http://hi.baidu.com/83925com/blog/item/039b22d9f034b22910df9b53.html
用adoquery1读取数据库所有记录,然后while not adoquery1.eof
begin
s:=adoquery1.fieldbyname('歌手').asstring;
b:=false;
for i:=1 to 26 do
begin
if pos(self.vg_str_japan[j],s)>0 then
begin
b:=true;
break;
end;
end;
if b then
adoquery1.delete
else
adoquery1.next;
end;我没测试,你自己试一下
self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;