Access VBA質問箱 IV

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

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


348 / 500 ページ ←次へ | 前へ→

【6251】Re:検索について
発言  小僧  - 05/9/11(日) 16:11 -

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

ご提示されている内容ですと、yosi さんがどこで躓いてしまっているかが
ちょっと当方には解らないです。


>抽出してレポートで表示するようにしたいのです。


ある条件によって抽出したものをレポートに表示させるには

A) レポートをオープンする際にフィルタ条件を掛けて開く。

B) レポートの基になるクエリに抽出条件を入れておく。


大抵この2つのパターンでレポートの処理をすると思われるのですがいかがでしょうか。
・ツリー全体表示

【6250】検索について
質問  yosi  - 05/9/11(日) 15:51 -

引用なし
パスワード
   フォームに業務日と入金日のテキストボックスがあり、コマンドボタンを
押すことによって該当するデータを抽出するようにしたいのです。
例えば業務日のテキストボックスに2005/9/30と入力し、
入金日のテキストボックスに2005/9/30と入力します。
この場合、業務日は2005/9/30を含む以前の業務日のデータと
入金日は2005/9/30を含む以前の入金日及び入金日が空白のデータを抽出して
レポートで表示するようにしたいのです。
宜しくお願い致します。
・ツリー全体表示

【6249】Re:フォームでの検索について
お礼  はぐり  - 05/9/9(金) 22:40 -

引用なし
パスワード
   ▼小僧 さん:
>▼はぐり さん:
>おはようございます。
>
>>例えば、テキストボックスに「pink」と入力したら、文献名でも要約でも出典でも
>>とにかく「pink」という単語がどこかに入っているレコードが抽出されるように
>>したいのです…これって可能でしょうか?
>
>もちろん可能です。
>現在どこまでフォームができているのでしょうか。
>(文献名のみで「pink」が入っているレコードは抽出できますか?)

お返事ありがとうございます。
せっかく返信いただいたのに恐縮ですが、今日会社で色々試していたら
解決してしまいました。
書き込んだ時点で1箇所での検索はできていました。
少し応用するだけだったんですね…すみません!!
・ツリー全体表示

【6248】出来ました!!
お礼  マイケル  - 05/9/9(金) 22:39 -

引用なし
パスワード
   小僧 さん、ありがとうございました。
なんとか書類作成時に間に合いました。
本当にありがとうございました。
<m(__)m>
・ツリー全体表示

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

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

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

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

【6246】Re:フィールド名が存在したものだけフィー...
回答  Gin_II  - 05/9/9(金) 18:21 -

引用なし
パスワード
   > AD02が無い場合は、AD04を…、AD04が無い場合はAD36を…、
> というふうにできませんか?

On Error Resume Next
を使ってやればいいかと。
・ツリー全体表示

【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」 インデックス

を使う事になりそうですね。
・ツリー全体表示

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

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

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

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

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

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

ありがとうございました。
・ツリー全体表示

【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つのフィールドに対して
それぞれ検索キーワードを指定してする事が可能でした。

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

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

※ 長くなってすみませんでした。
・ツリー全体表示

【6242】フィールド名が存在したものだけフィール...
質問  チリ子  - 05/9/9(金) 12:09 -

引用なし
パスワード
   こんにちは。はじめて投稿します。
テーブルのフィールド名を変更したいのですが、テーブルの列が毎回減ったり増えたりする為、そのフィールが無い場合は、エラーになってしまいます。
以下の内容に書いています。

Dim db As DAO.Database
Set db = CurrentDb
With db.TableDefs(Forms![データ参照]![テキスト1]).Fields
.Item("AD02").Name = "test1"
.Item("AD04").Name = "test2"
.Item("AD36").Name = "test13"
.Item("AF85").Name = "test14
.Item("BC03").Name = "test15"
.Item("BC04").Name = "test16"
.Item("BC06").Name = "test17"
End With
db.Close: Set db = Nothing

AD02が無い場合は、AD04を…、AD04が無い場合はAD36を…、というふうにできませんか?
宜しくお願いします。
・ツリー全体表示

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

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

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

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

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

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


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

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

【6240】Re:印刷について
発言  小僧  - 05/9/9(金) 11:03 -

引用なし
パスワード
   ▼マイケル さん:
こんにちは。

確認なのですが、

順番 営業所名
1  東京都
2  東京都
3  千葉県
4  神奈川県
5  神奈川県
6  千葉県

のような事はないのでしょうか?
もしあった場合には千葉県、神奈川県のどちらを上にするという判定は
より上に順番があった方(この場合は千葉県)なのでしょうか。


上の条件で宜しかったら、

-----------------------------------------------------------------
フィールド:|  順番  | 営業所名 |   住所  | 電話番号
-----------------------------------------------------------------
テーブル :|テーブル名 | テーブル名 | テーブル名 | テーブル名
-----------------------------------------------------------------
集計   :|  最小  | グループ化 | グループ化 | グループ化
-----------------------------------------------------------------
並び替え :|  昇順  |      |      |
-----------------------------------------------------------------

でどうでしょうか?

レポートのレコードソースにこのクエリを指定して、
順番のテキストボックスを配置しなければ良いと思われますがいかがでしょうか
・ツリー全体表示

【6239】Re:コンボボックスで。。。二日目
お礼  you  - 05/9/9(金) 11:02 -

引用なし
パスワード
   いろいろ教えていただきありがとうございました。

もう一度初めから作り直して見ます。

今後も解らない事がたくさん出てくると
思うのでその際にはまたよろしくお願い致します。
・ツリー全体表示

【6238】印刷について
質問  マイケル  - 05/9/9(金) 9:14 -

引用なし
パスワード
   親子フォームでメイン側に販売店名等が入り、サブフォームには
1つのレコードに「営業所名、住所、電話番号」が入るようになってます。
ここで1つでお聞きしたいのですが下記のように同じ内容は1つにして
印刷したいのです。
サブフォームのレコードに入れたデータを印刷する場合、一番上のレコードが一番下に印刷されてしまいますので、それを回避する為にオートナンバー型のフィールド(順番)を設定してレコードごとに「1,2,3」と番号をふり「並べ替え/グループ化の設定で昇順にして一番上に印刷されるように設定してるのですが。これを設定することによってクエリのデザイン画面でツールバーの「表示→集計」で同じ内容のものを1つにできません。
何かいい方法はないでしょうか。

★サブフォームのイメージです
------------------------------------------------
順番  営業所名  住所   電話番号
------------------------------------------------
1    本社    東京都  03-0000-0000
------------------------------------------------
2    本社    東京都  03-0000-0000
------------------------------------------------
3    支所    千葉県  043-0000-0000
-----------------------------------------------
上記を下記のように印刷したいのです。(順番は表示及び印刷はしないです)

------------------------------------------------
    本社    東京都  03-0000-0000
------------------------------------------------
    支所    千葉県  043-0000-0000
-----------------------------------------------

宜しくお願い致します。
・ツリー全体表示

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

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

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

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

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

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

…という事で3回の操作はやはり必要そうです。
・ツリー全体表示

【6236】Re:テーブルの検索方法
回答  小僧  - 05/9/8(木) 16:52 -

引用なし
パスワード
   ▼masashi さん:
動的に クエリを作ってみました。
こちらは VBA での操作になります。

適当なモジュールに貼り付けて実行させると
QName で指定した名前のクエリができていると思います。

Sub 変数でクエリを作成()
'要参照 Microsoft DAO x.x Object Library
Dim TName As String
Dim QName As String
Dim QD As DAO.QueryDef
Dim SelSQL As String
Dim WheSQL As String
Dim strSQL As String
Dim Ijyo As Long
Dim Miman As Long
Dim i As Long

  TName = "T_Temp"   '元テーブル名
  QName = "Q_Temp"   '作成クエリ名
  
  Ijyo = 20      '以上値
  Miman = 25      '未満値

  If DCount("*", "MSysObjects", "NAME = '" & QName & "'") Then _
    DoCmd.DeleteObject acQuery, QName
    
  For i = 1 To 5
    SelSQL = SelSQL & TName & ".A" & i & ","
    WheSQL = WheSQL & "(" & TName & ".A" & i & " >= " & Ijyo & " AND " _
            & TName & ".A" & i & " < " & Miman & ") Or "
  Next
  
    SelSQL = Left(SelSQL, Len(SelSQL) - 1)
    WheSQL = Left(WheSQL, Len(WheSQL) - 4)
  
    strSQL = "SELECT " & TName & ".Model, " _
        & SelSQL _
        & " FROM " & TName _
        & " WHERE " _
        & WheSQL
       
  Set QD = CurrentDb.CreateQueryDef(QName, strSQL)
  Set QD = Nothing

End Sub
・ツリー全体表示

【6235】Re:テーブルの検索方法
回答  小僧  - 05/9/8(木) 16:16 -

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

>質問1:変数の利用について
> もし、抽出条件のPARAMETERS、TableNameを変数に付与することができれば、
>記述文はもっとわかりやすくなります、可能でしょうか?

クエリには変数が使えませんが、フォームの値を持ってくる事は可能です。
PARAMETERS Forms![フォーム名].[txt以上] Value, Forms![フォーム名].[txt未満] Value;
SELECT T_Temp.Model,
      T_Temp.A1,
      T_Temp.A2,
      T_Temp.A3,
      T_Temp.A4,
      T_Temp.A5
FROM T_Temp
WHERE
  T_Temp.A1>=Forms![フォーム名].[txt以上] And T_Temp.A1<Forms![フォーム名].[txt未満]
Or T_Temp.A2>=Forms![フォーム名].[txt以上] And T_Temp.A2<Forms![フォーム名].[txt未満]
Or T_Temp.A3>=Forms![フォーム名].[txt以上] And T_Temp.A3<Forms![フォーム名].[txt未満]
Or T_Temp.A4>=Forms![フォーム名].[txt以上] And T_Temp.A4<Forms![フォーム名].[txt未満]
Or T_Temp.A5>=Forms![フォーム名].[txt以上] And T_Temp.A5<Forms![フォーム名].[txt未満];

フォーム名 というフォームの「txt以上」「txt未満」という
コントロールの内容によって値が変化します。

…とここまで書いて外している気が…。

SQL を動的に使いたいのでしたら VBA での処理になりますね。
ちょっとコードを作るのに時間が掛かりそうなので、投稿し直します。


>質問2:コード記述のルールにつて

SQL ビューに全角スペースが入っていないでしょうか?
(コピー & ペースト で貼り付けると全角になってしまうようです。)

半角スペースを使うことと、
行の終わりに必ず半角スペースが入っているかを確認されて下さい。

(SELECT*FROMT_Temp のようにならないため)
・ツリー全体表示

【6234】Re:リストボックスの項目を選択して、処理...
発言  たな  - 05/9/8(木) 15:59 -

引用なし
パスワード
   ▼たん さん

今回もどうもありがとうございます。

難しそうですが、調べてみます。

あとは、代用的にコンボボックスを使用して、
選択されたファイル名を、取得する事が可能であれば良いかと考えています。

まずは調べてみます。

回答ありがとうございました。
・ツリー全体表示

【6233】ゴミが出るのを解消するためには
質問  にしもり  - 05/9/8(木) 15:52 -

引用なし
パスワード
   こんにちは。
Excelの出勤データをAccessで検索システムに取り込んで使っています。
いま変なことが起きています。
Excel上のデータ(たとえば「休暇」というデータ)をdeleteすると、Access検索システムには何も出なくなるはずなのに「0」と表示されてしまいます。
いわゆるゴミですがなぜこのようになってしまうのでしょうか?
これを解消さすためにはどうすればよろしいでしょうか?
ご存知の方、どうか教えてください。
・ツリー全体表示

【6232】Re:コンボボックスで。。。二日目
発言  小僧  - 05/9/8(木) 15:41 -

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

今行っていることは、
「コンボボックスの値を変えたら ここまでおっけー と表示する」

という所までです。

この時点でうまくいかないという事は
Accessがコンボボックスの値が変わった事を認識していないという事です。

Access そのものがおかしいか、「cmb行事」の設定が間違っているかの
どちらかしかありえないのですが…。


>違うやり方はありませんか

この時点で無反応になってしまうようでしたら
コンボボックスで選んだ値をテーブルに格納する方法は当方にも解りません…。
すみません。
・ツリー全体表示

348 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084715
(SS)C-BOARD v3.8 is Free