質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

1回答

1495閲覧

Access リンクテーブルへのINSERTがタイムアウトする

JOE

総合スコア13

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2022/01/15 02:35

編集2022/01/16 00:30

MS Access 2013 32bit DAO 3.6です。

set wsp = DBEngine.Workspaces(0) set db = wsp.Databases(0) wsp.BeginTrans db.Execute("DELETE FROM Table1 WHERE Key=1", dbFailOnError) ◆ db.Execute("INSERT INTO Table1 (Key, Data) VALUES (1, 'aaa')", dbFailOnError) ★ wsp.CommitTrans

上記コードの★のINSERT文がタイムアウトします。
Table1は、SQLServerに対するリンクテーブルです。

リンクテーブルの接続文字列は、以下の通りです。

ODBC;Driver={SQL Server};Server=DBサーバ;Database=データベース名;Trusted_Connection=Yes;WSID=None;Pooling=False

調べた結果、◆のDELETE実行のセッションよって Key=1のレコードに対してロックがかかっているため、INSERT実行のセッションロック待ちタイムアウトしたことがわかりました。
理由はわかりませんが、DELETE実行のセッションとINSERT実行のセッションが異なっていたのです。

リンクテーブルの接続文字列のDriverから中括弧({})を外して、『SQL Server』にしてコードを実行すると
DELETE実行のセッションとINSERT実行のセッションが同一になり、タイムアウトは発生しません。

誰かこの理由を説明できる人いませんか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

{}を使用する場合の解釈について、微妙かもしれませんが、記載がありました。

アプリケーションでは、属性にセミコロン (;)) が含まれている場合 (この場合は中かっこが必要) を指定しない限り、Driver キーワードの後に属性値の周りに中かっこを追加する必要はありません。 ドライバーが受け取る属性値に中かっこが含まれる場合、ドライバーはそれらを削除しませんが、返される接続文字列の一部である必要があります。

https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbcconnection.connectionstring?view=dotnet-plat-ext-6.0

{}があるとその中の文字列を厳密に解釈しようとするけれども?
{}がないとよしなに解釈してくれる?


関係ないかもしれませんが、SQL ServerのバージョンによってもDriverが異なるように感じました。
バージョンなども踏まえて適切な接続文字列になっていますでしょうか。

Microsoft SQL Server ODBC Driver connection strings

Driver={SQL Server};Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

https://www.connectionstrings.com/microsoft-sql-server-odbc-driver/

.

Microsoft ODBC Driver 17 for SQL Server connection strings

Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;UID=myUsername;PWD=myPassword;

https://www.connectionstrings.com/microsoft-odbc-driver-17-for-sql-server/

投稿2022/01/15 09:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JOE

2022/01/16 00:31

接続文字列は正しくできていますね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問