CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

怎样把编辑框中汉字赋给数组

楼主firetop818(用户中文昵称)2005-08-01 08:58:53 在 Delphi / VCL组件开发及应用 提问

要把一个编辑框中的汉字(汉字输入个数随用户输入)赋给一个数组(动态的)  
  我的部分代码如下,但结果提示: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

相关问题

  • 如何把edit1.text中的汉字赋给char数组?
  • 数组赋值
  • 数组赋值!
  • 急!!!数组赋值
  • 文本框数组
  • Byte 数组中有汉字的时候如何处理
  • 关于BYTE数组和汉字转换问题
  • 数组赋值问题
  • 为数组赋值出错!
  • 怎样对数组赋值???

关键词

  • 汉字
  • 数组
  • 编辑框
  • 输入
  • trans

得分解答快速导航

  • 帖主:firetop818
  • dinglinger
  • star_of_light

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo