プロが教えるわが家の防犯対策術!

同じ現象がなさそうでしたので質問させていただきます。
インポートしたテーブルであれば問題なくレコードの更新が出来るのですが
実際の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'での更新に失敗しました」
となってしまいます。
どうすれば更新に失敗せずにできるのでしょうか?

A 回答 (3件)

#1です




> やはりアクセス権限が怪しいですが、そのフィールドのみ書き込みで
> きなくするとか出来るのでしょうか?
> あるPCからなら書き込みできるとか・・・

PostgreSQL自体、1度触ったくらいなので、なんとも・・・
1つのフィールドだけと言うのも、変ですね
例えば、プライマリキーに設定されていて、他のテーブルとの関係で、操作出来なくなっているとか?考えられませんか?

「PostgreSQL」側で、操作可能な方法が、あるか?どうか?
そっちで、聞いてみるのも手かもしれませんね^^;

この回答への補足

ご回答ありがとうございます。
他のテーブルと関連付けされているのは「登録番号」のみになります。
で他のテーブルデータ(フィールド)を呼び出しています。

連番のフィールドは空欄の状態なのでそこに入れたかったのですが・・・
SQL側からやるしかないかもしれないですね・・・

補足日時:2009/04/06 16:50
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/04/07 08:44

う~ん、テーブルビューで、だめなら、ADO、DAOで、悩んでもだめでしょうね



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

この回答への補足

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

補足日時:2009/04/06 16:27
    • good
    • 0

ODBCで、接続したリンクテーブルは、Accessからのテーブルビューで更新可能なのでしょうか?


後、ODBCで、接続したDBは、何なのでしょうか?(Access?Excel?他?)

そのあたりの補足お願いしますね

この回答への補足

ご回答ありがとうございます。
連番のフィールドだけがテーブルビューから更新もダメな状態でした。
これは完全にこちらの環境の問題ですよね・・・

接続したDBはpostgreSQLです。
サーバ側でテーブル設定かえるかテーブルを作成するしかないのでしょうか。

補足日時:2009/04/06 15:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています