OK, let's talk about the doughnut not the hole. Magic xpa supports both implicit and direct SQL. There are a few things you should consider when working with SQL. In general, the task that actually opens a transaction should have at least one table declared from each database that will participate in the transaction. Otherwise, if no table has been declared, when Magic xpa has to open a transaction (either task level or record level), then it will default to a situation where the ISAMTransaction keyword is taken into account. You may not want this, so make sure you declare the needed tables for each database.
When using Magic xpa with implicit SQL, Magic xpa allows you to interact with one or more SQL databases at the same time but still keeps the interaction with the database transparent to the developer. Magic xpa translates the operations and parameters in your task to a SQL statement. This behavior enables the use of a specific gateway that allows Magic xpa to directly interact with each database using the DBMS API. (The Magic xpa gateway list appears in the MAGIC_GATEWAYS section in the Magic.ini file. To define the Magic xpa environment when working with SQL databases, you must know how to define the flags and settings in the Magic.ini file.)
When using Magic xpa with direct SQL statements, Magic xpa allows you to create programs that contain a free SQL statement (ANSI SQL). This statement will be sent directly to the database without Magic xpa checking it. This option allows you to perform database manipulations that are not otherwise supported using the Magic xpa operations or will be performed more efficiently using a direct SQL statement (such as aggregate functions). Keep in mind that in Online tasks, Magic xpa creates a new table that will store the result set of a statement or store procedure. A Create table operation is a "heavy" operation and for this reason, it is not recommended to use Direct SQL tasks frequently in Online mode.