14

SQLite データベースに問題があります。http://www.ch-werner.de/sqliteodbc/から SQLite ODBC を使用しています 。64 ビット バージョンをインストールし、次の設定で ODBC を作成しました。

ここに画像の説明を入力

Access データベースを開き、データソースにリンクします。テーブルを開いてレコードを追加することはできますが、レコードを削除または編集することはできません。これを可能にするために、ODBC 側で修正する必要があるものはありますか? レコードを削除しようとすると、次のエラーが表示されます。

あなたと別のユーザーが同時に同じデータを変更しようとしているため、Microsoft Access データベース エンジンはプロセスを停止しました。

レコードを編集すると、次のようになります。

あなたが編集を開始してから、レコードは別のユーザーによって変更されました。レコードを保存すると、他のユーザーが行った変更が上書きされます。

レコードの保存は無効です。クリップボードへのコピーまたは変更のドロップのみが利用可能です。

4

3 に答える 3

10

問題を再現する最初の試みは失敗しました。32 ビットのテスト VM で以下を使用しました。

  • アクセス 2010
  • SQLite 3.8.2
  • SQLite ODBC ドライバー 0.996

ここに記載されているように、テスト テーブル [tbl1] を作成して入力しました。Access リンク テーブルを作成し、プロンプトが表示されたら、両方の列 ([1] と [2]) を主キーとして選択しました。リンクされたテーブルをデータシート ビューで開くと、問題なくレコードを追加、編集、および削除できました。

私のセットアップとあなたのセットアップの間に見られる唯一の違い (私が 32 ビットで、あなたが 64 ビットであるという事実は別として) は、ODBC DSN 設定で、Sync.Mode設定をデフォルト値の のままにしたことNORMALです。に設定されているようOFFです。

に設定Sync.ModeしてみNORMALて、違いが生じるかどうかを確認してください。

re: コメントを編集

この場合の解決策は次のとおりでした。

考えられる回避策の 1 つは、すべて同じ列と新しい INTEGER PRIMARY KEY 列を含む新しい SQLite テーブルを作成することです。これは、Access がオートナンバーとして「認識する」ものです。最初の 4 つの列 (現在のもの) に一意のインデックスを作成して、それらが一意のままであることを確認できますが、新しい新しい "ID" (ROWID) 列は、Access が CRUD 操作の行を識別するために使用するものです。

于 2013-12-10T15:33:09.070 に答える
4

私もこの問題を抱えていました。VARCHAR(30) (TEXT) フィールドに主キーを持つテーブルがあります。

INTEGER PRIMARY KEY 列を追加しても、まったく役に立ちませんでした。多くのテストの後、問題はテーブルにある DATETIME フィールドにあることがわかりました。DATETIME フィールドを削除し、MS-Access データシート ビューでレコード値を更新できました。

したがって、SQLite で必要な DATETIME フィールドは VARCHAR(19) として宣言するので、ODBC 経由でテキストとして Access に取り込まれます。完璧ではありませんが、機能します。(そしてもちろん、SQLite には実際の DATETIME フィールド型がないので、TEXT は問題なく、OK に変換されます)

数値変換の問題であることを確認しました。空の DATETIME フィールドを使用して、Access のデータシート ビューを介して 01-01-2014 12:01:02 の時刻を追加できます。その後、SQLite で値を見ると、秒が四捨五入されています。

    sqlite> SELECT three from TEST where FLoc='1020';
2014-01-01 12:01:00.000

SYNCMODE も OFF ではなく NORMAL にする必要があります。

更新: 定義された長さのテキスト フィールド (例: foo VARCHAR(10)) があり、フィールドの内容にフィールド定義 (SQLite が許可する) よりも多くの文字が含まれている場合、MS-Access はいずれかのフィールドを更新しようとすると、barf も実行します。その行に。

于 2014-09-02T02:38:15.163 に答える
0

ODBC経由でAccessにリンクされたSQLiteで同様の問題が発生したため、同様の投稿をすべて検索しました。3 つのテーブルがあり、そのうちの 2 つは編集可能でしたが、3 つ目は編集できませんでした。3 番目には DATETIME フィールドがあり、元の SQLite データベースでデータ型を TEXT フィールドに変更し、再リンクしてアクセスすると、テーブルを編集できました。したがって、私にとっては、DATETIME フィールドの問題として確認されました。

于 2015-10-29T06:30:54.967 に答える