quotedstr(Delphi中QuotedStr())
一、如何delphi中SQL避免非法字符,单引号’三种方法
使用 QuotedStr函数 QuotedStr的作用是使字符串包含单引号:
在字符的前后加上(‘)号,因为在DELPHI中字符赋值是需要引号的
例如:
CommandText:= CommandText+ QuotedStr(Edit1.Text); Sql:=‘select… from… where uName=’+ QuotedStr(Edit1.Text);
上面的语句还可以写成:
Sql:=‘select… from… where uName=’+ Char(39)+ stringreplace(Edit1.Text,””,”””,[rfReplaceAll])+ Char(39);
Char(39)代码一个分号 stringreplace把字符串中的单引号换成两个单引号,只是还是QuotedStr好用,前后加了单引号而且把见到的单引号都替换成两个单引号了;
二、请问delphi中这种in查询怎么实现
几个错误:
1、‘北京’,'上海'中的北京前后的引号你都打错了,弄成中文的了,应该是英文的'北京','上海'
2、其实你最终只是要拼成in('value1','value2')这种格式,所以你看一下就就知道了,如果你输入的是'北京','上海'
你的sql就需要改成这样才行
SQL.Add('select* from table_name where trim(城市) in('+Trim(edit1.Text)+')')
3、其它的就不用说了,如果你是想直接输入北京,上海或者北京上海这种就能查出结果,就需要自己转换了,转换的过程一般是这样
var
str:string;
List: TStringList;
i:integer;
begin
str:='';
List:= TStringList.Create;
ExtractStrings([';',',',':',''],['#',''],PChar(Edit1.Text),List);
执行之后,这个list中放的就是单个的北京或者上海,你自己循环一下,加上单引号就可以了。
三、如何实现delphi多条件查询
根据你的条件,我做了一下:
edit1:学号, edit2:职务, edit3:籍贯,edit4:面貌.与你的条件有些出入的地方是:我添加了一个radiogroup控件来让用户选择,是按学号查询还是按其他类别查询.
当选择按学号查询时,其它按钮不可用;按其它查询,edit1不可用(这个你自己可以设置是否可用.)如果edit2等中有内容即被当作查询条件,如果为空则不作查询条件.
代码大致如下:
//控制按钮是否可用:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
case radiogroup1.ItemIndex of
0:
begin
radiobutton1.Enabled:= false;
radiobutton2.Enabled:= false;
datetimepicker1.Enabled:= false;
datetimepicker2.Enabled:= false;
edit2.Enabled:= false;
edit3.Enabled:= false;
edit4.Enabled:= false;
end;
1:
begin
edit1.Enabled:= false;
radiobutton1.Enabled:= true;
radiobutton2.Enabled:= true;
datetimepicker1.Enabled:= true;
datetimepicker2.Enabled:= true;
edit2.Enabled:= true;
edit3.Enabled:= true;
edit4.Enabled:= true;
end;
end;
查询按钮
procedure TForm1.Button1Click(Sender: TObject);
var
sql, v_sex: string;
begin
if radiogroup1.ItemIndex= 0 then//按学号查询
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select* from students where num='''+ trim(edit1.Text)+'''');
open;
end;
end
else
begin
sql:='select* from students where';
if trim(edit2.Text)<>'' then
sql:= sql+'duty='+ Ansiquotedstr(edit2.Text,#39);
if trim(edit3.Text)<>'' then
begin
if trim(edit2.Text)='' then
sql:= sql+'nation='+ Ansiquotedstr(edit3.Text,#39)
else
sql:= sql+'and nation='+ Ansiquotedstr(edit3.Text,#39);
end;
if trim(edit4.Text)<>'' then
begin
if(trim(edit2.Text)='') and(trim(edit3.Text)='') then
sql:= sql+'mianmao='+ Ansiquotedstr(edit4.Text,#39)
else if(trim(edit2.Text)<>'') or(trim(edit3.Text)<>'') then
sql:= sql+'and mianmao='+ Ansiquotedstr(edit4.Text,#39);
end;
if radiobutton1.Checked then
begin
v_sex:= radiobutton1.Caption;
if(trim(edit2.Text)='') and(trim(edit3.Text)='') and(trim(edit4.Text)='') then
sql:= sql+'sex='+ Ansiquotedstr(radiobutton1.Caption,#39)
else if(trim(edit2.Text)<>'') or(trim(edit3.Text)<>'') or(trim(edit4.Text)<>'') then
sql:= sql+'and sex='+ Ansiquotedstr(radiobutton1.Caption,#39);
end;
if radiobutton2.Checked then
begin
v_sex:= radiobutton2.Caption;
if(trim(edit2.Text)='') and(trim(edit3.Text)='') and(trim(edit4.Text)='') then
sql:= sql+'sex='+ Ansiquotedstr(radiobutton2.Caption,#39)
else if(trim(edit2.Text)<>'') or(trim(edit3.Text)<>'') or(trim(edit4.Text)<>'') then
sql:= sql+'and sex='+ Ansiquotedstr(radiobutton2.Caption,#39);
end;
if(trim(edit2.Text)='') and(trim(edit3.Text)='') and(trim(edit4.Text)='') and(v_sex='') then//如果edit控件全为空,就显示所有记录,这里可以自己设置.
sql:='select* from students';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Append(sql);
adoquery1.Open;
end;
这里我没有实现日期查询,因为还不知道..(很少使用ACCESS,惭愧..)