100分求助模糊查询问题(问题有进展请DFW关注,提前有分,追加100分,不够我会在加分) (100分)

  • 主题发起人 主题发起人 lzhuan
  • 开始时间 开始时间
L

lzhuan

Unregistered / Unconfirmed
GUEST, unregistred user!
//**************************************************************
很感谢各位DFW的解答,程序应该没有错误
问题可能出在数据表上
居然一句SELECT * FROM PRO_BASEDATA.DB都会
出现错误,那肯定问题出在数据库上了!
不知谁有PARADOX表修复工具,请提供
我的E-MAIL:LIUZH0@163.COM

以下是最新发现的问题

来自:lzhuan, 时间:2002-2-22 10:48:00, ID:934277 | 编辑
真他妈的见鬼了:
以下测试程序花了2分钟的时间才完成
得到的结果是table is full的错误提示
查看他生成的临时表
哇塞居然有254M
PRO_BASEDATA.DB只有127K阿
这254M从何而来
看来程序不应有问题了,是不是数据表有问题?
with query1 do
begin
close;
sql.clear;
sql.add('select * from pro_basedata.db');
open;
end;
datasource1.DataSet:=query1;


//*****************************************************************
以下的程序我查了很多遍,可问题还是找不出了
请高手指点
数据库用的是paradox
begin
dm.d_2.DataSet:=dm.q_7;
dm.q_7.close;
dm.q_7.SQL.Clear;
dm.q_7.sql.add('select * from pro_basedata.db where pro_code like :q1');
dm.q_7.ParamByName('q1').AsString:='%'+edit_code1.text+'%';
IF (NOT dm.q_7.Prepared) then dm.q_7.Prepare;
try
dm.q_7.Open;
except
dm.q_7.ExecSQL;
end;
end;
 
什么问题?
 
begin
dm.d_2.DataSet:=dm.q_7;
dm.q_7.close;
dm.q_7.SQL.Clear;
dm.q_7.sql.add('select * from pro_basedata.db where pro_code like :q1');
dm.q_7.ParamByName('q1').AsString:='%'+edit_code1.text+'%';
try
dm.q_7.Open;
except
on e:exception do showmessage('错误信息:'+e.message); //用它来看看出错信息
end;
end;
 
出什么问题啊?
 
begin
dm.d_2.DataSet:=dm.q_7;
dm.q_7.close;
dm.q_7.SQL.Clear;
dm.q_7.sql.add('select * from pro_basedata.db where pro_code like :q1');
dm.q_7.ParamByName('q1').AsString:='%'+edit_code1.text+'%';
try
dm.q_7.Open;//运行到这句程序无响应,没有错误提示
except
on e:exception do showmessage('错误信息:'+e.message);//运行不到这一句
end;
end;
 
用在运行期生成的语句在SQL Explorer看能否查出数据,再找其他原因。
 
query只执行一次的话不需要用prepare,BDE自动会调用.
如果用了prepare,在更改query的SQL.Text重新查询之前先调用unprepare.
 
如果SQL为SELECT * FROM PRO_BASEDATA.DB正常
如果加入WHERE子句那就会出现这种问题(无论WHERE 子句多简单,情况都一样)
 
将.DB去掉?
呵呵,没用过PARADOX。
 
对不起,我误导大家了,加入简单的where子句测试是正常的
看来还是这两句话有问题:
dm.q_7.sql.add('select * from pro_basedata.db where pro_code like :q1');
dm.q_7.ParamByName('q1').AsString:='%'+edit_code1.text+'%';
 

dm.q_7.ParamByName('q1').AsString:='%'+edit_code1.text+'%';
改成
dm.q_7.ParamByName('q1').AsString:='''%'+edit_code1.text+'%''';
试试。
 
在加上引号试试dm.q_7.ParamByName('q1').AsString:='%'''+edit_code1.text+'%''';
 
对比起,引号位置错了
 
或者直接用
dm.q_7.sql.add('select * from pro_basedata.db where pro_code like ''%'+edit_code1.text+'%''');
这样应该不会出错的
 
应该没有什么问题吧

认倒霉吧
 
注意SQL语句的引号的配合.同意南宫吹云的意见.
 
dm.q_7.ParamByName('q1').AsString:='%'+edit_code1.text+'%';
改为:
dm.q_7.ParamByName('q1').AsString:='"%'+edit_code1.text+'%"';

 
合为一句:
dm.q_7.sql.add('select * from pro_basedata.db where pro_code like'''+'%'+edit_code1.text+'%''')
 
以上的方法都试过了,可都没有解决问题!
谢谢各位的回答
为了有助于问题的解决
我把问题重新描述一下:
程序中在数据模块(dm)有一个tdatabase name:mydata databasename:mydata
aliasname:data_1 connect:true
一个tquery(q_7)active为false databasename:mydata
在产品查询窗体中
有一个dbgrid1 几个text 一个查询按钮
pro_basedata.db是一个产品基本资料表
其中有pro_code||pro_name||...
现在我想输入产品名称的一部分如 输入 计数 即可查到
所有含有计数的产品名称.
以上大家的解法应该都可以的.但现在却出现查询时程序没有响应
我的数据库肯定已经联上了(我用SELECT * FROM PRO_BASEDATA.DB可以选出数据的)
请大家帮我
会不会是DELPHI本身的问题?
 
try
q_7.Open;
except
q_7.ExecSQL; // ????????????????????什么意思???
end;
:;在Except中显示一下错误情况,看看有没有什么错误信息
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
950
SUNSTONE的Delphi笔记
S
后退
顶部