ACCESSで複数主キーにおけるseek検索

このQ&Aのポイント
  • ACCESS2000で複数の主キーを持つテーブルからseekで一致検索を行いたいが、ADOを利用した場合のコードの書き方がわかりません。
  • DAOを用いて検索部分をVBAで書いたら動きましたが、ADOを用いた記述方法がわかりません。
  • ACCESSで複数の主キーを持つテーブルからのseek検索についての方法を教えてください。
回答を見る
  • ベストアンサー

ACCESSで複数主キーにおけるseek検索

ACCESSで複数主キーにおけるseek検索 ACCESS2000で複数の主キーを持つテーブルからseekで一致検索を行いたいが、 ADOを利用した場合のコードの書き方がわかりません。 テーブルは以下の3つのフィールドから構成されます。 フィールド1:フィールド2:フィールド3 年月日:担当職員:応対結果 ここで主キーは「年月日」と「担当職員」の2つで、「年月日」と「担当職員」が 一致するレコードをseekによって検索したいのです。 インデックスを表示させると「年月日」と「担当職員」が表示されます。 「年月日」の欄にのみ、インデックス名の欄にPrimaryKeyと書かれています。 DAOを用いて検索部分をVBAで書いたら動きました。 以下に検索部分だけ書きます。 (1) ds.Index = "PrimaryKey" (2) ds.Seek "=", 年月日, 担当職員 (3) If ds.NoMatch Then (4) MsgBox"そんなデータないですよ" (5) Else (6) MsgBox"一致するのがありました" しかしながら、ADOを用いた記述方法がわかりません。 上の(1)行は ds.Index = "PrimaryKey" でよいと思うのですが、(2)行以下がどう書いて良いかわかりません。 何卒宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

えー、すべて設定は出来ているものと 勘違いしていました。一応、こちらで すべてを設定してみました。 テーブルをTdataとします。 Private Sub コマンド0_Click() Dim cn As ADODB.Connection Dim ds As ADODB.Recordset Dim vardat As Variant Dim strmsg As String Dim myKey(1 To 2) Dim varA As Variant Dim varB As Variant Set cn = CurrentProject.Connection Set ds = New ADODB.Recordset ds.Open "Tdata", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect varA = InputBox("検索する年月日を入力して下さい。") varB = InputBox("検索する担当職員を入力して下さい。") Let myKey(1) = varA '"年月日" Let myKey(2) = varB '"担当職員" ds.Index = "PrimaryKey" ds.Seek Array(myKey(1), myKey(2)), adSeekFirstEQ If ds.EOF Then MsgBox ("ありません") Else MsgBox ("ありました") End If ds.Close: Set ds = Nothing cn.Close: Set cn = Nothing End Sub このような感じで一応動いています。 設定の勘違い、Inputboxなどはご勘弁を。

qp4ns90
質問者

お礼

この回答を待っていた! ありがとうございます!

その他の回答 (1)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

>If ds.NoMatch Then If ds.EOF Then では?

関連するQ&A

  • Access 主キーの解除について

    'テーブル[売上]に主キーを設定します DoCmd.RunSQL "ALTER TABLE 売上 ADD PRIMARY KEY (No);" 'テーブル[売上]の主キーを解除します DoCmd.RunSQL "DROP INDEX PRIMARYKEY ON [売上];" Access2007を使用しています。 VBAで主キーの設定・解除をするため、上記のプログラムを組みました。動かしてみると、設定はできたのですが、解除のプログラムで以下のエラーメッセージがでました。 実行時エラー'3372': テーブル'売上'にインデックス'PRIMARYKEY'が見つかりませんでした。 見つからないと出たので売上テーブルを開き確認をしたところ、ちゃんと主キー設定されていました。 そこで手動で主キーの設定しなおしプログラムを動かすと、解除プログラムが動きました。 手動で設定すると動くのですが、何故プログラムで設定した主キーでは動かないのでしょうか。 ご教授のほど、よろしくお願いします。

  • INDEX SEEKについて

     主キーを設定した後、検索をかけるとClustered Index Scan になってしまい、大変遅くなってしまいます。  Index Seek にしたい場合、どのようにすればいいのでしょうか?    初心者なのであまりよくわかってないので、どなたかすいませんが、お教え願います。

  • 複数のフィールドを含む主キーに関して教えてください。

    SQLで、主キーが複数のフィールドを含む場合、    PRIMARY KEY ( col1 , col2 ) 一般にどのようなインデックスが作成されるのでしょうか? またその結果を見れば分かるかも知れませんが、キーの順番は意味を持っているのでしょうか。 Mysqlに限定されてもかまいません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • .net 複数の主キーを設定する方法

    VB2005、SQLServer2005環境です。 主キーの設定方法について教えて下さい。 主キーが一つの場合下記のように記述しますが、複数ある場合はどう記述すればよろしいですか? お願いします。 strsql = "SELECT * FROM Aテーブル" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "Aテーブル") Dim dt As New DataTable dt = ds.Tables("Aテーブル") '主キーの設定 dt.PrimaryKey = New DataColumn() {dt.Columns("コード1")}

  • ACCESSVBAのseekで複数INDEX検索方法について

    こんにちは。 seekで、複数のINDEXに対して、それぞれ設定した条件を検索かける具体的なコードの書き方がわからず困っています。教えてください。(単一INDEXではできました) 例えば、社員名、日付、応対結果といった複数のフィールドに対して、フォームに入力されたそれぞれの値で検索をかけたいのです。またその際に、入力されてないところは無視して、入力された条件のみで検索をかけたいのですが、可能でしょうか? 現在、DAOを使ってコーディングしているので、DAOで具体的なコード例を教えていただけるとありがたいです。 文章がわかりにくくて申し訳ありませんが、よろしくお願いします。

  • MDB内既存テーブルに主キーのフィールド追加は可能か?

    DAOでMDBにアクセスするシステムなのですが、 テーブル仕様変更に伴い、既存のテーブルに新規に主キーとなるフィールドを追加します。 当テーブルはすでに主キーは複数存在しています。 現在は CreateIndex("PrimaryKey")を行ったのですが、 「既に主キーは既に存在しています」と表示されてしまい、異常終了をしてしまいます。 単にフィールド追加することは容易なのですが、主キーとなると、だめみたいです。 この場合は、どのようにすれば良いのでしょうか? 大変申し訳ございません。 ご教授よろしくお願い致します。

  • ACCESS2000の主キー重複について

    いつもお世話になっています。 早速ですが、お教えください テーブル名:AMaster フィールド名:B があります。 「B」は主キーになっていまして、ユーザーが任意に数字をいれることになります。 主キーになっていますので基本的には重複しないのですがユーザーの押し間違いなどによって重複してしまった場合 [Microsoft][ODBC Microsoft Access Driver] インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。 といったエラーメッセージが出ます。これは出ても構わないのですがツールバーの「戻る」でしか今後の操作ができなくなってしまうので(ユーザーはPC超初心者)何らかの形でエラーメッセージとともに任意のページへ戻れるようにしたいと考えています。 つきましては、「B」フィールドにあるデータとこれから入力される数値が重複していたら・・・という記述をお教えいただきたいと思います。 ASPにて作成していますのでそれに対応した記述ですとありがたいです。 過去のログに似たようなものがありましたがこちらを参照してもボクにはわかりませんでした。 http://okweb.jp/kotaeru.php3?q=357614 ボクも何分初心者なのでわからないことだらけですがよろしくお願いします。

  • ACCESSにインデックス(主キー)のあるテーブルを作りたい

    元データがEXCELでそのデータを利用し、 ACCESS内にマスター用(品目マスタ)のテーブルを作り、 1番目の部品コードというフィールドを インデックス/主キー(重複しない)にして 2番目、3番目の項目の値をえられるように しようとしていますが、EXCELからの元データを インポートしようとしても部品コードフィールドが インデックス/主キーに設定できません。 EXCEL内で部品コードが重複しないように削った つもりです。 部品コードが重複していなくても、いけない文字列 があってインデックス/主キーにできないのでしょうか? ※詳細 以下のようなテーブルをつくり、 284-A80と入力したら製品部品名称の「基板」と いう値や製品分類の「LED」という値を得ようと している。 部品コード    製品部品名称   製品分類 284-A80      基板        LED 7841P20      ヨーク       ブザー CL-270-CD     LED         LED HSDL-3201#001   センサー     センサー ……約17000レコードぐらい ただし、部品コードの値がもっとごちゃごちゃして いて、「*」、「スペース」「#」「_」「/」などや カタカナ文字のものも含まれていたりします。 なぜ、上記の部品コードをインデックス/主キーとして 設定をおこなったテーブルとしてインポート できないのですか?

  • インディックスまたは主キーには、Null値を使用で

    Access2007です。 主キー | フィールド名| データ型 .... |フィールドサイズ ------|-- ---------|----------|---------------- ○....... | 担当者CD ..... | テキスト型 | .....3 ------|------------|-----------|---------------- .............. | 担当者名 ...... |テキスト型 .. | 20 以上の設定ですが、 「インディックスまたは主キーには、Null値を使用できません。」 とでて主キーが設定できません!?  なぜできないのでしょうか?  宜しくお願い致します。

  • Access 「主キーにはnull値を~」のエラー

    こんにちは。閲覧ありがとうございます。 私はAccess初心者です。 勉強と実用をかねて個人用の「家計簿」をWindows7のAccess2010で作成しております。フォームを使用し、費目を記録して、ゆくゆくは集計なども行いたいと考えています。 いくつかの失敗に当たりながらどうにか形はできたのですが 『インデックスまたは主キーには、null値を使用できません。』 というエラーが出てきてしまい、これがどうしても解決できないでいます。 初心者があやふやな言葉を並べるより、現物を見ていただいた方が早いと思うので、以下に私が作成中の「家計簿rev2.accdb」をアップロードしておきました。 http://www1.axfc.net/uploader/so/2884464.zip (稚拙で見難いことこの上ないかもしれませんが、初心者ゆえご容赦ください・・・) 仕様としましては、フォームの「Fmain家計簿DB」に、「レシートNo、購入日、種類ID、費目、値段、個数、店舗ID、その他」と入力して、最後に次のレコードに移れば、レコードが一つ記録されるといった具合(のはず)です。 各テーブルの主キー以外には「空文字列の許可を"はい"」「値要求を"いいえ"」「インデックスを"いいえ"」に設定してあります。 オートナンバー型を使用しているのはテーブルの「Tmain家計簿DB」の主キーのみです。 また、「フィールドとキーが一致しているレコードをテーブルで探すことができません」というエラーが出るのを回避するため、こちらの質問を参考にさせてもらい外部結合の設定をしてあります。 (http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1368686318) そして、フォームに想定通りのデータを入力すると『インデックスまたは主キーには~』のエラーが出てしまいます。 せめてどこにnull値が入っててエラーが出てるのかを表示してくれたらいいのですが・・・ 以上になります。長文お読みいただきありがとうございました。 こんな簡単なdbの作成でお手上げ状態になるとは情けない限りです・・・ どなたか、『インデックスまたは主キーには、null値を使用できません。』の解決策をご教示いただけるとありがたいです。 よろしくお願いいたします。

専門家に質問してみよう