社区
C++ Builder
帖子详情
当发生异常时,显示中止,重试,忽略对话框,当选择了重试,如何跳到错误代码处重新执行,专业的做法该是怎样的?
ciml
2001-09-27 12:19:36
bcb好像没有提供这样的机制!
...全文
433
11
打赏
收藏
当发生异常时,显示中止,重试,忽略对话框,当选择了重试,如何跳到错误代码处重新执行,专业的做法该是怎样的?
bcb好像没有提供这样的机制!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
april_d
2001-10-07
打赏
举报
回复
gz
ciml
2001-09-28
打赏
举报
回复
我一直想不通,为什么bcb的异常类没有错误代码,只有错误消息,如果有
错误代码就不至于想这样写了:
E.Message.Pos("Unknown user name or password")!=0
真的没有吗?没有的话,我得想想自己派生了!
xycleo
2001-09-28
打赏
举报
回复
老大一出手就是好东西1!!
俺拿下了1!
Wingsun
2001-09-27
打赏
举报
回复
有啊!你可以这样写哦!
Screen->Cursor=crHourGlass;
TRegistry * pRegInfo=new TRegistry();
bool bContinue=true;
AnsiString Sa,Password;
AnsiString Server;
pRegInfo->RootKey=HKEY_LOCAL_MACHINE;
pRegInfo->OpenKey("\\Software\\mysoft\\ddd",true);
Server=pRegInfo->ReadString("Server Name");
Sa=pRegInfo->ReadString("User");
Password=pRegInfo->ReadString("Pass");
if(Sa=="")
{
Sa="SA";
pRegInfo->WriteString("User","SA");
}
if(Server=="")
{
Screen->Cursor=crDefault;
MessageBox(Application->Handle,"不能与服务器建立连接,请输入服务器名称。",
"不能与服务器建立连接",MB_OK+MB_ICONSTOP+MB_APPLMODAL);
FrmServerName=new TFrmServerName(this);
FrmServerName->EdtServerName->Text=Server;
if(FrmServerName->ShowModal()==mrOk)
{
pRegInfo->WriteString("Server Name",FrmServerName->EdtServerName->Text);
Server=FrmServerName->EdtServerName->Text;
}
else
{
bContinue=false;
}
Screen->Cursor=crHourGlass;
delete FrmServerName;
}
dtaCjda->Params->Values["Server NAME"]=Server;
dtaCjda->Params->Values["USER NAME"]=Sa;
dtaCjda->Params->Values["Password"]=Password;
dtaCjda->Session->SQLHourGlass =false;
while((!dtaCjda->Connected) && bContinue)
{
try
{
dtaCjda->Connected =true;
}
catch(EDatabaseError &E)
{
if((E.Message.Pos("Specified SQL server not found")!=0)||
(E.Message.Pos("Cannot locate or connect to SQL server")!=0))//找不到服务器。
{
Screen->Cursor=crDefault;
MessageBox(Application->Handle,"不能与服务器建立连接,请输入服务器名称。",
"不能与服务器建立连接",MB_OK+MB_ICONSTOP+MB_APPLMODAL);
FrmServerName=new TFrmServerName(this);
FrmServerName->EdtServerName->Text=dtaCjda->Params->Values["Server Name"];
if(FrmServerName->ShowModal()==mrOk)
{
pRegInfo->WriteString("Server Name",FrmServerName->EdtServerName->Text);
dtaCjda->Params->Values["Server Name"]=FrmServerName->EdtServerName->Text;
}
else
{
bContinue=false;
}
Screen->Cursor=crHourGlass;
delete FrmServerName;
}
else if(E.Message.Pos("Unknown user name or password")!=0)//用户名或口令不对。
{
Screen->Cursor=crDefault;
MessageBox(Application->Handle,"不能登录进入服务器,请输入SQL Server 用户名和口令。",
"不能与服务器建立连接",MB_OK+MB_ICONSTOP+MB_APPLMODAL);
FrmUserPassword=new TFrmUserPassword(this);
FrmUserPassword->EdtUser->Text=dtaCjda->Params->Values["USER NAME"];
FrmUserPassword->EdtPassword->Text=dtaCjda->Params->Values["PASSWORD"];
if(FrmUserPassword->ShowModal()==mrOk)
{
pRegInfo->WriteString("Pass",FrmUserPassword->EdtPassword->Text);
pRegInfo->WriteString("User",FrmUserPassword->EdtUser->Text);
dtaCjda->Params->Values["USER NAME"]=FrmUserPassword->EdtUser->Text;
dtaCjda->Params->Values["PASSWORD"]=FrmUserPassword->EdtPassword->Text;
}
else
{
bContinue=false;
}
delete FrmUserPassword;
Screen->Cursor=crHourGlass;
}
else
{
Screen->Cursor=crDefault;
AnsiString Prompt;
Prompt="发生未知错误:\n";
Prompt+=E.Message;
MessageBox(Application->Handle,Prompt.c_str(),
"发生未知错误",MB_OK+MB_ICONSTOP+MB_APPLMODAL);
bContinue=false;
Screen->Cursor=crHourGlass;
}
}
}
pRegInfo->CloseKey();
delete pRegInfo;
Screen->Cursor=crDefault;
return dtaCjda->Connected;
maquanjun
2001-09-27
打赏
举报
回复
我记得安装bcb时,它会提示你一个设置,就是这个问题,但它好像不会提示你终止吓重试,而是直接就跳到错误代码处
ciml
2001-09-27
打赏
举报
回复
gz
ciml
2001-09-27
打赏
举报
回复
HEROIN(HEROIN)
的方法也是一种方法,但可能不是很好的方法,因为递归可能导致栈溢出
用户完全可以按重试按钮按着玩!
ciml
2001-09-27
打赏
举报
回复
春阳:
你那只是在程序中自己逐一判断,我觉得你那样还比较繁琐。不如把需要的参数全部以
对话框的形式出现提示用户输入,每当某个参数为空或者因为参数错误而登陆失败,都
调用该对话框要求用户重新指定参数。
比如服务器没有开,那么登陆必定失败,所以可以提示让用户重试(用户开了服务器后)
类似的还有软盘没有准备好等错误。这类错误是可以由用户干预而避免的,vb里就有
相关的语句可以自动跳到错误发生处重新执行。bcb中好像没有,难道我自己要用循环
来实现。而且即使自己来实现,程序结构可能很混乱,而且可能弄得比较复杂!
HEROIN
2001-09-27
打赏
举报
回复
呵呵,上面括号位置有些错误
void LogOn()
{
bool OK=JudgePassword();
if(!OK)
{
int i= Application->MessageBox("密码校验","密码错误",MB_ABORTRETRYIGNORE)
if(i==IDABORT )
Application->Termite();
if(i==IDCANCEL )return;
if(i==IDRETRY )
LogOn();
}
else
{
.....
}
}
HEROIN
2001-09-27
打赏
举报
回复
我一般用递归来处理
void LogOn()
{
bool OK=JudgePassword();
if(!OK)
{
int i= Application->MessageBox("密码校验","密码错误",MB_ABORTRETRYIGNORE)
if(i==IDABORT )
Application->Termite();
if(i==IDCANCEL )return;
if(i==IDRETRY )
LogOn();
else
{
.....
}
}
}
}
书生
2001-09-27
打赏
举报
回复
春阳出手了。学习~
VB关于messagebox学习资源网站
- vbAbortRetryIgnore:
显示
“
中止
”、“
重试
”和“
忽略
”按钮。 - vbYesNoCancel:
显示
“是”、“否”和“取消”按钮。 - vbYesNo:仅
显示
“是”和“否”按钮。 - vbRetryCancel:
显示
“
重试
”和“取消”按钮。...
delphi资源-MessageDLG
- `MB_ABORTRETRYIGNORE=$00000002`:
显示
“
中止
”、“
重试
”和“
忽略
”按钮。 - `MB_YESNOCANCEL=$00000003`:
显示
“是”、“否”和“取消”按钮。 - `MB_YESNO=$00000004`:
显示
“是”和“否”按钮。 - `MB_...
计算机
专业
英语100句.pdf
2. **
中止
,
重试
或取消**:这是一个常见的
对话框
选项,当系统遇到问题
时
,用户可以
选择
是否中断当前操作,尝试再次
执行
,或者完全
忽略
错误。 3. **授权协议书**:在安装软件前,用户必须阅读并同意的法律文档,它...
vbs msgbox 按钮及图标
- `MsgBox("helloworld",3,"提示")`
显示
了包含“
中止
”、“
重试
”和“
忽略
”按钮的消息框,图标为默认图标。 - `MsgBox("helloworld",16,"提示")`
显示
了一个只包含“确定”按钮的消息框,图标为红色叉号。 - `...
MFC断言应用,设和初学者进阶
反之,如果表达式为假,程序会弹出一个
对话框
,提供“
中止
”、“
重试
”或“
忽略
”的选项。在调试版本中,`_DEBUG`预
处
理符被定义,`ASSERT`宏会生成相应的检查代码;而在发布版本中,由于`_DEBUG`未被定义,`ASSERT`...
C++ Builder
13,874
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章