向高手请教一个字母类型变量的转换问题(100分)

  • 主题发起人 主题发起人 delphilai
  • 开始时间 开始时间
D

delphilai

Unregistered / Unconfirmed
GUEST, unregistred user!
一个字母比如'D',要把它转换成下一个字母,具体如何实现?
我想是要先转换成整型的,用ord()函数实现,然后加1,再把它转换成字母,具体如何操作?
请高手指点一下.
 
chr(ord('D')+1)
 
没错,就是它!(可惜来晚了[:)])
 
对不起,我还是没编译成功,能不能帮我解释详细一点?chr和ord的返回类型和参数类型是什么?
如何互相转换?我找不到相关参考书,我编的源代码如下,请帮我这菜鸟修改,等我编译
成功后一定给各位大富翁加分,谢谢:
var
; Maxtypeid:integer;
; num:char; ;
begin
……
MaxTypeid:=query1.FieldValues['MaxTypeId'];//maxtypeid是最大的类型号,文本型
; num:=chr(ord(maxtypeid)+1);//转换成下一个字母
;// dbedit1.Text:=num;??如何把它作为字符显示出来?
end;
 
var
; Maxtypeid:integer;
; Maxtypeid:integer;
; str:string;
begin
……
MaxTypeid:=query1.FieldValues['MaxTypeId'].AsInteger;//maxtypeid是最大的类型号,文本型
; ;str:=IntToStr(maxtypeid+1)
; dbedit1.Text:=str;//??如何把它作为字符显示出来?
end;
 
字符串转换为整数:
strtoint
整数转换为字符串:
;inttostr ;
 
好像应该是这样的吧:
var
; Maxtypeid:integer;
; num:char; ;
begin
……
MaxTypeid:=query1.FieldValues['MaxTypeId'];//maxtypeid是最大的类型号,文本型
; num:=chr(ord(maxtypeid)+1);//转换成下一个字母
;// dbedit1.Text:=num[1];
end;
 
chr(ord('D')+1)
 
还是不行啊,难道这问题那么的难么?大家注意了, ;num:=chr(ord(maxtypeid)+1);
这num是char类型的,不是string类型的!!!,现在要把它作为字符在编辑框里显示出来
,哪位资深的程序员能帮我解答??很急要赶任务啊,是菜鸟就别来乱发垃圾了。
 
首先,要是你的query1.FieldValues['MaxTypeId']的值有大于9的,那你的想法就不成立了。
因为例如:12 是个int,不过,它是2个字符!!!所以根本没有下一个字符的说法。

如果都小于9,就类似下面:
var
; Maxtypeid:integer;
; num:char; ;
begin
……
MaxTypeid:=query1.FieldValues['MaxTypeId'];//maxtypeid是最大的类型号,文本型
; num:=chr(ord(maxtypeid+48)+1);//转换成下一个字母
;// dbedit1.Text:=num[1];
end;

我没有实际运行,应该就是这样。
 
嘿黑!我就是老大!
给我分吧!

var
; Maxtypeid:integer;
; num:char; ;
begin
……
; ;MaxTypeid:=query1.FieldValues['MaxTypeId'];//maxtypeid是最大的类型号,文本型
;
; ;num:=chr(maxtypeid+1);//转换成下一个字母,不必用ord,因为ord(整数)=整数自己
; ;dbedit1.Text:=num;//作为字符显示出来了!
end;
 
我试过了tomye,wql,rainbow等各位大侠的所有招式,还是无法破解。提示错误如:Variant does not reference
;an automation object,invalid variant type conversion。typeid是“站点类型”字段
,文本型,长度为1,数据库TStation已有('A','B','C','D')四条记录,现在当增加一条记录时,
query1.sql.Text='select max(Typeid) as maxtypeid from TStation'查找出最大的类型
号('D'),并自动转换成下一个字母'E'(一般情况下类型不
会很多不超过9个,所以你不用担心两个字符的情况),作为新记录的类型号('E'),现在
要把最大的类型号取出来,用ord()+1转成下一个字母,再转换成字符串在dbedit1中显示
出来,最大的也是最关键的也是最头疼的就是这(integer|char|String)的互相转换的问题。
 
这样:
num := Chr(Byte(maxtypeid)+1);
嘿嘿!
 
我的测试代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
; MaxTypeID : Variant;
; S : String;
; Num : Char;
begin
MaxTypeID := 'A';
S := MaxTypeID;
Num := chr(ord(S[1])+1);
ShowMessage(Num);
end;
//Num的结果显示为'B';

因为query1.FieldValues['MaxTypeId'];返回的是一个Variant,所以我建议你把你的代码
的变量定义稍微改一下:
var
; MaxTypeID : Variant;
; S : String;
; Num : Char;
begin
……
; ;MaxTypeid:=query1.FieldValues['MaxTypeId'];//maxtypeid是最大的类型号,文本型
; ;S := MaxTypeID;
; ;num:=chr(ord(S[1])+1);//转换成下一个字母,不必用ord,因为ord(整数)=整数自己
; ;dbedit1.Text:=num;//作为字符显示出来了!
end;

看帮助上说Variant 和 Char 之间可以转换,但是我用Num := MaxTypeID;却通不过,搞不
懂。
如果不对请别骂我,呵呵。
 
嘿黑!我就是老大!
给我分吧!

*** 我知道你的错误了!原来不在字符转换上!

var
//***by wql 删除这一句: ;Maxtypeid:integer;
; num:string; ;//***by wql 改这一句为string。
begin
……
; ;setlength(num,119);//***by wql 加一句。

; ;num:=query1.FieldByName['MaxTypeId'].AsString;//***by wql 改

; ;num[1]:=chr(byte(num[1])+1); //转换成下一个字母,不必用ord,因为ord(整数)=整数自己

; ;dbedit1.Text:=num;//作为字符显示出来了! 大功告成也 !
end;

已经测试过!!!赶快给我加分!!!
 
还是教父对,wql的好象还是没通过,所以最后决定给教父80,给wql 20分。
谢谢各位的帮助。祝愿中国的程序员越来越厉害!
 
后退
顶部