我从客户端动态收到一个字符串,如‘1’,‘2’,‘33’……
收到后我要用sql语句查询:
select num from biao where id in (1,2,33)//大概就是这样的格式。
我要怎么转化一下?需要用到数组吗?另外,我要把查出来的num再转换成如:‘11’,‘22’,‘333’的这中格式。要怎么做?或者哪位大虾能给个更好的建议,我这样做主要是因为数据传输的格式是‘’,‘’的。
收到后我要用sql语句查询:
select num from biao where id in (1,2,33)//大概就是这样的格式。
我要怎么转化一下?需要用到数组吗?另外,我要把查出来的num再转换成如:‘11’,‘22’,‘333’的这中格式。要怎么做?或者哪位大虾能给个更好的建议,我这样做主要是因为数据传输的格式是‘’,‘’的。
解决方案 »
- Delphi7 中如何添加.exe的控件?
- 如何使dbgrid显示时 同样信息都相邻?
- 初恋女朋友来了,我不敢见她...
- 最简单的DELPHI应用求助
- 关于多个DBChart同步缩放和移动的问题,请多指教!急!(100分,不够再加!)
- 怎么处理多个结果集
- 怎麼把查詢結果導出到制定的Excel文檔中???最好有代碼
- qreport的设计中我分组显示了查询的结果,并且想count每组的记录数量,怎么做啊?
- 继承了一个TButton,如何屏蔽它的enable属性?
- ACCESS Violation at address 004CBAE5 in module不能执行
- 软件注册问题!
- 怎样同时查询两个Access数据库?
str:=StringReplace(‘1’,‘2’,‘33’,'‘','',[rfReplaceAll]);
'select num from biao where id in ('+str+')' ;
s:string;
i:integer;
begin
s = '1,2,33';
while Pos(',',s) > 0 do
begin
i := Pos(',',s);
s[i] := ',';
end;
end;后面也是一样的转换,注意全角与半角的区分
也可以用Pos+循环来实现
我想查询:SELECT NUM FROM BIAO WHERE ID IN (1,2,3)
再把查出来的num做成一个字符串,如111,222,333,发送出去。网络通信中我每次发送的如:1,2,……到几千呢,这样直接传字符串不好吧,求大虾们指点。
str : string;begin
str:=StringReplace(''1','2','33'',',',',',[rfReplaceAll]);
str:=StringReplace(''1','2','33'',',',',',[rfReplaceAll]);
'select num from biao where id in ('+str+')' ;
end;注意全角与半角的区分
可我显示的时候:
edit2.Text:= FReceived;
with adoquery1 do
begin
sql.Clear;
sql.Add('select m_num from shouji where id in '+'('+edit2.Text+')');
open;
end;
while not eof do
s:=s+','+adoquery1.FieldValues['m_num'];
next;
edit3.Text:=s;
end;
我想edit3显示最终的s,可提示错误,怎么回事?
showmessage(sql.text);显示一下,你的SQL。TEXT
open;
select m_num from shouji where id in ('11','33')如果显示这样就对了,不是你可以再改改
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
function DeleteSubStr(S, SubStr: String): String;
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.SeparateTerms(s : string;Separator : char;Terms : TStringList);
{ This browses a string and divide it into terms whenever the given
separator is found. The separators will be removed }
var
hs : string;
p : integer;begin
Terms.Clear; // First remove all remaining terms
if Length(s)=0 then // Nothin' to separate
Exit;
p:=Pos(Separator,s);
while P<>0 do
begin
hs:=Copy(s,1,p-1); // Copy term
Terms.Add(hs); // Add to list
Delete(s,1,p); // Remove term and separator
p:=Pos(Separator,s); // Search next separator
end;
if Length(s)>0 then
Terms.Add(s); // Add remaining term
end;procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
sl:Tstringlist;
i:integer;
begin
sl:=Tstringlist.Create;
s:='''1'',''2'',''3''';
s:=DeleteSubStr(s,'''');
SeparateTerms(s,',',sl);
for i:=0 to sl.Count-1 do
showmessage(sl[i]);
end;//删除字符串S中的子串SubStrfunction TForm1.DeleteSubStr(S, SubStr: String): String;beginwhile Pos(SubStr, S) <> 0 doDelete(S, Pos(SubStr, S), Length(SubStr));Result := S;end;end.
作用是在一个字符串中删除某个子串,目的是把‘1’,‘2’,‘33’变成1,2,3
一个过程:SeparateTerms(s : string;Separator : char;Terms : TStringList);
作用是在字符串中用某个字符分成若干段,返回一个TStringlist,目的是把1,2,3变成
sl[0]:=1,sl[1]:=2,sl[0]:=3
然后你再用StrToInt(sl[i])不就行了吗?
能不能介绍几本入门的书籍来看看