ASQLite3UpdateSQL 解析UpdateSQL中的BUG
2010-11-18 09:46
211 查看
ASQLite3控件在SQLite数据库开发中比较好用,在ASQLite3Query 连接 ASQLite3UpdateSQL 更新数据库
ASQLite3UpdateSQL中
(f_id为主键,tj为表名)
DeleteSQL : delete tj where f_id=:f_id
InsertSQL : INSERT INTO tj *
UpdateSQL : UPDATE tj * WHERE f_id=:f_id
其中使用UpdateSQL老报错,根据跟踪调试,发现问题:
ASGSQLite3.pas 有BUG:
在procedure TASQLite3Query.InternalPost 中:
第4628,4629行原来这样:
4628: TheWord := GetWord(MySQL, startpos, vartype); // , or 'where'
4629: until AnsiCompareText(TheWord, 'where') = 0;
4630: end;
4631: if not SyntaxCheck(TheWord, 'where') then
4632: raise AsgError.Create('Syntax error: "where" expected')
4633: else
4634: SQLStr := SQLStr + ' where ';
4635: SQLStr := SQLStr + Copy(MySQL, startpos, 9999);
4636: Connection.SQLite3_ExecSQL(SQLStr, Fields);
4637: inherited InternalPost; // rework internals
改成:
4628: TheWord := GetWord(MySQL, startpos, vartype); // , or 'where'
4629: if TheWord =',' then SQLStr := SQLStr +',' ; // (增加这行)
4630: until AnsiCompareText(TheWord, 'where') = 0;
4631: if not SyntaxCheck(TheWord, 'where') then
4632: raise AsgError.Create('Syntax error: "where" expected')
4633: else
4634: SQLStr := SQLStr + ' where ';
4635: SQLStr := SQLStr + Copy(MySQL, startpos, 9999);
4636: end; // 原4630行的end 移动到这里
4637: Connection.SQLite3_ExecSQL(SQLStr, Fields);
4638: inherited InternalPost; // rework internals
增加4629行是为了解决update tj set fphm=:fphm,rq=:rq where f_id=:f_id 这样写时生成的UpdateSQL中间没有','的错。
移动4630的'end;'是为了解决update tj * where f_id=:f_id 这样写时生成的UpdateSQL中重复生成'where'内容!
ASQLite3UpdateSQL中
(f_id为主键,tj为表名)
DeleteSQL : delete tj where f_id=:f_id
InsertSQL : INSERT INTO tj *
UpdateSQL : UPDATE tj * WHERE f_id=:f_id
其中使用UpdateSQL老报错,根据跟踪调试,发现问题:
ASGSQLite3.pas 有BUG:
在procedure TASQLite3Query.InternalPost 中:
第4628,4629行原来这样:
4628: TheWord := GetWord(MySQL, startpos, vartype); // , or 'where'
4629: until AnsiCompareText(TheWord, 'where') = 0;
4630: end;
4631: if not SyntaxCheck(TheWord, 'where') then
4632: raise AsgError.Create('Syntax error: "where" expected')
4633: else
4634: SQLStr := SQLStr + ' where ';
4635: SQLStr := SQLStr + Copy(MySQL, startpos, 9999);
4636: Connection.SQLite3_ExecSQL(SQLStr, Fields);
4637: inherited InternalPost; // rework internals
改成:
4628: TheWord := GetWord(MySQL, startpos, vartype); // , or 'where'
4629: if TheWord =',' then SQLStr := SQLStr +',' ; // (增加这行)
4630: until AnsiCompareText(TheWord, 'where') = 0;
4631: if not SyntaxCheck(TheWord, 'where') then
4632: raise AsgError.Create('Syntax error: "where" expected')
4633: else
4634: SQLStr := SQLStr + ' where ';
4635: SQLStr := SQLStr + Copy(MySQL, startpos, 9999);
4636: end; // 原4630行的end 移动到这里
4637: Connection.SQLite3_ExecSQL(SQLStr, Fields);
4638: inherited InternalPost; // rework internals
增加4629行是为了解决update tj set fphm=:fphm,rq=:rq where f_id=:f_id 这样写时生成的UpdateSQL中间没有','的错。
移动4630的'end;'是为了解决update tj * where f_id=:f_id 这样写时生成的UpdateSQL中重复生成'where'内容!
相关文章推荐
- 18C 也不能避免 SQL 解析的 Bug
- 18C 也不能避免 SQL 解析的 Bug
- 第47课:spark中的新解析引擎catalyst源码sqlparser彻底详解
- sql update set from 的用法 (转)
- apt-get update Err& 无法解析域名错误解决
- 代码混淆 - Gson解析bug
- PL/SQL Developer出现“ORA-12154: TNS: 无法解析指定的连接标识符”的状况
- Oracle多行数据合并一行显示【SQL实现详细解析】
- SSIS PACKAGE excute sql task 选 single row 模式的一个bug
- sql中的group by 和 having 用法解析
- Last_SQL_Error: Could not execute Update_rows event on table eip_fileservice.T_FILE_LOCATION; Can't
- oracle SQL解析步骤
- PL/SQL Developer View SQL功能的一个Bug
- 解析SQL语句中INSERT语句的另一种写法
- 安卓升级固件update.zip解析
- sql 中的NULL小问题 ,大bug
- Kimberly L. Tripp的sp_helpindex2 for sql server 2005/2008,并修复了for sqk2k8的一个bug
- sql的Bug
- sql语句update的用法
- SqlDataAdapter.update结合事务(SqlTransaction)批量更新数据