4

PHPMyAdminを使用してJavaとMySQLで小さなアプリを作成していますが、すべて正常に動作しますが、教授はAccessでデータベースを操作する必要があると言っているので、クラス接続を変更してデータベースをインポートしました. 、およびその他のステートメントは正常INSERTに実行されますが、このステートメントは実行されません。SELECTUPDATE

UPDATE table SET col1=?, col2=? WHERE col0=? ORDER BY col4 DESC LIMIT 1

MySQL ではどのように動作するのか理解できませんが、UCanAccess では動作しません。

4

1 に答える 1

3

MySQL ではどのように動作するのか理解できませんが、UCanAccess では動作しません。

これは、データベース ソフトウェアのさまざまなメーカーが、わずかに異なる方法で SQL 言語を実装することに取り組んでいるためです。そのため、MySQL 用に記述された特定の SQL ステートメントは、Access、Microsoft SQL Server、Oracle、またはその他の環境で動作することが保証されていません。 SQLの「方言」。

UCanAccess は、Access の SQL 構文に従うのに非常に苦労しています。Access SQL はTOP nの代わりに を使用しますが、Access SQL ではUPDATE クエリの主要部分でorをLIMIT n使用することもできません。そのため、サブクエリを使用して、更新する行の主キー値を特定する必要があります。TOP nORDER BY

たとえば、テーブルに「id」という名前の主キー列がある場合、次のことができます

sql = 
        "UPDATE table1 SET col1=?, col2=? " +
        "WHERE id IN ( " +
            "SELECT TOP 1 id " +
            "FROM table1 " +
            "WHERE col0=? " +
            "ORDER BY col4 DESC, id " +
        ")";
于 2015-05-10T09:27:03.973 に答える