怎样把编辑框中汉字赋给数组
要把一个编辑框中的汉字(汉字输入个数随用户输入)赋给一个数组(动态的)
我的部分代码如下,但结果提示:invalid variant type conversion
i := 1;
count := 1;
trans := Edit1.text;
len := length(trans);
tmpVar := VarArrayCreate([1,1],varByte); //创建一个变量数组
while (i<len) do
begin
tmpStr := Copy(trans,i,2);
tmpVar[Count]:= tmpstr;
Inc(count);
VarArrayRedim(tmpVar,count);
i := i + 2;
......
问题点数:20、回复次数:11Top
1 楼greeneys(水市)回复于 2005-08-01 09:33:17 得分 0
我记着可以用Byte数组保存,是两字节保存的Top
2 楼dinglinger(小呆之家)回复于 2005-08-01 09:37:49 得分 10
你用宽字符集不就行了吗?
widestring,widecharTop
3 楼firetop818(用户中文昵称)回复于 2005-08-01 10:35:58 得分 0
To dinglinger(红辣椒)
请问能给个例子吗?感谢中Top
4 楼firetop818(用户中文昵称)回复于 2005-08-01 10:44:25 得分 0
修改如下:
procedure TForm1.button1Click(Sender: TObject);
var
len ,count,i:integer;
tmpVar :Variant;
trans,tmpStr :Widestring;
begin
with table1 do
begin
table1.open();
indexfieldnames := 'Chinese';
setkey;
i := 1;
count := 1;
trans := Edit1.text;
len := length(trans);
tmpVar := VarArrayCreate([1,1],varVariant); //创建一个变量数组
while (i<len) do
begin
tmpStr := Copy(trans,i,2);
tmpVar[Count]:= tmpstr;
Inc(count);
VarArrayRedim(tmpVar,count);
i := i + 2;
fieldbyname('Chinese').Asstring := tmpVar;
if gotokey then
memo1.text := memo1.text+fieldbyname('Address').Asstring;
end;
end;
end;
结果在fieldbyname('Chinese').Asstring := tmpVar;中提示错误:invalid variant type conversion
Top
5 楼firetop818(用户中文昵称)回复于 2005-08-01 10:56:32 得分 0
我在数据库中字段名chinese定义为AlphaTop
6 楼star_of_light(Supper Star)回复于 2005-08-01 11:09:54 得分 10
procedure TForm1.Button1Click(Sender: TObject);
var
VarArr:Variant;
I:Integer;
tp:String;
begin
varArr:=VarArrayCreate([1,10],varVariant);
tp:=Edit1.Text;
For I:=1 to Length(tp) div 2 do
begin
varArr[I]:=Copy(tp,2*I-1,2);
end;
for I:=1 to 10 do
begin
Memo1.Lines.Add(String(varArr[I]));;
end;
end;Top
7 楼firetop818(用户中文昵称)回复于 2005-08-01 11:41:10 得分 0
star_of_light(Supper Star) 的语句能实现,谢谢大家!
不过我现在的问题是:在fieldbyname('Chinese').Asstring := tmpVar;中提示错误:invalid variant type conversion 是哪个地方有误呢?大家给点提示!
Top
8 楼minjunw(minjunw)回复于 2005-08-01 12:52:20 得分 0
如果是用WideString的话,我想用ASCII码方式保存可能好一点,我们在做软件时碰到UniCode都是这么做的Top
9 楼dinglinger(小呆之家)回复于 2005-08-01 13:03:52 得分 0
var
ws:widestring;
s:string;
ChrArr:array of byte;
i:integer;
ws:=edit1.text;//---ws本身就是一个数组;
s::=edit1.text;
setlength(s,length(s));
for i:=1 to length(s) do
chrarr[i-1]:=ord(s[i]);Top
10 楼firetop818(用户中文昵称)回复于 2005-08-01 13:47:20 得分 0
谢谢小辣椒,关于赋值问题已解决,不过出现了一个新的小问题,就是根据数组中的汉字去数据库查询相对应的字段是,memo1却不能显示!
我修改后的代码如下:
procedure TForm1.button1Click(Sender: TObject);
var
len ,count,i:integer;
tmpVar :Variant;
trans,tmpStr :Widestring;
begin
with table1 do
begin
table1.open();
indexfieldnames := 'Chinese';
setkey;
i := 1;
count := 1;
trans := Edit1.text;
len := length(trans);
tmpVar := VarArrayCreate([1,1],varVariant); //创建一个变量数组
while (i<len) do
begin
tmpStr := Copy(trans,i,2);
tmpVar[Count]:= tmpstr;
Inc(count);
VarArrayRedim(tmpVar,count);
i := i + 2;
fieldbyname('Chinese').AsVariant := tmpVar[count-1];
Edit2.text := tmpVar[count-1];
if gotokey then
memo1.text := memo1.text+fieldbyname('Chinese').Asstring;
end;
end;
end;
另外我在if gotokey then的前面加了Edit2显示数组中的汉字,结果显示正确,下面的语句也能执行下去,只是memo中没有显示Top
11 楼firetop818(用户中文昵称)回复于 2005-08-01 14:04:27 得分 0
更正一下,if gotokey then 下面的语句没有执行,循环一次后显示Table1:Dataset not in edit or insert modeTop




