万能的大富翁,数据库的问题谁来就我(25)

  • 主题发起人 主题发起人 terry_zhou82
  • 开始时间 开始时间
T

terry_zhou82

Unregistered / Unconfirmed
GUEST, unregistred user!
程序思路是这样,有2个窗口,一个用来输数据类型。在另外的一个主窗体里面通过类型来执行相应的操作。比过说类型有“电子邮件”,“气泡提示”但是程序总数通不过。代码如下,能不能帮我看看呢?var s:stirng;begins:=ABSTable1.FieldByName('提醒类型').AsString;case s of '气泡提示':Ballontip; '闪屏振动':Shakewindows;end;end但是系统总是提示:[DCC Error] MainFrm.pas(324): E2001 Ordinal type required[DCC Error] MainFrm.pas(325): E2010 Incompatible types: 'Integer' and 'string'这个是什么情况啊?
 
用case ofs 只能是 整型的建议改为if s = '气泡提示' then Ballontipelse if s = '闪屏振动' Shakewindows;
 
那如果有很多呢?我就只能一直if else 下去?
 
DELPHI中,Case后面的变量只能是枚举类型、布尔类型、Int类型。其他类型的变量不能出现在Case后。----------------------------你也可以定义一个数组,数组中存放 ‘提醒类型’和过程的对应关系,然后通过For循环来实现你的目的,例如:procedure TForm1.Button2Click(Sender: TObject);Type TProcedure = procedure; _Rec = record Name:String; Pro:TProcedure; end;Const AA: Array [1..2] of _Rec = ( (Name:'气泡提示';Pro:Ballontip), (Name:'闪屏振动';Pro:Shakewindows) );var S:stirng; I:Integer;begin s:=ABSTable1.FieldByName('提醒类型').AsString; for I:=Low(AA) to High(AA) do IF AA.Name = S then begin AA.Pro; Break; end;end;
 
s:=ABSTable1.FieldByName('提醒类型').AsString;可不可以在数据表中加一个字段呢?s:=ABSTable1.FieldByName('提醒类型编号').Asinteger;
 
Delphi 的 case 语句不支持字符串,有这种需求要做适当变通。
 
如果只是显示一下,可以把要显示的内容作为参加传进来
 
多人接受答案了。
 
后退
顶部