有 表1(CNO,MESSAGE)CNO MESSAGE
-----------------------------------------
001 2021|AA|20070902
002 2022|CC|20070905
003 2058|BB|20070906在 Edit1.text输入 "001", 点击BitBtn1后 ,则在DBGridEh1显示如下CNO C1 c2 C3
-----------------------------------------
001 2021 AA 20070902通过分界符"|" 把MESSAGE字符串 “2021|AA|20070902“ 分为3列
在Edit1.text再次输入“002“ ,点击BitBtn1后 DBGridEh1 结果如下CNO C1 c2 C3
---------------------------------
001 2021 AA 20070902
002 2022 CC 20070905
只有当点击BitBtn2后,才将DBGridEh1的结果集 插入到
表2(CNO, C1, c2, C3)
数据库是sybase,新手发帖,帮忙回答一下,谢了!
-----------------------------------------
001 2021|AA|20070902
002 2022|CC|20070905
003 2058|BB|20070906在 Edit1.text输入 "001", 点击BitBtn1后 ,则在DBGridEh1显示如下CNO C1 c2 C3
-----------------------------------------
001 2021 AA 20070902通过分界符"|" 把MESSAGE字符串 “2021|AA|20070902“ 分为3列
在Edit1.text再次输入“002“ ,点击BitBtn1后 DBGridEh1 结果如下CNO C1 c2 C3
---------------------------------
001 2021 AA 20070902
002 2022 CC 20070905
只有当点击BitBtn2后,才将DBGridEh1的结果集 插入到
表2(CNO, C1, c2, C3)
数据库是sybase,新手发帖,帮忙回答一下,谢了!
try
CommaText := StringReplace(S, '', ',', [rfReplaceAll]); ....
finally
Free;
end;
能不能具体一点啊,这样对于现在的我来说太难了啊~
var
s : string;
sl : TStringList;
i : Integer;
begin
s := 'asd 3243|435 456346|4364654';
sl :=TStringList.Create;
SplitColumns(s,sl,'|');
for i:=0 to sl.Count-1 do
ShowMessage(sl.Strings[i]);
sl.Free;
end;
实现大概也就是这样var
stringList:TStringList;
IntI:Integer;
procedure SplitColumns(subStr:string;s:string;var strList:TStringList);
var
Index:Integer;
begin
Index:=Pos( subStr, s );
while Index > 0 do
begin
strList.Add( Trim( Copy( s, 1, Index-1 ) ) );
s:=copy( s, Index+1, length( s ) - Index );
Index:=Pos( subStr, s );
end;
strList.Add( Trim( s ) );
end;
begin
stringList:= TStringList.Create;
SplitColumns( '&','2021 ¦AA ¦20070902',stringList );
self.ListBox1.Items.Assign( stringList );
stringList.Free;
end;
CREATE function GetIndexStr(@s varchar(30),@Idx int,@c char) returns varchar(30)
as
begin
declare @strTmp varchar(30)
if (@Idx <= 0) or (CharIndex(@c,@s) = 0)
set @strTmp = @s
else if @Idx = 1
set @strTmp = SubString(@s,1,CharIndex(@c,@s)-1)
else
set @strTmp = GetIndexStr(SubString(@s,CharIndex(@c,@s)+1,len(@s)),@Idx-1,@c)
return @strTmp
end然后再用SQL语句得出数据集
select CNO,GetIndexStr(Message,1,'¦') C1,GetIndexStr(Message,2,'¦') C2,
GetIndexStr(Message,3,'¦') C3 from 表1 where CNO <= ''' + Edit1.text +'''
它修正了TStrings.DelimitedText和TStrings.Delimiter将空格也作为分隔符的问题IdStrings.pas是Indy提供的一个字符单元,D6以上版本自带
ADOQuery1.SQL.Add('select CNO,MESSAGE from 表1 where CNO='''+edit1.Text+''''); //函数如何套用在语句里面实现如下结果???
ADOQuery1.Open;
CNO C1 C2 C3
-----------------------------------------
001 2021 AA 20070902 还有怎样实现在Edit1.text再次输入“002“ ,点击BitBtn1后 DBGridEh1 结果如下 CNO C1 C2 C3
---------------------------------
001 2021 AA 20070902
002 2022 CC 20070905
只有当点击BitBtn2后,才将DBGridEh1的结果集 插入到
表2(CNO, C1, c2, C3)