为什么我的查询命令不执行呢,那出错了,请帮我看一看。(50分)

阿虫

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个数据库,一个小界面,上放了一个DBGRID控件一个QUERY控件,一个BITBTN,一个
EDIT文本框,然后我又建了一个数据模块,里面放了一个TABLE和一个DATASOURCE控件,将它们的
各项属性都设好后,我给BITBTN的ONCLICK写了如下代码:
procedure TForm1.BitBtn1Click(Sender: TObject);

var
strsql:string;
begin
if trim(edit1.text)<>'' then
begin
strsql:='select bh,yhmc from yhda where bh=''' +trim(edit1.text)+'''';


if query1.active then
query1.Active:=false;

query1.sql.Clear;
query1.sql.add(strsql);
query1.active:=true;
end;

end;

我的数据库中包含有BH,YHMC这两个字段,我想以BH 为条件进行查找,YHDA是我的数据库名,
可我点击BITBTN1时,根本没执行命令,为什么呀,其它地方因该没问题的,我又放了几个
按钮,让它们控件向前,向后之类的,没问题呀。
本人刚开始学数据库,希望大家拉兄弟一把。谢谢啦。
 
看一看SQL是否对
showmessage(query1.sql.text);
另:
strsql:='select bh,yhmc from yhda where bh='+'''' +trim(edit1.text)+'''';
 
楼上说的对,一般要四个单引号才行,
另外,用ADOQuery1.ExecSQL来执行一下
query1.sql.Clear;
query1.sql.add(strsql);
query1.ExecSQL;
query1.active:=true;
 
好象不是这个原因,我试了,还是不行,一般会是什么地方出问题了会造成程序不执行呢,
我的EDIT1中什么出不写的时候,它出没反应,正常的话应该有个提示之类的吧。
为什么呢?
 
query 连接数据源了吗?
 
我很不赞成你这种写SQL语句的做法,很不清楚,
建议写一个函数,‘ANSI 好象是30
FUNCTION CONVSQLSTRING(INSTRING:STRING)
BEGIN
RESULT:=CHR(30) +INSTRING +CHR(30)
END;

 
查完以后query1.open一下
 
strsql:='select bh,yhmc from yhda where bh='+#39+trim(edit1.text)+#39;
#39就是单引号
 
估计你没连好数据集
dbgrid1.Datasource:=datasource1;
datasource1.Dataset:=Query1;
你是否将datasource1.Dataset指向了table1?
 
你把这条sql语句先在ISQL里手工执行一遍测试一下
 
看看你的query控件有没有与数据库连接好了
if trim(edit1.text)<>'' then
begin
strsql:='select bh,yhmc from yhda where bh=':0'';
query1.close;
query1.sql.clear;
query1.sql.add(strsql);
query1.params[0].asstring:=edit.text;
query1.open
end;
你在试看
 
是不是你的edit里没有数据造成的,如没有数据就不能执行,照下边的写一下试试
procedure TForm1.BitBtn1Click(Sender: TObject);

var
strsql:string;
begin
[red]showmessage(edit1.text);[/red]
if trim(edit1.text)<>'' then
begin
strsql:='select bh,yhmc from yhda where bh=''' +trim(edit1.text)+'''';


if query1.active then
query1.Active:=false;

query1.sql.Clear;
query1.sql.add(strsql);
query1.active:=true;
end;

end;
 
不会是dbgrid没有和query关联起来吧?
要不就是数据库中确实查不到记录?
前面的方法都是有效的解决办法,china_peng的语句中好象要加上你所定义的数据模块
的名称。
 
我的看法是:
你的想法是通过数据模块是dbgrid与数据相连,那么table控件就没有用了,你在数据
模块里放query 和datasource控件
query1 的属性 databasename>数据库的名;
sql为‘select bh,yhmc from yhda ’
datasource1的属性dataset为'query1'
在form1的oncreate事件中写入以下代码
dbgrid1.datasource:=数据模块名。datasource1;
BITBTN的ONCLICK写如下代码:
if trim(edit1.text)<>'' then
begin
with query1 do
begin
close;
sql.clear;
sql.add('select bh,yhmc from yhda');
sql.add(' where bh=:p1');
parambyname('p1').value:=trim(edit1.text);
try
open;
except
execsql;
end;
end;
end;
注: p1是变量
 
OPen!
OPen!
OPen!

这里必须用OPen!
 
的确是我搞错了,将datasource1.Dataset指向了table1,再此感谢大家的热心指导,
多谢了,分太少,随便分分吧,以示我的感谢之意,呵呵。我仔细看过了,大家提的问题都很有
道理,我会认真思考的。谢谢大家了。
 
顶部