accessのフォームを使ってテーブルレコードの更新をしたいのですが悩んでおります。
やりたいことは❸つです。
①コンボボックス(ID検索)でテーブルフィールド:IDを指定(テーブル名:T_SIT)
②該当するものテーブルレコードのデータを抽出
③該当するフィールドの項目にデータを追記

どうもうまくいきません…( ・᷄д・᷅ )
詳しい方!お助けください!!

「accessのフォームを使ってテーブルレ」の質問画像

質問者からの補足コメント

  • ShowMeHow様
    実行時エラー'424':
    オブジェクトが必要ですのエラーが出てしまいます。

    「accessのフォームを使ってテーブルレ」の補足画像1
      補足日時:2017/04/17 15:32
  • ShowMeHow様
    実行時エラー'424':
    オブジェクトが必要です

    「accessのフォームを使ってテーブルレ」の補足画像2
      補足日時:2017/04/17 15:35
  • ShowMeHow様
    実行時エラー'424':
    オブジェクトが必要です

    「accessのフォームを使ってテーブルレ」の補足画像3
      補足日時:2017/04/17 15:35
  • ShowMeHow様
    実行時エラー'424':
    オブジェクトが必要です

    「accessのフォームを使ってテーブルレ」の補足画像4
      補足日時:2017/04/17 15:36

このQ&Aに関連する最新のQ&A

A 回答 (6件)

今作ってみましたけど、、、




Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("t1", dbOpenDynaset)
rs.Filter = "ID=1"
Set rs = rs.OpenRecordset()

で動きました。
私の場合は、IDが数値でしたので、前後のシングルクオートは使いませんでした。

行儀作法として、
最後にset db= nothingと入れておくとよいかもです。
    • good
    • 0
この回答へのお礼

助かりました

何度も本当にありがとうございました!
思った通りにテーブルレコードを抽出することが出来ました!

お礼日時:2017/04/17 16:43

set db = currentdbってのも抜けてますね。


リンク先を参照してくださいませ。

(dao使ったことないので、って理由になりませんけど、申し訳ありません。)
    • good
    • 0

Dim db As DAO.Database


が頭に必要みたいね。 すみません。 
ANo2、ANo3は無視してください。

ついでに
rs.filter = "ID='" & me!ID検索 &"'"
ダブルクオート+シングルクオート+ダブルクオートとIDの後のイコールも忘れずに。
    • good
    • 0

これでダメなら、テーブル名をコピペしたほうが良いかもしれない。



あと、フィルターのほうの最後も
"'"
ダブルクオート+シングルクオート+ダブルクオートね。
    • good
    • 0

dim rs as new dao.recordset



とも変えてみてください。
    • good
    • 0
この回答へのお礼

何度もすみません(ToT)
New キーワードの使用法が不正です。となりました…( •᷄⌓•᷅ )

お礼日時:2017/04/17 15:42

set rs = db.openrecordset("T_sit",dbopentableset)


rs.filter = "ID='" & me!ID検索 &"'"

のように変えてみたらどうだろう。
http://www.accessclub.jp/dao/16.html
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
コレでやってみましたが
実行時エラー'424':
オブジェクトが必要です
とエラーが出てしまいます。(補足参照)

お礼日時:2017/04/17 15:33

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

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

このQ&Aと関連する良く見られている質問

Qアクセスのテーブルのフィールド名をVBのコンボボックスに表示するには

コンボボックスに表示したい項目は「社員名テーブル」の社員名フィールドなの
ですが,これらはフォーム上のadodcコントロールのプロパテイーとして指定して
います,コンボボックスのデータソース,データフイールドの各プロパテイーにも
記述しています

こちらの掲示板などでしらべてプログラムをしてみたのですがうまくうごいてくれません,メソッドまたはデータメンバがありませんというエラーが表示されます.
AddItemというメソッドはあるので データメンバのほうがエラーの原因と思うの
ですがヘルプをみても意味するところがよくわかりません.

エラーの原因と解決方法について教えていただけないでしょうか

よろしくお願いします


'配列変数
Dim data

'ループ変数
Dim i

'接続文字列を設定
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=False;" & _
"Data Source=c:\temp\・・・(当該DB名.mdb);"

'コネクションをオープン
cn.Open

'レコードセットをオープン
rs.Open "c:\temp\access\・・・(当該DB名.mdb);", _
adOpenKeyset, adLockReadOnly

data() = rs.GetRows

For i = 0 To UBound(data, 2)
DataCombo1.AddItem data(0, i)   ← ここでエラーになります
Next i

コンボボックスに表示したい項目は「社員名テーブル」の社員名フィールドなの
ですが,これらはフォーム上のadodcコントロールのプロパテイーとして指定して
います,コンボボックスのデータソース,データフイールドの各プロパテイーにも
記述しています

こちらの掲示板などでしらべてプログラムをしてみたのですがうまくうごいてくれません,メソッドまたはデータメンバがありませんというエラーが表示されます.
AddItemというメソッドはあるので データメンバのほうがエラーの原因と思うの
ですがヘル...続きを読む

Aベストアンサー

DataCombo1ってオブジェクト名があるってことは、おそらくDBComboコントロールですね。

DBComboコントロールには、普通のコンボボックスと違い、AddItemメソッドはありません。

では、どうやってリストの内容を設定するのかというと、DBComboのプロパティであるDataSourceのところに、adodcのオブジェクト名を指定してあげれば、あとは勝手にコンボボックスに値を追加してくれます。

Qフィールド内の各レコードの値によってセルを塗り分ける方法

私の質問を拝読いただき、ありがとうございます。
マトリックス形式のデータがワークシートに埋め込まれています。
特定のフィールドに入っている各レコードのデータをエクセルで検査するマクロを作ろうとしています。
検査方法としては、一定量以上の文字列が入っているセルを特定の色で塗るというものです。
(条件付書式でも同じことが可能ですが、操作の関係上、マクロで実現したいものです。)

次のようなコードを実行すると、各セル内の文字量が80文字を超えていようがいまいが、
B列の全てのセルがcolor=7で塗りつぶされてしまいます。


------------------------------------
Private Sub 検査()

Dim objColumn As String
Dim objCell As Range
Dim mojiByt As Integer

i = 2
objColumn = Columns(i).Address
For Each objCell In Range(objColumn)
With objCell
mojiByt = LenB(.Value)
Select Case mojiByt
Case Is > 80
.Interior.Color = 7
Case Else
.Interior.Color = xlNone
End Select
End With
Next
End Sub
------------------------------------

このコードのエラーをご指摘いただきますと幸いです。
よろしくお願い致します。

私の質問を拝読いただき、ありがとうございます。
マトリックス形式のデータがワークシートに埋め込まれています。
特定のフィールドに入っている各レコードのデータをエクセルで検査するマクロを作ろうとしています。
検査方法としては、一定量以上の文字列が入っているセルを特定の色で塗るというものです。
(条件付書式でも同じことが可能ですが、操作の関係上、マクロで実現したいものです。)

次のようなコードを実行すると、各セル内の文字量が80文字を超えていようがいまいが、
B列の全てのセルが...続きを読む

Aベストアンサー

こんにちは。

ColorプロパティにはRGB関数で色を指定します。
.Interior.Color を .Interior.ColorIndex に修正するか、
又は、
= 7 を RGB(255, 0, 255) に修正してみてください。

なお、
.Interior.Color = xlNone の xlNone を RGB(255, 255, 255)  に
してしまうと、枠線も白く塗りつぶされてしまいますので、こちらは、
Color を ColorIndex にした方がよいと思います。

また、一つずつのセルに背景色を設定するのではなく、最初にすべての
セルを塗りつぶしなしにしてから該当するセルだけ色を付けた方が速く
なります。(列全体で指定されているので範囲を絞り込めれば、もう少し
速く処理できると思います。)

Private Sub 検査()

Dim objColumn As String
Dim objCell As Range
Dim mojiByt As Long
Dim i As Long

i = 2
objColumn = Columns(i).Address
For Each objCell In Range(objColumn)
  With objCell
    mojiByt = LenB(.Value)
    Select Case mojiByt
      Case Is > 80
'        .Interior.Color = RGB(255, 0, 255)
        .Interior.ColorIndex = 7
      Case Else
'        .Interior.Color = RGB(255, 255, 255)
        .Interior.ColorIndex = xlNone
    End Select
  End With
Next
End Sub

Private Sub 検査2()

Dim objColumn As String
Dim objCell As Range
Dim mojiByt As Long
Dim i As Long

i = 2
objColumn = Columns(i).Address

Range(objColumn).Interior.ColorIndex = xlNone

For Each objCell In Range(objColumn)
  If LenB(objCell.Value) > 80 Then
    objCell.Interior.Color = RGB(255, 0, 255)
'    objCell.Interior.ColorIndex = 7
  End If
Next
End Sub

こんにちは。

ColorプロパティにはRGB関数で色を指定します。
.Interior.Color を .Interior.ColorIndex に修正するか、
又は、
= 7 を RGB(255, 0, 255) に修正してみてください。

なお、
.Interior.Color = xlNone の xlNone を RGB(255, 255, 255)  に
してしまうと、枠線も白く塗りつぶされてしまいますので、こちらは、
Color を ColorIndex にした方がよいと思います。

また、一つずつのセルに背景色を設定するのではなく、最初にすべての
セルを塗りつぶしなしにしてから該...続きを読む

Qアクセス2000のデータベースにテーブルを追加して、フィールドを作成したい 

アクセス2000のデータベースがあります。
このファイル「c:\ynet\Hz2data1.mdb」に新しいテーブル「会費管理2」を追加して、フィールドを作成したいのです。
現在は「会費管理2」テーブルがあるのを前提に下記のように書き込みしてみましたが・・・
新しく「会費管理2」テーブルを指定したファイル「c:\ynet\Hz2data1.mdb」に作成してフィールドも作成するのを同時にできるのかしら?
どなたか助けていただければ幸いです。
                                          かしこ



Private Sub コマンド1_Click()
Beep
If (MsgBox("データをアップデートしますが宜しいですか? 作業は一瞬で終わりますよ!!") = 7) Then
End If
Dim cnn As ADODB.Connection
Dim catDB As ADOX.Catalog
Dim tbl As ADOX.Table
Dim colAdo As ADOX.Column
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;"
strCon = strCon & "Data Source=c:\ynet\Hz2data1.mdb"
Set cnn = CurrentProject.Connection
Set catDB = New ADOX.Catalog
catDB.ActiveConnection = cnn
Set tbl = New ADOX.Table
tbl.Name = "会費管理2"


'以下追加したいフィールド
Set colAdo = New ADOX.Column
With colAdo
.Name = "個別台帳ID"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "会費名称ID"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "会費区分ID"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "年度"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "入金日"
.Type = adDate
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "入金額"
.Type = adCurrency
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = Nothing
Set tbl = Nothing
Set catDB = Nothing
cnn.Close
End Sub

アクセス2000のデータベースがあります。
このファイル「c:\ynet\Hz2data1.mdb」に新しいテーブル「会費管理2」を追加して、フィールドを作成したいのです。
現在は「会費管理2」テーブルがあるのを前提に下記のように書き込みしてみましたが・・・
新しく「会費管理2」テーブルを指定したファイル「c:\ynet\Hz2data1.mdb」に作成してフィールドも作成するのを同時にできるのかしら?
どなたか助けていただければ幸いです。
                                       ...続きを読む

Aベストアンサー

動作確認してみましたので、その内容が参考になればと。
不要であれば、スルーしてください。


事前準備)
・新規 mdb を C:\ynet\test_ynet.mdb として作っておきます。(中身何もなし)
・VBAを記述実行する mdb を新規作成します。
 VBEの画面で標準モジュールを挿入し、以下を記述します。
 FILENAME には、テーブルを作成する mdb のパスを、
 TABLENAME には、作成するテーブル名を記述しておきます。

 ADOBD / ADOX が使えるように、参照設定で設定しておきます。

 実行するのは Sample1 で作成しておいて、Sample2 で追加していくものになります。
(Sample1/2 の違いは★部分だけなので、実際の実行順は関係ないのですけど)

対象の mdb にテーブルが存在しなかったら作成し、あったら追加。
フィールドを重複して追加しようとした時のエラーは、無視して処理を続けるものになります。

Sample1の実行は、Sample1内をクリック後、「F5」キーで、
同様に Sample2 の実行は、Sample2内をクリック後、「F5」キーで行います。

確認は、Sample1実行後、対象ファイルを開いて確認します。
同様に、Sample2実行後、対象ファイルを開いて確認します。

------ 標準モジュールに記述する内容は以下

Const FILENAME = "C:\ynet\test_ynet.mdb"
Const TABLENAME = "会費管理2"

Private Sub SetCol(tbl As ADOX.Table, sName As String, iType As Long)
  Dim colAdo As ADOX.Column

  On Error Resume Next
  Set colAdo = New ADOX.Column
  With colAdo
    .Name = sName
    .Type = iType
    .Attributes = adColNullable
  End With
  tbl.Columns.Append colAdo
  Set colAdo = Nothing
End Sub

Private Sub Sample1()
  Dim cnn As ADODB.Connection
  Dim catDB As ADOX.Catalog
  Dim tbl As ADOX.Table
  Dim sProvider As String
  Dim bNew As Boolean

  sProvider = CurrentProject.Connection.Provider
  Set cnn = New ADODB.Connection
  cnn.Open "Provider=" & sProvider & "; DATA Source='" & FILENAME & "'"
  Set catDB = New ADOX.Catalog
  catDB.ActiveConnection = cnn

  On Error Resume Next
  bNew = False
  Set tbl = catDB.Tables(TABLENAME)
  If (tbl Is Nothing) Then
    Set tbl = New ADOX.Table
    tbl.Name = TABLENAME
    bNew = True
  End If

  Call SetCol(tbl, "数値1", adInteger)
  Call SetCol(tbl, "数値2", adInteger)
  Call SetCol(tbl, "数値3", adInteger)
  Call SetCol(tbl, "日付", adDate)
  Call SetCol(tbl, "金額", adCurrency)

  If (bNew = True) Then
    catDB.Tables.Append tbl
  End If

  catDB.Tables.Refresh

  Set tbl = Nothing
  Set catDB = Nothing
  Set cnn = Nothing
End Sub

Private Sub Sample2()
  Dim cnn As ADODB.Connection
  Dim catDB As ADOX.Catalog
  Dim tbl As ADOX.Table
  Dim sProvider As String
  Dim bNew As Boolean

  sProvider = CurrentProject.Connection.Provider
  Set cnn = New ADODB.Connection
  cnn.Open "Provider=" & sProvider & "; DATA Source='" & FILENAME & "'"
  Set catDB = New ADOX.Catalog
  catDB.ActiveConnection = cnn

  On Error Resume Next
  bNew = False
  Set tbl = catDB.Tables(TABLENAME)
  If (tbl Is Nothing) Then
    Set tbl = New ADOX.Table
    tbl.Name = TABLENAME
    bNew = True
  End If

  Call SetCol(tbl, "数値1", adInteger)
  Call SetCol(tbl, "数値2", adInteger)
  Call SetCol(tbl, "数値3", adInteger)
  Call SetCol(tbl, "日付", adDate)
  Call SetCol(tbl, "金額", adCurrency)

  Call SetCol(tbl, "個別台帳ID", adInteger) ' ★
  Call SetCol(tbl, "会費名称ID", adInteger) ' ★
  Call SetCol(tbl, "会費区分ID", adInteger) ' ★
  Call SetCol(tbl, "年度", adInteger) ' ★
  Call SetCol(tbl, "入金日", adDate) ' ★
  Call SetCol(tbl, "入金額", adCurrency) ' ★

  If (bNew = True) Then
    catDB.Tables.Append tbl
  End If

  catDB.Tables.Refresh

  Set tbl = Nothing
  Set catDB = Nothing
  Set cnn = Nothing
End Sub



Access に記述するVBAということで、Provider に指定する文字列は、
CurrentProject.Connection.Provider
から拾ってきています。

2007で実行したとして、対象ファイルを xxxx.accdb に変更した時でも動作します。
Provider=Microsoft.Jet.OLEDB.4.0;
に固定すると、2007で実行したとしても mdb に限定されます。
(余計なことになりますが)


データが空の時に確認した内容になるので、それ以外は確認してください。

動作確認してみましたので、その内容が参考になればと。
不要であれば、スルーしてください。


事前準備)
・新規 mdb を C:\ynet\test_ynet.mdb として作っておきます。(中身何もなし)
・VBAを記述実行する mdb を新規作成します。
 VBEの画面で標準モジュールを挿入し、以下を記述します。
 FILENAME には、テーブルを作成する mdb のパスを、
 TABLENAME には、作成するテーブル名を記述しておきます。

 ADOBD / ADOX が使えるように、参照設定で設定しておきます。

 実行するのは Samp...続きを読む

Q↓の追記(質問:バイナリーの画像データを読み込む。別記の追記)

以下既出の質問です

別記:上記サイベースのDBで10回程度連続でDBを読み込みに行くと
エラーになるのですが、DB上でそのような回数の指定があるのでしょうか?
それとも、ハード的な問題なんでしょうか?いままでそのような経験が
ありましたら対策等教えてください。お願いします!

********これより追記です********************

下のほうの質問で
エラーメッセージは
[sybase][ODBC Driver][Adaptec Anywhre][データベースサーバが接続を
拒否しました。データベースサーバに接続できる限界数を超えています]
というメッセージです。

VB DB ODBC ともにまったくの素人なものでどうかお願いします。

関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=265993

Aベストアンサー

サイベースは分からないのですが、メッセージからするとデータベースの閉じ忘れっぽいですね。
ちゃんとクローズしてますでしょうか?

QVBScriptでAccessMDBにテーブルを作成時、値要求はいのフィールドが作成できない。

Access97で使用しているデータベースに、
スクリプトでテーブルを作成する必要が出てきたので、
作成してみたのですが、プロパティで値要求を「はい」に設定しているにも関わらず、
設定する事が出来ませんでした。

設定の仕方が悪いのでしょうか?
下記にサンプルソースを上げました。

教えて頂けると助かります。
よろしくお願い致します。
--------------------------------------
Option Explicit

'データベースパス
Dim strDBPath
Dim strDBName
strDBName = "db1.mdb"
Dim strDBFullPath 'ファイルが存在する場所
strDBFullPath = Replace(WScript.ScriptFullName,WScript.ScriptName, "")
'FileSystemObject
Dim objFS
'SQL文
Dim strSQL
'テーブル名
Const strTBL = "テスト"
'ADOX用定義
Const adBoolean = 11 'ブール値型

Const adColFixed = 1 '値要求 はい
Const adColNullable = 2 '値要求 いいえ

Dim objCat
Dim objTbl
Dim objCol

'ADOオブジェクトを作成します
Set objCat = WScript.CreateObject("ADOX.Catalog")
Set objTbl = WScript.CreateObject("ADOX.Table")

Dim strJoin
strJoin = ""
strJoin = strJoin & "Provider=Microsoft.Jet.OLEDB.4.0;"
strJoin = strJoin & "Data Source=" & strDBFullPath & strDBName & ";"
strJoin = strJoin & "Jet OLEDB:Engine Type=5;"

objCat.ActiveConnection = strJoin
'テーブル名を定義します
objTbl.Name = strTBL
objCat.Tables.Append objTbl

'■列の設定
'フラグ Yes/No型 はい -
Set objCol = WScript.CreateObject("ADOX.Column")
With objCol
' フィールド名
.Name = "フラグ"
' データ型
.Type = adBoolean
' 値要求 はい
.Attributes = adColFixed
End With
objCat.Tables(strTBL).Columns.Append objCol
Set objCol = Nothing

Set objTbl = Nothing
Set objCat = Nothing

Access97で使用しているデータベースに、
スクリプトでテーブルを作成する必要が出てきたので、
作成してみたのですが、プロパティで値要求を「はい」に設定しているにも関わらず、
設定する事が出来ませんでした。

設定の仕方が悪いのでしょうか?
下記にサンプルソースを上げました。

教えて頂けると助かります。
よろしくお願い致します。
--------------------------------------
Option Explicit

'データベースパス
Dim strDBPath
Dim strDBName
strDBName = "db1.mdb"
Dim strDBFul...続きを読む

Aベストアンサー

97の環境がありませんので、実験していませんが、
ADOでコネクションを開き、
strSQL = CON.Execute "ALTER TABLE TABLE2 ALTER COLUMN FIELD1 TEXT(30) NOT NULL"
のようなSQLを発行することによって、「値要求」を「はい」にすることはできます。
既に存在しているデータに制約に違反するものがある場合は、エラーが起きて実行できなかったと思います。
ただし上記SQLをNULLに変えても、NULL値禁止制約は解除されません。(逆向きの操作はできません。)

もひとつ別情報としては、CREATE TABLE の CONSTRAINTでは、NULL値禁止制約を設定することはできません。

(ソースは見つけられません。)

昔、この件で悩んだ事があったような、なかったような・・・

(mdbを)ご利用の際は計画的に!


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報