- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我有这个函数可以使用 TUniQuery 更新我的 Access DB:
var
Res:Boolean;
begin
Res:=false;
try
with MyQuery do
begin
Active := false;
SQL.Clear;
SQL.Add('Update MYTABLE');
SQL.Add('set username='+QuotedStr(NewUserName));
SQL.Add(',password='+QuotedStr(NewPassword));
SQL.Add('where username='+QuotedStr(ACurrentUserName));
ExecSQL;
Res:=true;
end;
except
Res:=False;
end ;
Result:=Res;
end;
使用 Try ... except 是否足以知道“ExecSQL”何时成功或失败?
或者还有其他更好的方法吗?
谢谢
最佳答案
如果没有引发异常,您可能会认为更新已成功。这意味着数据库可以响应并解析并执行您的语句,没有语法错误。
在如图所示的语句中,您可能还想确保一行已更新,因为我认为这就是您的意图。
要检查这一点,您可以使用 ExecSQL 方法的结果,该方法返回受语句执行影响的行数。因此,您可以将代码更改为:
begin
with MyQuery do
begin
Active := false;
SQL.Clear;
SQL.Add('Update MYTABLE');
SQL.Add('set username='+QuotedStr(NewUserName));
SQL.Add(',password='+QuotedStr(NewPassword));
SQL.Add('where username='+QuotedStr(ACurrentUserName));
Result := ExecSQL = 1; //exactly 1 row updated
end;
end;
我还更改了无条件异常处理程序,因为它可能不是处理任何异常的正确位置,并且还删除了用于存储结果的局部变量,因为这确实没有必要。
阅读您添加的文字并重新思考您的问题后:
Is the use of Try ... except enough to KNOW when " ExecSQL " succeeds or fails ?
您确实必须改变关于异常处理和从此例程返回 bool 值的想法。异常是作为一个关于如何解决程序中的异常和错误情况的全新概念引入的,但是您正在扼杀这种全新的(恕我直言,更好)方法,并诉诸旧的方法来返回指示成功或失败的值。
特别是吃掉任何异常的 try/exception
block 是一种不好的做法,因为您将杀死可能因太多原因引发的异常:内存不足、网络问题(例如连接丢失)数据库等
您必须重新考虑您的方法,并在应用程序的适当级别处理这些异常或错误情况。
我的建议是:
例程可能如下所示:
procedure TMySecurityManager.ChangeUserNameAndPassword();
begin
MyQuery.SQL.Text := 'Update MYTABLE'
+ ' set username = :NewUserName'
+ ' , password = :NewPassword'
+ ' where username = :username';
MyQuery.Params.ParamByName('NewUserName').AsString := NewUserName;
MyQuery.Params.ParamByName('NewPassword').AsString := NewPassword;
MyQuery.Params.ParamByName('username').AsString := ACurrentUserName;
if MyQuery.ExecSQL <> 1 then
raise EUpdateFailed.Create('A internal error occurred while updating the username and password');
//EUpdateFailed is a hypotetical exception class you defined.
end;
关于sql - delphi ExecSQL 成功还是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511442/
我正在尝试在 Android SQLite 数据库中创建一个表。但是 execSQLite 方法在 on create 方法中不起作用。它给了我信息- Non-static method 'execS
我编写了一个调度程序应用程序,当用户使用以下命令从互联网更新日程安排时,它会将日程安排数据添加到数据库中: sqLiteDatabase.execSQL("INSERT OR IGNORE INTO
我的 execSQL() 命令出现错误。 Eclipse 说我需要在我的 DBHelper 类中定义它。我该怎么做呢?我不熟悉使用 SQL 数据库及其命令。 这是我的类(class)代码; packa
我有以下 execSQL 抛出语法错误并导致我的应用程序崩溃。考虑到我已经转义了单引号和双引号,我不知道为什么。 代码如下: database.execSQL("insert into " + TAB
好吧,也许我只是不明白这一点,但是,当我尝试删除多个表时,比如 static final String DROP_TABLES = "DROP TABLE IF EXISTS ?,?,?,?"; 并尝
您好,我有这个函数可以使用 TUniQuery 更新我的 Access DB: var Res:Boolean; begin Res:=false; try with MyQuery do
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我正在尝试获取从 EditText 字段存储的一些值并将它们存储到我的 SQLLite 数据库中。 我有以下字符串变量: 网站名称_地址_用户_pass 这是我尝试使用的 Sql 命令: SQLite
我正在尝试使用 rawQuery 和 execSQL 方法来操作我的数据库,而不是 .update、.insert 等。我正在尝试使用以下代码执行更新: db.execSQL("UPDATE conf
我正在为Android 3.2版本编写应用程序,然后要求升级的ASUS Eee Pad TF01,这将Android版本更改为4.0.3。从那时起我就遇到了应用程序的问题,我将其追踪到 SQLite
为什么这不起作用?? db.execSQL("INSERT INTO PARTIES (PARTY_NAME, PARTY_COUNT) SELECT DISTINCT(PARTY), COUNT(P
我正在尝试制作使用SQLite数据库的简单注册/登录应用程序,到目前为止我得到了这段代码。这是我的“注册” Activity ,我猜它应该在按下注册按钮后将用户名和 pin(密码)实现到数据库,遗憾的
我在这里看到了很多类似的问题,但没有一个能解决我的问题。我正在制作一个将 XML 内容放入数据库的应用程序。一切工作正常,但是当我第二次打开应用程序时,会添加越来越多的值。我试图删除表,删除数据库,甚
我有这行代码: String insertSQL = "INSERT INTO " + BOOK_NAME + " (id, title, date, type, excerpt, c
这个问题在这里已经有了答案: Unfortunately MyApp has stopped. How can I solve this? (23 个回答) 关闭 7 年前。 这是我的 onCrea
我想有一个选项来调用“rawQuery”并传入一个整数列表,但看起来我不能:所有“rawQuery”方法都需要字符串数组... 为什么?我可以为每个传递的 int 对象调用“toString”,但我在
我按照标准教程使用 Android 构建数据库。我创建了一个名为 DbHelper 的类,它扩展了 SQLiteOpenHelper。我已经重写了创建处理程序来执行一个字符串。 @Override p
系统/版本信息: Windows Server 2019 数据中心 Ubuntu 16.04 Python 2.7 pip 20.1 我正在尝试使用以下命令安装最新版本的 execsql (1.72)
在 Delphi 中,每当我使用 TQuery 对数据库执行 SELECT 时,我都会在 Query.Open 后面加上 try..finally,并在finally 部分中使用 Query.Clos
我们如何获得受 FDQuery.ExecSQL 影响的计数对 SQLITE 数据库的 table1 执行 INSERT、UPDATE 或 DELETE 命令后 FireDAC 命令? FDQuery.
我是一名优秀的程序员,十分优秀!