2

PHP PDO を使用して、MS Access システムを mySQL システムに移行しています。PHP が Access テーブルの一部のレコードの読み取りを停止するまで、すべて問題ありません。このテーブルには、Long Integer データ型の ID フィールドがあります。理由はわかりませんが、ID は 0 から 16949 で始まり、36573745 にジャンプして 36581986 で終わります。PDO がこれらのより高い数字を読み取らないため、理由がわかりません。

とにかくこれを回避するために、これらの高い数字を更新して、低い ID の通常のシーケンスを継続しようとしています。しかし、Access はクエリを理解できず、クエリを実行する方法がわかりません。

これがクエリです

UPDATE Validador_Manut SET ID = (
    SELECT (Max(ID) + 1) FROM Validador_Manut WHERE ID < 100000
) WHERE ID > 100000

このエラーが表示されますUperation must use an updatable query

4

2 に答える 2

1

2つのことが頭に浮かびます。

1.) 予約済みキーワード

特定のキーワードをテーブル名または列名として使用すると、実際の原因を実際に伝えない不可解な例外が発生する可能性があります。

あなたのコラムIDは疑わしいように見えます。

簡単なインターネット検索では、この理論の証拠は見つかりませんでしたが、ID は MS Access の予約語としてどこかで見たことを覚えていると思います。あなたはしようとすることができます

  • 列の名前を変更する
  • 山かっこで列名を書く[] (非推奨)

2.) この記事が役に立ちそうです:操作が更新可能なクエリを使用する必要があるというエラーを解決する

Jet 4.0 データベース (「Access」mdb ファイルで表される実際のデータベースの種類) がマルチユーザー環境に展開されると、データベースが開かれるたびに .ldb ファイルが作成されます。.ldb ファイルには、ファイルを開いたユーザーなどの詳細が含まれており、主に、開いているレコードが別のユーザーによって書き込まれるのを防ぐ役割を果たします。

ASP.NET アプリケーションのコンテキストでは、「ユーザー」はプラットフォームによって異なります。XP Pro マシンの場合、ユーザーは ASPNET アカウントです。Windows Server 2003、2008、および Vista では、NETWORK SERVICE アカウントです。ただし、ASP.NET の偽装を有効にしている場合、既定のユーザー アカウントは IUSR_machinename または適用したアカウントになります。ASP.NET アプリケーションがどのアカウントで実行されているかわからない場合は、Environment.UserName がそれを返します。必要な .ldb ファイルを作成、書き込み、および削除できるようにするには、関連するユーザーが .mdb ファイルがあるフォルダーに対する MODIFY 権限を持っている必要があります。

このアクセス許可を設定するには、App_Data フォルダー (または mdb ファイルを配置した他のフォルダー) を右クリックし、[プロパティ] を選択します。[セキュリティ] タブを探します。表示されない場合は、[マイ コンピュータ] に移動し、[ツール] をクリックして [フォルダ オプション...] を選択し、[表示] タブをクリックします。一番下までスクロールし、「簡易ファイル共有を使用する (推奨)」のチェックを外します。[セキュリティ] タブに戻り、関連するアカウントを [グループまたはユーザー名] ボックスに追加する必要があります。[追加...] をクリックし、[詳細]、[検索開始] の順にクリックします。適切なアカウントが表示されます。それをダブルクリックして [グループ名またはユーザー名] ボックスに追加し、権限の [変更] オプションをオンにします。それでおしまい。これで完了です。

注: この修正により、「Microsoft Jet データベース エンジンはファイル '(unknown)' を開けません。既に別のユーザーによって排他的に開かれているか、そのデータを表示する権限が必要です」というエラーも解決されます。

于 2012-05-08T12:16:18.537 に答える
1

100000 を超える ID を 16949 以降の連続番号に減らしたい場合は、単純にこれを試してみませんか?

UPDATE Validador_Manut SET [ID] = [ID]-36556795 WHERE ID > 100000 

36573745 - 36556795 = 16950

于 2012-05-08T12:47:10.003 に答える