我使用以下代码(在B4A中)删除旧的CUSTOMERS表,然后重命名它的新版本。但是,我总是最终得到一个空白(新)CUSTOMERS表。如果我没有重命名,那么CUSTOMERS_NEW表就可以正确显示行数(1825)。
sqlOBT.ExecNonQuery("DROP TABLE customers")
sqlOBT.ExecNonQuery("ALTER TABLE newcustomers RENAME TO customers")
sqlobt.close
我很困惑为什么它不起作用。
答案 0 :(得分:1)
SQLite的表命名约定非常特别。你可以尝试:
sqlOBT.ExecNonQuery("ALTER TABLE 'newcustomers' RENAME TO 'customers'")
此外,您可能需要使用ALTER TABLE
/ BEGIN
命令将COMMIT TRANSACTION
命令夹在中间。使用sqlite3
,您的代码可能如下所示:
sqlOBT.ExecNonQuery("BEGIN TRANSACTION")
sqlOBT.ExecNonQuery("ALTER TABLE 'newcustomers' RENAME TO 'customers'")
sqlOBT.ExecNonQuery("COMMIT TRANSACTION")
在python
中,我理解这种情况,因为sqlite3
模块在某些情况下会自动打开交易,而在其他情况下则不会。可以找到文档here。