• 締切済み

ODBC--リンクテーブル'XXXX'での更新に失敗しました

同じ現象がなさそうでしたので質問させていただきます。 インポートしたテーブルであれば問題なくレコードの更新が出来るのですが 実際のODBCで繋いだDBでは「ODBC--リンクテーブル'XXXX'での更新に失敗しました」となってしまいます。 DAOとADO両方試してみました。以下のものになります こちらは教えていただいたものです。 Private Sub Sample3() Dim rs As New ADODB.Recordset Dim i As Integer Const フィールド名 As String = "連番" ' ☆1 Const テーブル名 As String = "元テーブル" ' ☆1 Const 抽出 As String = "登録番号" ' ☆1 Const 並び替え As String = "登録番号" ' ☆1 i = 1 rs.Source = "SELECT " & フィールド名 & " FROM " & テーブル名 & _ " WHERE " & 抽出 & " LIKE 'ZZZZ%' ORDER BY " & 並び替え & ";" rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic While (Not rs.EOF) rs(フィールド名) = "ZZZZ" & Format(i, "0000") rs.Update rs.MoveNext i = i + 1 Wend rs.Close End Sub ADOだからダメなのかと思い こちらは教えて頂いたものをDAOにしてみました。 Private Sub Sample3() Dim Db As DAO.Database Dim rs As DAO.Recordset Dim i As Integer Const フィールド名 As String = "連番" ' ☆1 Const テーブル名 As String = "元テーブル" ' ☆1 Const 抽出 As String = "登録番号" ' ☆1 Const 並び替え As String = "登録番号" ' ☆1 i = 1 Set Db = CurrentDb() Set rs = Db.OpenRecordset("SELECT " & フィールド名 & " FROM " & テーブル名 & " WHERE " & 抽出 & " LIKE 'ZZZZ*' ORDER BY " & 並び替え & ";") While (Not rs.EOF) rs.Edit rs(フィールド名) = "ZZZZ" & Format(i, "0000") rs.Update rs.MoveNext i = i + 1 Wend rs.Close End Sub 両方とも「ODBC--リンクテーブル'XXXX'での更新に失敗しました」 となってしまいます。 どうすれば更新に失敗せずにできるのでしょうか?

みんなの回答

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.3

#1です > やはりアクセス権限が怪しいですが、そのフィールドのみ書き込みで > きなくするとか出来るのでしょうか? > あるPCからなら書き込みできるとか・・・ PostgreSQL自体、1度触ったくらいなので、なんとも・・・ 1つのフィールドだけと言うのも、変ですね 例えば、プライマリキーに設定されていて、他のテーブルとの関係で、操作出来なくなっているとか?考えられませんか? 「PostgreSQL」側で、操作可能な方法が、あるか?どうか? そっちで、聞いてみるのも手かもしれませんね^^;

noname#135452
質問者

お礼

フィールドに書き込み条件がありました。 それをみたしてやることで書き込み可能になりました! 回答ありがとうございました!

noname#135452
質問者

補足

ご回答ありがとうございます。 他のテーブルと関連付けされているのは「登録番号」のみになります。 で他のテーブルデータ(フィールド)を呼び出しています。 連番のフィールドは空欄の状態なのでそこに入れたかったのですが・・・ SQL側からやるしかないかもしれないですね・・・

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

う~ん、テーブルビューで、だめなら、ADO、DAOで、悩んでもだめでしょうね PostgreSQLのODBCドライバは、何種類もあって、物によっては、更新処理が出来ないドライバ、更新処理が、可能なドライバが、あったと、思いましたが・・・ODBCドライバを確認するのと、後は、テーブルのアクセス権限の確認をするのが、必要になってきますね^^; アカウントを作って、Access用に、ユーザ追加するか、かな?・・・

noname#135452
質問者

補足

ご回答ありがとうございます。 同テーブルの他のフィールドには問題なく書き込むことが出来るので この連番フィールドだけが書き込みできないようになっているようです。 ドライバ自体にも問題はないと思います・・・ やはりアクセス権限が怪しいですが、そのフィールドのみ書き込みできなくするとか出来るのでしょうか? あるPCからなら書き込みできるとか・・・

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

ODBCで、接続したリンクテーブルは、Accessからのテーブルビューで更新可能なのでしょうか? 後、ODBCで、接続したDBは、何なのでしょうか?(Access?Excel?他?) そのあたりの補足お願いしますね

noname#135452
質問者

補足

ご回答ありがとうございます。 連番のフィールドだけがテーブルビューから更新もダメな状態でした。 これは完全にこちらの環境の問題ですよね・・・ 接続したDBはpostgreSQLです。 サーバ側でテーブル設定かえるかテーブルを作成するしかないのでしょうか。