s2:= '%'+edit1.Text+'%';
s1:='select * from j1 where 假名 like '''+s2+''' or 汉字 like '''+s2+''' or 词义 like '''+s2+'''';代码如上,运行时提示内存溢出错误,这是为什么?

解决方案 »

  1.   

    楼上,太大什么意思? 用select * from j1是没有问题的.
      

  2.   

    s := ' ''%'+edit1.Text+'%'' ';
    s1 := ' select * from j1 '
         +' where 假名 like '+s+' or 汉字 like '+s+' or 词义 like '+s+' ';
      这样试试呢
      

  3.   

    我一般很少用引号内嵌使用。
    建议使用quotedstr函数来替换看看。
      

  4.   

    不是字段中文名字引起的吧,先用简单的条件试下,
    s1:='select * from j1 where 假名 = ''aaa''';
      

  5.   

    难道是edit1.Text有问题?
    是SQL Server吗?
    先用查询分析器代入执行一下看有总有问题,首先排队SQL语句问题,再查看Delphi的问题
      

  6.   

    先试试SQL语句能不能在查询分析器中执行;再试试是不是引号加错的问题,用QuotedStr函数;
      

  7.   

    换个方法试试,不要用or,
    s1:='select * from j1 where 假名 like '''+s2+
    ''' union all (select * from j1 where  汉字 like '''+s2+''') '+
    ' union all (select * from j1 where  词义 like '''+s2+''')';
    如果有重复记录的话把所有列group by下
      

  8.   

    ACCESS就是这样子的,汉字用LIKE有内存溢出;
      

  9.   

    一个小建议,不要写一堆字符串运算让大家看。直接写出 SQL语句会节省帮助你的人不少时间。
      

  10.   


    with ADOQuery1 do
    begin
    Close;
      SQL.Clear;
      SQL.Add(' select *  from j1 where 假名 like :a or 汉字 like :a or 词义 like :a ');
      parameters.ParamByName('a').Value:='%'+Trim(edit1.Text)+'%';     
      Open;      
    end;
      

  11.   

    with ADOQuery1 do
    begin
    Close;
      SQL.Clear;
      SQL.Add(' select *  from j1 where 假名 like :a or 汉字 like :b or 词义 like :c');
      parameters.ParamByName('a').Value:='%'+Trim(edit1.Text)+'%'; 
      parameters.ParamByName('b').Value:='%'+Trim(edit1.Text)+'%'; 
      parameters.ParamByName('c').Value:='%'+Trim(edit1.Text)+'%';     
      Open;      
    end;
    忽然发现楼主是一个输入值查询数据库的好几个字段,怎么会有这种情况?数据库里哪个字段存什么东西应该固定吧.要查哪个就是查哪个啊.
    我也不知道这段代码能否通过,现在机器上没有环境.自己试吧.
      

  12.   

    access数据库,like查询,查询记录中有日文,就会出这个问题。
    是access的Bug吧?
      

  13.   

    应该是生成的sql语句有问题,楼主可在ShowMessage(ADOQuery.SQL[0]);查看最后生成的sql语句是否正常?