前言: 问题可能出在query1.sql.add(strsql); 其中strsql是代表查询条件的变量
例如;strsql='select * from base_teacher where teacher_name='+L_teacher;
(L_teacher也是一个变量)
????????????????????????????????????/////////////////////////////////////////////////////////////////////
procedure TForm8.Button1Click(Sender: TObject);
var strsql:string;
l_teacher_no,l_teacher_name, l_teacher_job,l_dept_no:string;
begin
strsql:='select * from base_teacher';
l_teacher_no:=edit1.Text;
l_teacher_name:=edit2.Text;
l_teacher_job:=combobox1.Text;
with Form12.Table1 do
begin
setkey;
fieldbyname('dept_name').asstring:=combobox2.Text;
if not gotokey then
combobox2.Text:=''
else
l_dept_no:=fieldvalues['dept_no'];
end;
if (edit1.Text='')and (edit2.Text='')and(combobox1.Text='')and(combobox2.Text='') then
strsql:=strsql;
if edit1.Text<>'' then
strsql:=strsql+'where teacher_no='+l_teacher_no
else
if edit2.Text<>'' then
begin
strsql:=strsql+'where teacher_name like %'+l_teacher_name+'%';
if combobox1.Text<>'' then
begin
strsql:=strsql+'and where teacher_job='+l_teacher_job;
if combobox2.Text<>'' then
strsql:=strsql+'and where dept_no='+l_dept_no;
end;
end
else
if combobox1.Text<>'' then
begin
strsql:=strsql+'where teacher_job='+l_teacher_job;
if combobox2.Text<>'' then
strsql:=strsql+'and where dept_no='+l_dept_no;
end
else
strsql:=strsql+'where dept_no='+l_dept_no;query1.Close;
query1.SQL.Clear;
query1.sql.add(strsql); //请看此处!!
query1.Prepare;
query1.open;
end;
例如;strsql='select * from base_teacher where teacher_name='+L_teacher;
(L_teacher也是一个变量)
????????????????????????????????????/////////////////////////////////////////////////////////////////////
procedure TForm8.Button1Click(Sender: TObject);
var strsql:string;
l_teacher_no,l_teacher_name, l_teacher_job,l_dept_no:string;
begin
strsql:='select * from base_teacher';
l_teacher_no:=edit1.Text;
l_teacher_name:=edit2.Text;
l_teacher_job:=combobox1.Text;
with Form12.Table1 do
begin
setkey;
fieldbyname('dept_name').asstring:=combobox2.Text;
if not gotokey then
combobox2.Text:=''
else
l_dept_no:=fieldvalues['dept_no'];
end;
if (edit1.Text='')and (edit2.Text='')and(combobox1.Text='')and(combobox2.Text='') then
strsql:=strsql;
if edit1.Text<>'' then
strsql:=strsql+'where teacher_no='+l_teacher_no
else
if edit2.Text<>'' then
begin
strsql:=strsql+'where teacher_name like %'+l_teacher_name+'%';
if combobox1.Text<>'' then
begin
strsql:=strsql+'and where teacher_job='+l_teacher_job;
if combobox2.Text<>'' then
strsql:=strsql+'and where dept_no='+l_dept_no;
end;
end
else
if combobox1.Text<>'' then
begin
strsql:=strsql+'where teacher_job='+l_teacher_job;
if combobox2.Text<>'' then
strsql:=strsql+'and where dept_no='+l_dept_no;
end
else
strsql:=strsql+'where dept_no='+l_dept_no;query1.Close;
query1.SQL.Clear;
query1.sql.add(strsql); //请看此处!!
query1.Prepare;
query1.open;
end;
解决方案 »
- 路过的兄弟姐妹,麻烦给个Delphi语言入门的详细教程
- 谁有delphi的三层模式的数据库开发的例子
- 请教足彩中数据容错算法和速度的问题
- 不能怒了
- 有关在右键菜单中加入程序的问题
- 请问北京的delphi高手
- 难题:如何捕获系统中任何或保存的对话框上点击右上角那个问号“?”按钮的消息?
- 求DELPHI6的SN和KEY,小弟是新手,大侠995!!!
- 大家帮忙提醒一下:字符串统计其中某个子串重复出现的次数,现在忘记了
- 10.4版本arcgis server manager 创建站点报错version.json
- 请教大虾们 关于在DBGrid控件中修改纪录的一个小问题 !! (有重谢!!!)
- 程序模块化设计开发方法...up有分
这样写是不是不合法
我感觉是有问题的,我觉得很可能组合的语句之间是少了空格的原因
推荐使用Format 或者 利用TQuery 支持的动态参数,动态参数非常好,除了能自动识别数据类型,它还能解决字符串里面带引号的问题,
strsql:=strsql+'where teacher_name like %'+l_teacher_name+'%';
应该改为下面:
strsql:=strsql+'where teacher_name like ''%'+l_teacher_name+'%''';
這樣應該沒有問題 strsql:=strsql+'where teacher_name like ''%''+l_teacher_name+''%'' ';
這樣應該沒有問題
2、字符串类型的字段要注意,不能只用简单的一个';
3、可以用ShowMessage显示出来看看,就能找到原因了。
4、或者输出到一个Edit中,拷贝到数据库服务器中执行查询,也可以找到原因
strsql:='select * from base_teacher '
strsql:=strsql+'where teacher_no='+l_teacher_no;
类似上面的语法,就自动加上了两边的单引号
#39是什么意思啊
能举个例子吗
with Form12.Table1 do
begin
setkey;
fieldbyname('dept_name').asstring:=combobox2.Text;
if not gotokey then
combobox2.Text:=''
else
l_dept_no:=fieldvalues['dept_no'];
end;
if (edit1.Text='') and (edit2.Text='') and (combobox1.Text='')and(combobox2.Text='') then
strsql:=strsql;
if edit1.Text<>'' then
strsql:=strsql+' where teacher_no='+#39+l_teacher_no+#39
else
if edit2.Text<>'' then
begin
strsql:=strsql+' where teacher_name like '+#39+'%'+l_teacher_name+'%'+#39;
if combobox1.Text<>'' then
begin
strsql:=strsql+' and where teacher_job='+#39+l_teacher_job+#39;
if combobox2.Text<>'' then
strsql:=strsql+' and where dept_no='+#39+l_dept_no+#39;
end
end
else
if combobox1.Text<>'' then
begin
strsql:=strsql+' where teacher_job='+#39+l_teacher_job+#39;
if combobox2.Text<>'' then
strsql:=strsql+' and where dept_no='+#39+l_dept_no+#39;
end
else
strsql:=strsql+' where dept_no='+#39+l_dept_no+#39;
strsql:=strsql+'where teacher_name like '+QuotedStr('%'+l_teacher_name+'%')拼写错误罢了
你的单引号用的不对!把你的sql语句输出到一个文本文件中去再把它拿到查询分析器中去执行一下就知道哪里错了有机会去大富翁delphibbs.com