我是新手,下面有一段我写在程序中的查询代码,我调了好久一直没有调成功,另我非常头痛,请各位高手帮帮指点一下!!!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;
请各位高手帮我解决一下这个问题为什么我这个写的代码执行起来会有这样的错误啊!非常紧急!!!
解决方案 »
- 【求助】ActiveX读取Access数据库时,如果取得服务器端的相对路径???
- 关于ShellExecute的问题
- 有关查询的问题
- 弱偌的问:如何在rave的dataview里面出现存储过程输出的数据集字段?
- 哪位牛人能够帮我看一下这个问题---DCOM中如何获取远程服务器已经运行的实例!
- Rave到底是怎么回事阿?
- 用什么样数据库?
- 大家帮帮我看看这个DBGrid的问题怎么解决呀?
- delphi 三层 ApplyUpdates 无法保存第二次修改的数据
- 我使用vfp作为数据源,我现在想通过delphi删除表a中全部记录并且是物理删除.(类似于zap)
- sql explorer怎样连接sql server
- 文件拷贝进度条问题
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;
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 := ''; //虽然多写一行代码,但是可能省却很多烦恼
if 1>0 then
...
else
str := '1<=0';不合理:
if 1>0 then
...
else
str := '1<=0';
sql_str:=sql_str+''''+ str +''''+')';这样出来的结果就是'select * from CD_table where (菜单编号=' ?')你要的是这个结果吗?我觉得那个括号没有什么用处