读书人

有关ADOQuery的有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

有关ADOQuery的问题,急!!!

我是新手,下面有一段我写在程序中的查询代码,我调了好久一直没有调成功,另我非常头痛,请各位高手帮帮指点一下!!!

procedure TCDMIS_Form_Search.BitBtn_SearchClick(Sender: TObject);
var
sql_str: string;
str: string;
begin

DataModule_RMIS.ADOTable_CD_table.Locate( '菜单编号 ',Edit_CDBH_Search.Text,[loCaseInsensitive, loPartialKey]);
if Edit_CDBH_Search.Text <> DataModule_RMIS.ADOTable_CD_table[ '菜单编号 ']
then
begin
Application.MessageBox( '此菜单不存在 ', '错误 ',MB_ICONERROR + MB_OK);
Edit_CDBH_Search.Text:= ' < 请重新输入 > ';
end
else
begin
str:= Edit_CDBH_Search.Text;
sql_str:= 'select * from CD_table where ';
sql_str:=sql_str+ '(菜单编号= ';
sql_str:=sql_str+ 'str) ';
ShowMessage(sql_str);
with DataModule_RMIS.ADOQuery_CD_table do
begin
close;
sql.Clear;
sql.Add(sql_str);
open;
end;
end;
end;

我用一个TEdit控件Edit_CDBH_Search来接收“菜单编号”的信息,但是在程序运行到要执行SQL查询(open;)时总是会出现错误信息说参数“str”没有默认值。我不知道这个到底是什么意思啊?



我在一本书上看到跟上面代码类似的代码是可执行的,代码如下:

procedure TQueryBookForm.btnQry2Click(Sender: TObject);
var
SQLStr:string;
begin
SQLStr:= 'select * from 图书 where ';
SQLStr:=SQLStr+ ' (图书名称 like "% '+edtBook.Text+ '% " ';
SQLStr:=SQLStr+ ') and (ISBN like "% '+edtISBN.Text+ '% " ';
SQLStr:=SQLStr+ ') and (译著者 like "% '+edtWriter.Text+ '% " ';
SQLStr:=SQLStr+ ') and (类别 like "% '+cbType.Items[cbType.ItemIndex]+ '% " ';
SQLStr:=SQLStr+ ') and (出版社 like "% '+cbPub.Items[cbPub.ItemIndex]+ '% " ';
SQLStr:=SQLStr+ ') and (出版时间 like "% '+cbDate.Items[cbDate.ItemIndex]+ '% ") ';

SQLStr:=SQLStr+ ' order by 出版时间 ';
ShowMessage(SQLStr);
SQLQuery(SQLStr,DMMain.adqBook);
dgBook.DataSource:=DMMain.dsqBook;
end;

procedure TQueryBookForm.SQLQuery(SQLString:string;qry:TADOQuery);
begin
with qry do
begin
close;
sql.Clear;
sql.Add(SQLString);
open;
end;
end;


请各位高手帮我解决一下这个问题为什么我这个写的代码执行起来会有这样的错误啊!非常紧急!!!

[解决办法]
给你修改了一下,试试吧
procedure TCDMIS_Form_Search.BitBtn_SearchClick(Sender: TObject);
var
sql_str: string;
str: string;
begin
if not DataModule_RMIS.ADOTable_CD_table.Locate( '菜单编号 ',Edit_CDBH_Search.Text,[]) then
begin
Application.MessageBox( '此菜单不存在 ', '错误 ',MB_ICONERROR + MB_OK);
Edit_CDBH_Search.Text:= ' < 请重新输入 > ';
end
else
begin
str:= Edit_CDBH_Search.Text;
sql_str:= 'select * from CD_table where ';
sql_str:=sql_str+ '(菜单编号= ';
sql_str:=sql_str+ 'str) ';
ShowMessage(sql_str);
with DataModule_RMIS.ADOQuery_CD_table do
begin
close;
sql.Clear;
sql.Add(sql_str);
open;
end;
end;
end;
[解决办法]
你的sql语句有错误,再给你修改一下:
procedure TCDMIS_Form_Search.BitBtn_SearchClick(Sender: TObject);
var
sql_str: string;
str: string;
begin
if not DataModule_RMIS.ADOTable_CD_table.Locate( '菜单编号 ',Edit_CDBH_Search.Text,[]) then


begin
Application.MessageBox( '此菜单不存在 ', '错误 ',MB_ICONERROR + MB_OK);
Edit_CDBH_Search.Text:= ' < 请重新输入 > ';
end
else
begin
str:= Edit_CDBH_Search.Text;
sql_str:= 'select * from CD_table where 菜单编号= ' ' '+trim(str)+ ' ' ' ';
ShowMessage(sql_str);
with DataModule_RMIS.ADOQuery_CD_table do
begin
close;
sql.Clear;
sql.Add(sql_str);
open;
end;
end;
end;
[解决办法]
参数“str”没有默认值,这只是编译警告,但是不会影响你程序正常运行,一定是其它地方出现了 问题。
通常情况下,在循环语句、条件语句等字句前应该初始化用到的变量,否则可能会出现类似“参数“str”没有默认值”的编译警告。
正确:
str := ' '; //虽然多写一行代码,但是可能省却很多烦恼
if 1> 0 then
...
else
str := '1 <=0 ';

不合理:
if 1> 0 then
...
else
str := '1 <=0 ';


[解决办法]
应该是你的str这个变量在sql语句中没有起作用
sql_str:=sql_str+ ' ' ' '+ str + ' ' ' '+ ') ';

这样出来的结果就是 'select * from CD_table where (菜单编号= ' ? ')

你要的是这个结果吗?我觉得那个括号没有什么用处
[解决办法]
关于sql语句的调试,有一个好的思路是,

> > ShowMessage(SQLStr);

单步调试试,将变量SQLStr添加到watch窗口,然后得到SQLStr的值,即生成的sql 语句

再把sql 语句放到 SQL Explorer,查询分析器等能执行sql语句的工具中,看sql语句是否正确执行.

如果可以执行成功,那问题就好多解决了

读书人网 >.NET

热点推荐