数据库有4万多行,查询数据老是提示内存溢出,查询有资料说是因为数据中有非法字符
数据中有各种字符,包括繁体,韩文,要如何查询出来一次删除呢?

解决方案 »

  1.   

    我只知道最笨的方法:
    执行 select top 100 * from table order by id
    依次修改显示的记录数,直到出现错误,然后手工找到错误的所在行。
      

  2.   

    我的全部显示,或者准确查询,都没有错
    但是如果是select * from 歌曲库 where 歌手 like ''%'+sedit1.Text+'%''
    这样就会出现内存溢出
      

  3.   

    如果有韩文,搜索的时候用Link就会出错,提示内存溢出,要如何处理呢?比如能不能在提示内存溢出的时候删除出错行? 或者提示? 或者直接能一次查询删除掉有韩文的行?
      

  4.   

    是MS SQL吗??是的话,可以建一个表A,两列,第一列是ID,唯一识别(varchar),第二列是歌名(varchar)即存韩文等字符创建表时第二列是 [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL 然后从原表insert到A第二列显示 ???  带?号的就是非中文的那么删除原表里,ID 是A表中带?号的ID 就可以删除了.
    感觉能处理,没试过,呵呵~~  
      

  5.   

    原来不是韩文,是日文噢,找了半天资料,看到有个函数,不知道怎么把所有有日文的行干掉?
    找到个文章,哪位高手看看如何解决,比如一次干掉所有有日文的行?
    http://hi.baidu.com/83925com/blog/item/039b22d9f034b22910df9b53.html
      

  6.   

    一个简单的办法,用一个全局变量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;我没测试,你自己试一下
      

  7.   

    这个解决你的问题了,你也测试了,嘿嘿self.ADOQuery1.SQL.Add('select 名称,歌手,下载次数 From 歌曲库 where InStr(1,LCase(名称),LCase(s1),0)=1');
    self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;