TDemo 备注纯文本的二种存贮方式
数据库使用过程中,对于TDeme控件,对应数据库的分为nvarchar(n)类型字段。
一、通常使用二种格式的文本:
(1)单纯文本
(2)带换行符的文本
这二种格式,在TDBGrid中,显示的都一样,显示一行文本。
在TMemo中,显示的不一样了:
带换行符的文本:
单纯文本:
在实际使用时,编辑期间可以,偬需要,使用这二种格式的TDemo文字类型。
二、操作要点
1、字段类型设置长度小于255,即 nvarchar(n),n<255,这样, 在TDBGrid中,显示的都一行,不显示换行。如果设置为nvarchar(MAX),那么TDBGrid中,不能显示文字,只能在TDemo中显示文字。
2、二种格式文本的相互转换
(1)单纯文本转换这换行符文本
function StrToListStr(s:string):WideString;
var S1,S2,SS:WideString;
Top1,i:integer;
begin
Result :='';
SS:='';
S1:=S;
Top1:=1;
for i:=1 to Length(S1) do
begin
S2:=Copy(S1,i,1);
if S2='、' then
begin
SS:=SS+Copy(S1,Top1,i-Top1)+#13#10;
Top1:=i+1;
end;
end;
SS:=SS+Copy(S1,Top1,Length(S1)-Top1+1);
Result:=SS;
end;
(2)在读取时,加入换行字符
procedure TBB_6_Frm.Button11Click(Sender: TObject);
var SQL,S:string;
MyList:TStringList;
i:integer;
T:boolean;
begin
MyList:=TStringList.Create;
ClientDataSet1.DisableControls;
with ClientDataSet1 do
begin
First;
while not Eof do
begin
MyList.Clear;
S:=ClientDataSet1.FieldByName('姓名').AsString;
SQL:='select * from 入院_健康状况 where (分支='+#39+sFCID+#39+') and (姓名='#39+S+#39+') '+
'and ((分类=''既往'') or (分类=''现有'')) order by 排序';
DataModule1.ClientDataSet1.Active:=False;
DataModule1.ClientDataSet1.DataRequest(SQL);
DataModule1.ClientDataSet1.Active:=True;
with DataModule1.ClientDataSet1 do
begin
First;
while Not Eof do
begin
if FieldByName('选择').AsBoolean then
begin
T:=False;
S:=FieldByName('疾病').AsString;
for i:=0 to Mylist.Count-1 do
if S=MyList.Strings[i] then T:=True;
if Not T then MyList.Add(S);
end;
Next;
end;
First;
end;
DataModule1.ClientDataSet1.Active:=False;
S:='';
for i:=0 to Mylist.Count-1 do
if i<>Mylist.Count-1 then S:=S+MyList.Strings[i]+','+#13#10
else S:=S+MyList.Strings[i];
if Length(S)>1 then
begin
ClientDataSet1.Edit;
ClientDataSet1.FieldByName('诊断').AsString:=S+'。';
ClientDataSet1.Post;
end;
Next;
end;
end;
ClientDataSet1.First;
ClientDataSet1.EnableControls;
MyList.Free;
end;
(3)换行符文本转换为单纯文本
function Text_DelTemp(Text:String):String; // 删除字符中 回车 Tab 空格 无效字符
var S:String;
begin
Result := '';
S:= Trim(Text);
S:=StringReplace(S, chr(13)+chr(10), '', [rfReplaceAll]); // 删除回车
S:=StringReplace(S, ' ', '', [rfReplaceAll]); // 删除空格
S:=StringReplace(S, chr(9), '', [rfReplaceAll]); // 删除Tab
Result := S;
end;