简单的问题,请回答 30分 不行啊!帮帮我…… (30分)

  • 主题发起人 主题发起人 wfyxb
  • 开始时间 开始时间
W

wfyxb

Unregistered / Unconfirmed
GUEST, unregistred user!
要查询 编号字段 编号格式为
123k1
111k2
231y5
321y2
221k3 ……
当用户在查询窗口输入k,确定后系统能把编号
中第四个字符为‘k’的记录都显示出来。
 
select * from 表名 where 编号 like '???k*'
 
用like可不可以解决啊?
Select * from Table where id like '%k% '
 
如果用的是SQL SERVER就应写成
SELECT * FROM 表名 WHERE 编号 LIKE '____k%'
 
在sql中:
select * from tablename
where fieldname like '_ _ _k%' --其中“_”之间的空格是不要的,这里为了显示方便

在delphi中:
AdoDataSet.Filtered := false;
AdoDataSet.Filter := '[fieldname] like ''_ _ _k%'' '
AdoDataSet.Filtered := true;

 
还是不行,大家注意,用户输入的字符是变化的,不能在程序中固定为k.请指教----菜鸟
 
var
k:=string;
begin
k:=edit1.text;
Select * from Table where id like '%k%
 
var
k:=string;
begin
k:=edit1.text;
with query1 Do
begin
SQL.Close;
SQL.Clear;
SQL.Add('select * from 表名 where 编号 like '???'+k+'%');
Open;
...
end;
 
哎,真的是!
with Table1 do begin
Active :=False;
SQL.Text:=Format('select %s From TableName where FieldName like ''____%s''',['*',Edit1.Text]);
Open;
end;
 
//本程序未经调试。
//本程序只适用于一个字符的查询。
var
k, n : string;
...
begin
try
//edit1中输入要求查询的字符的位置
if strtoint(edit1.text) > 0 then n := trim(edit1.text)
else begin
showmessage('请输入一个大于零的数!');
exit;
end;
except
showmassage('请输入一个整数!');
exit;
end;
//edit2中输入查询的参数
k := trim(edit2.text);
//限宽为1
if length(k) <> 1 then
begin
showmessage('请输入一个有效字符!');
exit;
end;
with query1 do
begin
close;
sql.clear;
//left(),right()只有在后台数据库为SQL SERVER时才能用!
sql.add('select * from table where right(left(编号, ' + n + '), 1) = :v');
//用同样的方法,可以更改后面的‘1’值,从而更改查询宽度。
parameters.parambyname('v').value := k;
open;
end;
end;

 
var
str:string;
begin
//Tedit1的键值属性可以在keypress事件中屏蔽
str:='___'+edit1.text+'_';
with datamodulefrm.adoq_temp do
begin
close;sql.clear;
sql.text:='select * from table1 where 编号 like '+''''+str+'''';
open;
end;
end;
 
With Query do
begin
Close;
SQL.Clear;
SQL.Add('Select * from table where 编号 like '+Quotedstr('%'+edit1.text+'%'));
Open;
end;
 
多人接受答案了。
 
后退
顶部