Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1627 / 2272 ツリー ←次へ | 前へ→

【6165】VBAでのCreateIndex くま 05/9/6(火) 10:50 質問[未読]
【6166】Re:CreateIndexはステートメント たん 05/9/6(火) 13:29 回答[未読]
【6167】Re:CreateIndexの例 小僧 05/9/6(火) 13:52 回答[未読]
【6169】Re:CreateIndexの例 小僧 05/9/6(火) 14:16 回答[未読]
【6173】Re:CreateIndexの例 くま 05/9/6(火) 16:48 お礼[未読]
【6168】Re:CreateIndexはステートメント くま 05/9/6(火) 14:06 質問[未読]
【6170】Re:CreateIndexはステートメント たん 05/9/6(火) 14:33 発言[未読]
【6171】Re:CreateIndexはステートメント たん 05/9/6(火) 14:35 発言[未読]
【6172】Re:CreateIndexはステートメント くま 05/9/6(火) 16:40 お礼[未読]
【6174】Re:CreateIndexはステートメント 小僧 05/9/6(火) 17:07 回答[未読]
【6175】Re:CreateIndexはステートメント くま 05/9/6(火) 17:46 お礼[未読]
【6177】Re:CreateIndexはステートメント 小僧 05/9/6(火) 18:04 発言[未読]
【6178】Re:CreateIndexはステートメント くま 05/9/6(火) 18:25 お礼[未読]
【6179】Re:SQLでも… 小僧 05/9/6(火) 19:54 発言[未読]
【6181】Re:SQLでも… くま 05/9/6(火) 21:49 お礼[未読]
【6237】Re:SQLでも… 小僧 05/9/9(金) 0:23 発言[未読]
【6241】Re:SQLでも… くま 05/9/9(金) 11:24 お礼[未読]
【6243】Re:Seekメソッドは速いっす 小僧 05/9/9(金) 13:51 発言[未読]
【6244】Re:Seekメソッドは速いっす くま 05/9/9(金) 14:17 お礼[未読]
【6245】Re:Seekの続報です。 小僧 05/9/9(金) 17:12 発言[未読]
【6247】Re:Seekの続報です。 くま 05/9/9(金) 20:05 お礼[未読]

【6165】VBAでのCreateIndex
質問  くま  - 05/9/6(火) 10:50 -

引用なし
パスワード
   新しいテーブルを作成し、T_Branch.csvのデータをセットします。
 項目名 "Company","Branch","Post","Address"
 データ "001","10001","1000001","東京都"
 データ "001","10002","1000002","東京都"
 データ "002","10003","1000003","東京都"
          :
T_Branchテーブルを作成し、CompanyとBranchにKeyIndexを付けたいのですが
(テーブルを開いた時の鍵マークと重複有りのインデックス)
私の文法が間違っているらしくエラーでこけます。

Set MakeTBL = CurrentDb.CreateTableDef("T_Branch")
With MakeTBL

 .Fields.Append .CreateIndex("Company", dbtext)  ⇒ここがCreateFieldならエラーは出ない
 .Fields.Append .CreateIndex("Branch", dbtext)  ⇒ここがCreateFieldならエラーは出ない
 .Fields.Append .CreateField("Post", dbtext)
 .Fields.Append .CreateField("Address", dbtext)
End with

CurrentDb.TableDefs.Append MakeTBL
Set MakeTBL = Nothing
CurrentDb.TableDefs.Refresh

全てCreateFieldで作成するとテーブルは出来ますが
重複Key不可や検索用のインデックスの設定が出来ていません。

どなたか私の間違いが理解できる方、ご指導願います。

【6166】Re:CreateIndexはステートメント
回答  たん  - 05/9/6(火) 13:29 -

引用なし
パスワード
   >T_Branchテーブルを作成し、CompanyとBranchにKeyIndexを付けたいのですが
>(テーブルを開いた時の鍵マークと重複有りのインデックス)
>私の文法が間違っているらしくエラーでこけます。

というか、ヘルプ読んでます?

CreateIndexはステートメントであり、メソッドではありません。
ので、CreateFieldなら構文は正解ですが、CreateIndexメソッドというものは
Accessの世界にありませんので、当然構文エラーです。

きちんとヘルプを読みましょう。

ヘルプには例もきちんと載ってます。

# ネットにだけ頼って、きちんとそのネットで調べた結果をヘルプや
# 教本で裏付けしない状態で、鵜呑みにして使うから、こういう指摘を
# 受けるのです。

【6167】Re:CreateIndexの例
回答  小僧  - 05/9/6(火) 13:52 -

引用なし
パスワード
   ▼くま さん:
こんにちは。

Sub テーブルの作成()
'要参照設定 Microsoft DAO x.x Object Library
Dim MakeTBL As New DAO.TableDef
Dim Idx As DAO.INDEX
Dim TName As String

  TName = "T_Branch"

  If DCount("*", "MSysObjects", "Name = '" & TName & "'") > 0 Then _
    DoCmd.DeleteObject acTable, TName

  Set MakeTBL = CurrentDb.CreateTableDef(TName)
  Set Idx = MakeTBL.CreateIndex("INDEX")

  With MakeTBL
    .Fields.Append .CreateField("Company", dbText)
    .Fields.Append .CreateField("Branch", dbText)
    .Fields.Append .CreateField("Post", dbText)
    .Fields.Append .CreateField("Address", dbText)
  End With
  
  With Idx
    .Primary = True
    .Fields.Append .CreateField("Company")
    '.Fields.Append .CreateField("Branch")
  End With
 
  MakeTBL.Indexes.Append Idx
  MakeTBL.Indexes.Refresh
  
  CurrentDb.TableDefs.Append MakeTBL
  CurrentDb.TableDefs.Refresh

  Set MakeTBL = Nothing
  Set Idx = Nothing
End Sub

これで一つのフィールドに対してはできたのですが…。
コメントを外して主キーを2つにすると、何故かインデックスが外れてしまいます。
引き続き調査してみます。

【6168】Re:CreateIndexはステートメント
質問  くま  - 05/9/6(火) 14:06 -

引用なし
パスワード
   ▼たん さん:
たんさん 返信をありがとうございます。

>というか、ヘルプ読んでます?
>きちんとヘルプを読みましょう。

はい。
ヘルプを読んでCreateIndexがあることを知りました。

>ヘルプには例もきちんと載ってます。

ですが使用例が載ってなく
何度も読み直したのですがどのように設定して使用するのか結局はヘルプの解読できず、こちらの方に質問させていただきました。

>CreateIndexはステートメントであり、メソッドではありません。
メソッドでないのにメソッドのような記述をしたのでエラーだったのですね。
ありがとうございます。


せっかく返信していただいたのに反論するようで申し訳ありませんが
ヘルプを見て、Access質問の検索をして、それでも記述が解らず自分で色々と試してからこちらに質問してみました。

こちらの状況が解らないにしても
このような思い込みのような記述はかなりショックを受けました。
># ネットにだけ頼って、きちんとそのネットで調べた結果をヘルプや
># 教本で裏付けしない状態で、鵜呑みにして使うから、こういう指摘を
># 受けるのです。

でも、ヘルプに記載がある事、メソッドで無い事等の
返信をありがとうございました。
もう少し他のサイトも検索を続けてみて私にも理解できる記載内容を探してみますね。

【6169】Re:CreateIndexの例
回答  小僧  - 05/9/6(火) 14:16 -

引用なし
パスワード
   訂正版です。
ちょっとコード的には汚いですが…。


Sub テーブルの作成2()
'要参照設定 Microsoft DAO x.x Object Library
Dim MakeTBL As New DAO.TableDef
Dim Idx As DAO.INDEX
Dim TName As String

  TName = "T_Branch"

  If DCount("*", "MSysObjects", "Name = '" & TName & "'") > 0 Then _
    DoCmd.DeleteObject acTable, TName

  Set MakeTBL = CurrentDb.CreateTableDef(TName)

  With MakeTBL
    .Fields.Append .CreateField("Company", dbText)
    .Fields.Append .CreateField("Branch", dbText)
    .Fields.Append .CreateField("Post", dbText)
    .Fields.Append .CreateField("Address", dbText)
  End With
  
  Set Idx = MakeTBL.CreateIndex("Ind1")
    With Idx
      .Fields.Append .CreateField("Company")
      .Fields.Append .CreateField("Branch")
      .Primary = True
    End With
    MakeTBL.Indexes.Append Idx
    
  Set Idx = MakeTBL.CreateIndex("Ind2")
    Idx.Fields.Append Idx.CreateField("Company")
    MakeTBL.Indexes.Append Idx
  
  Set Idx = MakeTBL.CreateIndex("Ind3")
    Idx.Fields.Append Idx.CreateField("Branch")
    MakeTBL.Indexes.Append Idx
  
  MakeTBL.Indexes.Refresh
 
  CurrentDb.TableDefs.Append MakeTBL
  CurrentDb.TableDefs.Refresh

  Set MakeTBL = Nothing
  Set Idx = Nothing
End Sub

これで2つのフィールドを主キーに、
重複ありのインデックスが設定されると思います。

【6170】Re:CreateIndexはステートメント
発言  たん  - 05/9/6(火) 14:33 -

引用なし
パスワード
   >ですが使用例が載ってなく

ちなみに、私のAC2000のヘルプでは、質問より「CREATE」で検索し、
「CREATE INDEX ステートメントの使用例」というのがきちんとあります。

また、CREATE INDEXステートメントからも使用例はすぐに見つかります。
(CREATE TABLEからも同じくみつかる筈です。)

上記のようにきちんと調べれば(例も含め)見つかるものに対して、
見つからないと言われるのは非常に残念です。

>このような思い込みのような記述はかなりショックを受けました。

キツイ言葉に取られたら申し訳ありません。
ただ、私は貴方がどこまで調べているのかは文面からは分かりませんし、
この文章は貴方だけが読むものではありません。

私の考えは、石鹸箱及び、この掲示板で数ページ前に記載していますので
読んでみて下さい。

【6171】Re:CreateIndexはステートメント
発言  たん  - 05/9/6(火) 14:35 -

引用なし
パスワード
   ちなみにこの2件。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=5943;id=access

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=1657;id=

【6172】Re:CreateIndexはステートメント
お礼  くま  - 05/9/6(火) 16:40 -

引用なし
パスワード
   ▼たん さん:
>ちなみにこの2件。
>
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=5943;id=access
>
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=1657;id=

たんさん ご丁寧にアドレスまでありがとうございました。

>ただ、私は貴方がどこまで調べているのかは文面からは分かりませんし、
>この文章は貴方だけが読むものではありません。

確かにそうですね。質問が言葉足らずでした。
こちらのページも以前他の探し物の時に拝見しました。
熱い内容だなと思って読んでいたのに自分もやってしまいました。済みません。

>ちなみに、私のAC2000のヘルプでは、質問より「CREATE」で検索し、
>「CREATE INDEX ステートメントの使用例」というのがきちんとあります。
>上記のようにきちんと調べれば(例も含め)見つかるものに対して、
>見つからないと言われるのは非常に残念です。

こちらも仰る通りに探してみました。
「CREATE INDEX」で私が検索したのはVBAモジュール側のヘルプでやはり出ませんでしたが、Accessデータベース側のヘルプを使ってみたら出ました。
私の検索方法が下手なだけでした。
「CREATE INDEX ステートメントの使用例」迄記載していただきありがとうございました。

ですが、例を見ても私にはうまく理解して使う事ができませんでした。
文法はわかりましたが、モジュールのどのタイミングで入れないと駄目なのか不明で、docmd.runsql で実行してみたり、色々試しましたが私の頭はついていけてないようです。
せっかくアドバイスいただいたのに済みませんでした。

返信をいただいてから試行錯誤していたので、お礼が遅れまして申し訳ありませんでした。これからも宜しくお願いします。

【6173】Re:CreateIndexの例
お礼  くま  - 05/9/6(火) 16:48 -

引用なし
パスワード
   ▼小僧 さん:
>訂正版です。
>ちょっとコード的には汚いですが…。

とんでもありません。
小僧 さん いつも返信をいただきましてありがとうございます。

>これで2つのフィールドを主キーに、
>重複ありのインデックスが設定されると思います。

たんさんのアドバイスで私がヘルプと格闘している間に
気が付けばアドバイスが追加されていて。皆様に感謝しています。

早速使わせていただきましたところ、
私がイメージしていた形で出来上がっています。完璧です。
本当にいろいろとありがとうございました。
(なんせこれで3日も悩んでいたもので、やっと先に進めます)

【6174】Re:CreateIndexはステートメント
回答  小僧  - 05/9/6(火) 17:07 -

引用なし
パスワード
   ▼くま さん:
こんにちは。

>モジュールのどのタイミングで入れないと駄目なのか不明で、


提示させて頂いたコードを新規モジュールにでも貼り付けて頂いて、

・ツールバーの「実行」から実行させる
・Call テーブルの作成2 のようにCall ステートメントで呼び出す

のどちらかで可能ですね。


後はくま さん次第です。
提示させて頂いたコードについても、他のコード(恐らくCSVファイルの取込がありそうですね)
との連携についてでも、当方で回答できる限りお付き合いさせて頂きますよ。

【6175】Re:CreateIndexはステートメント
お礼  くま  - 05/9/6(火) 17:46 -

引用なし
パスワード
   ▼小僧 さん:
返信をありがとうございます。

せっかくいただいたモジュールがまとまっているのでそのまま使えるように
こちらで使わせていただこうと思います。
>・Call テーブルの作成2 のようにCall ステートメントで呼び出す

>提示させて頂いたコードについても、他のコード(恐らくCSVファイルの取込がありそうですね)

そうなのです。
それにテーブルの.Sizeや.AllowZeroLengthも必要なのでまだまだ頑張ります。
.CreateField(項目名, dbDate)
この書き方だと設定できないのですよねー。
またヘルプと格闘です。

>との連携についてでも、当方で回答できる限りお付き合いさせて頂きますよ。
いつもいつもありがとうございます。
たんさんにもご指摘いただいたのでまず自分で努力してみますね。
私の頭ではどうにもならなくなったら申し訳ありませんがまた宜しくお願い致します。

他にも5テーブルを作成しなくてはいけないけど、indexは3テーブルのみ必要なのでいただいたサンプルを分割して使おうと悪戦苦闘しています。
そのあとデータをcsvから入れて・・・(はぁ〜先は長い)

Sub テーブルの作成2()
'要参照設定 Microsoft DAO x.x Object Library
Dim MakeTBL As DAO.TableDef
Dim TName As String

  TName = "T_Branch"

  If DCount("*", "MSysObjects", "Name = '" & TName & "'") > 0 Then _
    DoCmd.DeleteObject acTable, TName

  Set MakeTBL = CurrentDb.CreateTableDef(TName)
  With MakeTBL
    .Fields.Append .CreateField("Company", dbText)
    .Fields.Append .CreateField("Branch", dbText)
    .Fields.Append .CreateField("Post", dbText)
    .Fields.Append .CreateField("Address", dbText)
  End With
  CurrentDb.TableDefs.Append MakeTBL
  Set MakeTBL = Nothing
  
  Select Case Left(UCase(TName), 1)
      Case "T", "M" 'トランとマスタ
        Call インデックスの作成(TName)
      Case "W"   'ワーク
      Case Else
        MsgBox "そんなテーブル聞いてない!!"
  End Select
End Sub

Sub インデックスの作成(TName As String)
Dim MyDb  As Database
Dim MakeTBL As DAO.TableDef
Dim Idx As DAO.Index

  Set MyDb = CurrentDb
  Set MakeTBL = MyDb.TableDefs(TName)
  Set Idx = MakeTBL.CreateIndex("Ind1")
  With Idx
    .Fields.Append .CreateField("Company")
    .Fields.Append .CreateField("Branch")
    .Primary = True
  End With
  MakeTBL.Indexes.Append Idx
  MakeTBL.Indexes.Refresh

  CurrentDb.TableDefs.Refresh

  Set MakeTBL = Nothing
  Set Idx = Nothing

End Sub


なんとかこれでちゃんとindexが付いた確認まではとれたので
あとはこれを少しづつ変形させて使わせていただきます。

ありがとうございました。

【6177】Re:CreateIndexはステートメント
発言  小僧  - 05/9/6(火) 18:04 -

引用なし
パスワード
   ▼くま さん:
こんにちは。


>Sub インデックスの作成(TName As String)

>なんとかこれでちゃんとindexが付いた確認まではとれたので
>あとはこれを少しづつ変形させて使わせていただきます。

[#6169]

で少し修正を加えたコードを提示しております。

今のままですと鍵マークは付きますが、インデックス(重複あり)の設定が
「なし」になってしまいませんでしょうか?

面倒ですが3回に渡ってインデックスを付け直す必要があるようです。


>はぁ〜先は長い

先が見えないよりは安心ですよ!
(フォローになってない気も…)

【6178】Re:CreateIndexはステートメント
お礼  くま  - 05/9/6(火) 18:25 -

引用なし
パスワード
   ▼小僧 さん:
度々ありがとうございます。

>今のままですと鍵マークは付きますが、インデックス(重複あり)の設定が
>「なし」になってしまいませんでしょうか?

あっ!!本当だ。テストで見逃しました。

>面倒ですが3回に渡ってインデックスを付け直す必要があるようです。
鍵マークセットで1つ。1項目で更に1つ。とコーディングする必要があるのですね。。。

sql文のようにインデックスを連続で設定もできないのですね。
「CREATE [ UNIQUE ] INDEX index
ON table (field [ASC|DESC][, field [ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]」

>>はぁ〜先は長い
>
>先が見えないよりは安心ですよ!
>(フォローになってない気も…)

そうですね。ありがとうございます。
修正して続きを頑張ります。

【6179】Re:SQLでも…
発言  小僧  - 05/9/6(火) 19:54 -

引用なし
パスワード
   ▼くま さん:
こんばんは。

>sql文のようにインデックスを連続で設定もできないのですね。
>「CREATE [ UNIQUE ] INDEX index
>ON table (field [ASC|DESC][, field [ASC|DESC], ...])
>[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]」

うーん、SQL でも同じようですね。

Sub SQLで()
'要参照設定 Microsoft DAO x.x Object Library

Dim TName As String
Dim strSQL As String

  TName = "T_Branch"

  If DCount("*", "MSysObjects", "Name = '" & TName & "'") > 0 Then _
    DoCmd.DeleteObject acTable, TName

  strSQL = "CREATE TABLE " & TName & " ( " _
      & "Company Text, " _
      & "Branch Text, " _
      & "Post Text, " _
      & "Address Text);"
  
  CurrentDb.Execute strSQL, dbFailOnError

  strSQL = "CREATE UNIQUE INDEX idx1 " _
      & "ON " & TName & " ( Company, Branch) " _
      & "WITH PRIMARY;"
  
  CurrentDb.Execute strSQL, dbFailOnError

End Sub

「UNIQUE」を指定しても、複数フィールドだと無理でした。
(単独だといけます。)

とはいえ、TableDef オブジェクトだけでなく SQL でもいけそうですね。

【6181】Re:SQLでも…
お礼  くま  - 05/9/6(火) 21:49 -

引用なし
パスワード
   ▼小僧 さん:
こんばんは。
遅くまで考えていただきありがとうございます。

>  CurrentDb.Execute strSQL, dbFailOnError

なるほど。
Executeを使うんですね。勉強になります。
たんさんに教えていただいたヘルプを見てsqlは書いたのですが、docmd.runsql を使って実行するのだと思っていたのでこけまくりでした。(私にはエラーの意味が理解できず諦めてしまいました。)


>「UNIQUE」を指定しても、複数フィールドだと無理でした。
>(単独だといけます。)

本当ですね。
結局は1indexを作る度に1命令が必要と
1命令でわさっとindexは作れないという事でしょうか。。。

どっちも似たり寄ったりなら
最初に教えていただいた方法で作りこみます。
.AllowZeroLengthの定義も出来ましたし。

本当に遅い時間までありがとうございます。

【6237】Re:SQLでも…
発言  小僧  - 05/9/9(金) 0:23 -

引用なし
パスワード
   ▼くま さん:
こんばんは。

他のサイトで、インデックスプロパティなるものを教えて頂きました。

手動で、T_Branch の 「Company」「Branch」フィールドに
インデックス(重複あり)と主キー設定をしてみて下さい。

テーブルをデザインビューで開き、[表示] から [インデックス] を選ぶ。

すると、やはり3つ(見た目4つ)のインデックスが設定されている事になっていますね。

…という事で3回の操作はやはり必要そうです。

【6241】Re:SQLでも…
お礼  くま  - 05/9/9(金) 11:24 -

引用なし
パスワード
   ▼小僧 さん:
おはようございます。
遅い時間まで返信をありがとうございます。

インデックスプロパティなるものを確認致しました。

>すると、やはり3つ(見た目4つ)のインデックスが設定されている事になっていますね。
>
>…という事で3回の操作はやはり必要そうです。

確かにそうですね。
このように確認ができるなんて。。。勉強になります。

しかも今までモジュールで再作成の必要が無い作りっぱなしのマスタテーブルは
テーブル設定を開いてフィールド名を選択してインデックスを設定していましたが(項目数が多いとスクロールで探すのが大変)
表示からインデックス設定の画面を表示すれば、ここで全項目分一度に設定ができるのですね。知らなかったぁ便利だぁ〜。。。


お時間があればもう少し教えていただけますか?
鍵マークを付けると「PrimaryKey」というものが出来上がりました。
既に「Company」には主キーと昇順の認識が付いていました。
更に「Company」「Branch」フィールドにインデックス(重複あり)と主キー設定をすると個別のindexができたように見えます。

これは、
常に「Company」「Branch」をセットとした検索や処理を行いこれらの項目をバラで検索しないなら鍵マークのみで良く、
「Company」のみや「Branch」のみの検索や処理を行うなら個別のindexも含め3回セットした方が好ましい。
という事なのでしょうか。

【6243】Re:Seekメソッドは速いっす
発言  小僧  - 05/9/9(金) 13:51 -

引用なし
パスワード
   ▼くま さん:
こんにちは。

>「Company」のみや「Branch」のみの検索や処理を行うなら、
>個別のindexも含め3回セットした方が好ましい。
>という事なのでしょうか。

当方もAccess に関する知識が大した事ないため、知りません(笑)

という事で検証検証…。

12万件のレコードを持つテーブルから、
無作為に50件のレコードを抽出するコードを組んでみました。

(テーブルは郵政公社の HP から全国の郵便番号情報の
CSVファイルを落として作成した手抜きのものです)

2つのフィールドを主キーにしたものとインデックス無しのもので実験開始…。

初めは抽出に「FindFirst」メソッドを使っていたため、
全くと言ってよいほど差が付かなかったのですが、
「Seek」 メソッドを使うと恐るべき結果となりました。

インデックス無し    → 21 秒
Seek メソッドよる抽出 →  0 秒(1秒以下)

Seek メソッドは

Set RS = CurrentDb.OpenRecordset("テーブル名", dbOpenTable)
  RS.Index = "PrimaryKey"
  RS.Seek "=", "あきる野市", "伊奈"

のように、初めに使うインデックスを指定して、
次に検索のキーワードを「 , 」で区切って指定する事によって検索を掛けます。

ここで "PrimaryKey" を指定する事で2つのフィールドに対して
それぞれ検索キーワードを指定してする事が可能でした。

という事で、鍵マークだけで大丈夫…のような気がします。

(あくまでも当方が検証の結果ですけど)

※ 長くなってすみませんでした。

【6244】Re:Seekメソッドは速いっす
お礼  くま  - 05/9/9(金) 14:17 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。

>当方もAccess に関する知識が大した事ないため、知りません(笑)
>という事で検証検証…。
>
重ね重ねありがとうございます。

こんなところに違いがあるとは。。。
知識があって作成するのと無知で作成するのとは
出来栄えがかなり違うのですね。

>※ 長くなってすみませんでした。

とんでもありません。理解しやすい文面です。
いつも本当に感謝感謝です。

ありがとうございました。

【6245】Re:Seekの続報です。
発言  小僧  - 05/9/9(金) 17:12 -

引用なし
パスワード
   ▼くま さん:
こんにちは。

さっそく業務で使っている Access にも Seek メソッドを試してみました。

その結果、先ほど、

>鍵マークだけで大丈夫…

と書いてしまいましたが、うまく行きませんでした…。
さっそくヘルプを見たところ

>>複数列インデックスに対して Seek メソッドを使用する場合、
>>複数列インデックスのすべてのフィールドに対して比較値を指定しないと、
>>"=" 演算子を使用することはできません。
>>これは、検索条件フィールドの一部 (key2, key3, など) が既定値では Null 値
>>になり、対応する可能性が低いためです。

という事で「PrimaryKey」を「Company」「Branch」両フィールドに指定して
「Company」値のみの検索をすると「Branch」は「Null」のフィールドを
検索してしまうようです…。

「Company」「Branch」両フィールドで検索 → 「Primary」インデックス
「Company」フィールドのみを検索     → 「Company」インデックス
「Branch」 フィールドのみを検索     → 「Branch」 インデックス

を使う事になりそうですね。

【6247】Re:Seekの続報です。
お礼  くま  - 05/9/9(金) 20:05 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。
何度も検証をして下さって頭が下がる思いです。

今のところ私の使い方は両フィールドに必ず設定なので
>「Company」「Branch」両フィールドで検索 → 「Primary」インデックス
これだけでうまく動いているようです。
(鍵マークの為にnullが入っている事はあり得ないという考え方で両フィールドで検索)
鍵マーク付きの「Company」「Branch」項目定義を「空文字OK」&「値要求はしない」にしてみましたが、データを入れる際には
「Company」「Branch」両方データを入れないと(値がnullだと)エラーになりました。

結果、今の私のやり方なら鍵マークの「Primary」インデックスだけで大丈夫と解釈しても大丈夫なのですかね。。。

1627 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078245
(SS)C-BOARD v3.8 is Free