问题原因可能是使用TTSBegin和TTSCommit,并且在使用这些事务控制语句的同时,SQL数据也被检索到了Temp表中。这可能导致TTSBegin错误,因为Temp表是不可以进行事务控制的。
下面是解决方法的代码示例:
static void SQLToTemp(Args _args) { tempDB_TempTable tempTable; LoginProperty loginProp; str sqlServer,port,database,userName,password; SqlStatementExecutePermission perm; Statement stmt; ResultSet rs; ; perm = new SqlStatementExecutePermission("select"); perm.assert(); loginProp = new LoginProperty(); loginProp.setServer(sqlServer); loginProp.setPort(port); loginProp.setDatabase(database); loginProp.setUser(userName); loginProp.setPassword(password); stmt = new Statement(loginProp); stmt.executeQuery("SELECT * FROM SQLTable"); rs = stmt.getResultSet(); ttsBegin; while (rs.next()) { tempTable.clear(); tempTable.Field1=rs.getString(1); tempTable.Field2=rs.getLong(2); tempTable.Field3=rs.getBoolean(3); tempTable.Field4=rs.getDateTime(4); tempTable.Field5=rs.getString(5); tempTable.Field6=rs.getDouble(6); tempTable.insert(); } ttsCommit; }
static void TempToAX(Args _args) { tempDB_TempTable tempTable; TableAX tableAX; ; ttsBegin; while select forUpdate tempTable { tableAX.clear(); tableAX.Field1 = tempTable.Field1; tableAX.Field2 = tempTable.Field2; tableAX.Field3 = tempTable.Field3; tableAX.Field4 = tempTable.Field4; tableAX.Field5 = tempTable.Field5; tableAX.Field6 = tempTable.Field6; tableAX.insert(); tempTable.delete(); } ttsCommit; }
这两段代码将SQL数据转换为AX表数据,并通过Temp表进行中转,从而避免了TTSBegin错误。