問題如下:
在Edit1中輸入類似:12854,25632,14785,16523,45872,然後利用POS取出逗點分隔的這5個數,再SQL中查詢出這5條記錄?
請各位前輩幫忙修正指出,如何實現類似的批量查詢功能???分不夠可加,謝謝!
procedure TCQ_JB_F.edt_wnKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
StrSQL,StrALL,StrX:string;
i:Integer;
begin
inherited;
StrALL:=edt_wn.Text;
for i:=0 to Pos(',',StrALL) -1 do
begin
if Pos(',',StrALL)>0 then
begin
StrX:=Copy(StrALL,0,Pos(',',StrALL)-1);
StrALL:=Copy(StrALL,Pos(',',StrALL),Length(StrALL));
ShowMessage(StrX);
end
else
begin
StrX:=StrALL;
ShowMessage(StrX);
end;
end;
{if not ( Key in[13,32,8,10]) then // 輸入一個數字模糊查詢
begin
StrSQL:='select * from Res_User_Temp where ACCOUNT_ID like '+''''+edt_wn.Text+'%''';
if StrSQL<>'' then
begin
adoq_PLJB.Close;
adoq_PLJB.SQL.Clear;
adoq_PLJB.SQL.Add(StrSQL);
adoq_PLJB.Open;
end;
end;}
end;
在Edit1中輸入類似:12854,25632,14785,16523,45872,然後利用POS取出逗點分隔的這5個數,再SQL中查詢出這5條記錄?
請各位前輩幫忙修正指出,如何實現類似的批量查詢功能???分不夠可加,謝謝!
procedure TCQ_JB_F.edt_wnKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
StrSQL,StrALL,StrX:string;
i:Integer;
begin
inherited;
StrALL:=edt_wn.Text;
for i:=0 to Pos(',',StrALL) -1 do
begin
if Pos(',',StrALL)>0 then
begin
StrX:=Copy(StrALL,0,Pos(',',StrALL)-1);
StrALL:=Copy(StrALL,Pos(',',StrALL),Length(StrALL));
ShowMessage(StrX);
end
else
begin
StrX:=StrALL;
ShowMessage(StrX);
end;
end;
{if not ( Key in[13,32,8,10]) then // 輸入一個數字模糊查詢
begin
StrSQL:='select * from Res_User_Temp where ACCOUNT_ID like '+''''+edt_wn.Text+'%''';
if StrSQL<>'' then
begin
adoq_PLJB.Close;
adoq_PLJB.SQL.Clear;
adoq_PLJB.SQL.Add(StrSQL);
adoq_PLJB.Open;
end;
end;}
end;
解决方案 »
- 急求,delphi调用C语言动态库传结构体报错
- 如何模拟Windows系统剪贴板的复制操作?
- 怎样监控:建立文件(夹)、哪个程序建立的、怎样禁止不让建立文件夹?
- 怎么vb中算的对数结果和delphi中的不一样?
- 0怪哉,DLL中不能包含多个窗体
- 如何实现定时关机的程序
- 强烈建议建立一个dxdbgrid的应用专题(不知有没有,我没搜过),因为它太强大了
- Access中自动编号是什么类型?
- ***高手请进***:OICQ是怎样调用NetMeeting呼叫好友的?
- 怎样判断系统是否是Windows XP?
- 调用dll的问题????????
- 为什么大家都叫 hongqi162 月亮mm?只是好奇,并无恶意
'select * from Res_User_Temp where ACCOUNT_ID in(' + QuotedStr(n1) + ',' + QuotedStr(n2) + ',' + ... + )
你其实不用拆分的...只要在EDIT1中规定好规则就行了.像这样>>>[12854,25632,14785,16523,45872]不管有多长.
在SELECT中你用IN来解决.如:
select * from Res_User_Temp where ACCOUNT_ID in (12854,25632,14785,16523,45872)如果理解错了,如你真的需要12854是否模糊查询,那我就说错了.如果12854是帐号的完整值,那就是对的.
select * from Res_User_Temp where ACCOUNT_ID in (EDIT.TEXT怎樣傳參數呢?)
var
StrSQL:string;
begin
inherited;
if Key=#13 then
begin
StrSQL:='select * from Res_User_Temp where ACCOUNT_ID in ('''+ edt_wn.Text+''')';
if StrSQL<>'' then
begin
adoq_PLJB.Close;
adoq_PLJB.SQL.Clear;
adoq_PLJB.SQL.Add(StrSQL);
adoq_PLJB.Open;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var list:tstringlist;
s:string;
i:integer;
begin
s:='12854,25632,14785,16523,45872';
list:=tstringlist.Create;
list.CommaText:=s; for i:=0 to list.Count-1 do
begin
showmessage(list[i]);
end;
list.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var list:tstringlist;
s:string;
i:integer;
begin
s:='12854,25632,14785,16523,45872';
list:=tstringlist.Create;
list.CommaText:=s; for i:=0 to list.Count-1 do
begin
showmessage(list[i]);
end;
list.Free;
end;
SQL:string;
i:integer;
S:TString;
begin SQl:='Select * from Table where ';
//查询个数和赋值我这就不写了
for i:=0 to S.count-1 do begin
if i>0 then SQL:=SQL+' or ';
SQL:=SQL+'Item like '%''+S[i]+''%'';
end; .....
//我这只写出了SQL语句,执行都差不多的
//语句中的Or 表示可同时满足多个条件,但不需要都一样
end;
汗,直接把EDIT.TEXT给递过去啊.
str,tmp:string;str=edit.Text.Trim; //假设str==12854,25632,14785,16523,45872
tmp='select * from Res_User_Temp where ACCOUNT_ID in ('+str+') ';>>>把TMP传给ADOQUERY....
>>>写到tmp的时候,我发现如果ACCOUNT_ID是否字符型的,也是错...字符型是要加单引号的.在MS SQL中.
触发一次,键弹起时触发一次)当然在BUTTON的CLICK事件中,进行检验也行,就是对EDIT1.TEXT的值进行验算处理.