Access VBA質問箱 IV

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

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


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

【7386】検索結果について
質問  TB1  - 06/2/24(金) 16:29 -

引用なし
パスワード
   前回の続きで恐縮ですが、検索フォームで3つの検索テーマボタンがあって
そのうちのひとつを改造したのですが結果が出てきません。

Private Sub 検索_Click()
 Dim cnn As ADODB.Connection
 Dim recN As ADODB.Recordset
 Dim recM As ADODB.Recordset
 Dim strSQL As String
 Dim strSearch As String
 
 Set Me.Recordset = Nothing
 Me.商品分類コード.ControlSource = ""
 Me.JANコード.ControlSource = ""
 Me.商品名.ControlSource = ""

で、「商品分類コード」の部分を差換えたのですが、ここをチェックボタンで選択して検索ボタンを押すと、なにも結果が返ってきません。
JANや商品名を選ぶと、該当データがずらっとでてくるんですが。
コードの名前、テーブルの名前をチェックしても、すべて差換えた状態なのですが、どこか見落としているんでしょうか。なにが悪いのかまったく見当が付きません。ありがちな間違いがあればご指摘ください。
宜しくお願いします。
・ツリー全体表示

【7385】Re:配列をセットする方法
質問  kama  - 06/2/24(金) 14:00 -

引用なし
パスワード
   Gin_IIさん
ありがとうございます。

>> クエリのレイアウトは、製品名、受注合計、支店1、支店2、支店3、
>>支店4・・・支店80で、構成されています。
>
>元のテーブルも支店1〜支店80までをフィールドとして持っているのでしょうか?
元のテーブルは支店1〜支店80のフィールドとして持っています。
場合によって、支店1〜支店80は可変となるから、無いデータのフィールドを
除外したいです。

>
>正規化されているデータであれば、クロス集計クエリを使ってやれば
>
>>支店1〜支店80の従合計がゼロまたはNullの支店を
>
>このようなデータは、でてこないですね。
・ツリー全体表示

【7384】Re:配列をセットする方法
回答  Gin_II  - 06/2/24(金) 12:11 -

引用なし
パスワード
   > クエリのレイアウトは、製品名、受注合計、支店1、支店2、支店3、
>支店4・・・支店80で、構成されています。

元のテーブルも支店1〜支店80までをフィールドとして持っているのでしょうか?

正規化されているデータであれば、クロス集計クエリを使ってやれば

>支店1〜支店80の従合計がゼロまたはNullの支店を

このようなデータは、でてこないですね。
・ツリー全体表示

【7383】Re: 補足
発言  たん  - 06/2/24(金) 10:29 -

引用なし
パスワード
   >DFirstには、下記の技術情報が出ています。
>http://support.microsoft.com/kb/208190/ja
>
>DFirstでの取得で正しいのかどうかは、質問者が判断して下さい。

データベースでは、レコードを表示させる為の並び順と、
実際にレコードが保存されている順は同一ではありません。

# 詳しくは、小僧さん提示の「並び順」のリンク参照。

なので、例え並び順をレコードに指定していても、レコードが保存されて
いる順は、並び順とは無関係なので、DFirstで並び順での先頭を
取得したいと思っても、取得出来るとは限りません。

Dfirstが取得するのは、保存順の先頭なので。
・ツリー全体表示

【7382】チェックボックスでの抽出条件
質問  masamasa  - 06/2/24(金) 10:02 -

引用なし
パスワード
   フォームでチェックボックスを使い、クエリーのフィールドの未入力を抽出する条件をつくり、レポート印刷やプレビューに反映させたい。
・ツリー全体表示

【7381】配列をセットする方法
質問  kama  - 06/2/24(金) 9:23 -

引用なし
パスワード
   いつもお世話になっております。
 クエリのレイアウトは、製品名、受注合計、支店1、支店2、支店3、
支店4・・・支店80で、構成されています。
 それをExcelへ出力する際、支店1〜支店80の従合計がゼロまたはNullの支店を
出力しない方法は、あるのでしょうか?
ご指導ください。
・ツリー全体表示

【7380】Re: DFirstで大丈夫なの?
回答  たん  - 06/2/24(金) 8:43 -

引用なし
パスワード
   横から失礼。

DFirstには、下記の技術情報が出ています。
http://support.microsoft.com/kb/208190/ja

DFirstでの取得で正しいのかどうかは、質問者が判断して下さい。


また、

>Function TEST001()

については、下記のようにすべきかと。
(同じDLoookupを繰り返すのは処理が遅くなるだけなので、
 1回処理した結果は変数等に格納し、2度手間かけさせないようにすべき。)

Function TEST001()
Dim wk_Dfirst_1 AS String, wk_Dfirst_2 AS String

wk_Dfirst_1 = Nz(DFirst("ModelNo", "M1"), "")
wk_Dfirst_2 = Nz(DFirst("ModelNo", "M2"), "")

If wk_Dfirst_1 = "あ" And wk_Dfirst_2 = "い" Then
  MsgBox "M1、M2正解"
ElseIf wk_Dfirst_1 = "あ" Then
  MsgBox "M1不正解"
ElseIf wk_Dfirst_2 = "い" Then
  MsgBox "M2不正解"
End If
End Function

# 元コードではEnd Ifの後に、MsgBox "M2不正解"やってますよ。

1行でやらせたくても、M1、M2が正解の場合と、どちらかが不正解の
場合に出すメッセージパターンが違うので、現状の仕様では、同一には、
出来ません。

# 出来なくはないけど、結局、IFで3回チェックするのは変わりません。
# (1行に見えるだけで、結局は3回処理させるので)

MsgBox "M1:" & IIF(wk_Dfirst_1 = "あ","正解","不正解") & CHR(13) & _
 "M2:" & IIF(wk_Dfirst_2 = "い","正解","不正解")

というように、正解の時に出すメッセージパターンと不正解の時に出す
メッセージパターンを同一にすれば可能かと。
・ツリー全体表示

【7379】Re:二つのテーブルの内容をチェックするに...
質問  kumakai  - 06/2/23(木) 22:04 -

引用なし
パスワード
   M1、M2のModelNoの値、
最初、最後のレコードはそれぞれ同一のため、以下の形式で大丈夫かと思いますが、
ご指導ください。

メッセージの表示について、以下のコードで実行する場合は、メッセージはバラバラに
なっているため、改修したいです。三つの情報表示を一つのMsgBoxに表示させたいことは
可能なことでしょうか?

Function TEST001()
If DFirst("ModelNo", "M1") = "あ" And DFirst("ModelNo", "M2") = "い" Then
  MsgBox "M1、M2正解"
ElseIf DFirst("ModelNo", "M1") <> "あ" Then
  MsgBox "M1不正解"
End If
  MsgBox "M2不正解"
End Function
・ツリー全体表示

【7378】Re:データーが更新されずに印刷されてしま...
お礼  Dis  - 06/2/23(木) 21:09 -

引用なし
パスワード
   ご回答ありがとうございました。
四苦八苦しましたが、上手くいきました。
・ツリー全体表示

【7377】Re:二つのテーブルの内容をチェックするに...
発言  小僧  - 06/2/23(木) 16:56 -

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

>If DFirst([ModelNo], M1) = "あ" And DFirst([ModelNo], M2) = "い" Then

こちらのコードを活かす形ですと。

If DFirst("ModelNo", "M1") = "あ" And DFirst("ModelNo", "M2") = "い" Then

となりますが、残念ながら必ずしもうまくいく訳ではありません。
(うまく行く事もあります。)

下記参考
[#5903] Re:集計について

Access に「最初のレコード」と認識させる為のフィールドが必要になりますね。
・ツリー全体表示

【7376】Re:他アプリケーションの操作に関して
発言  たぬき  - 06/2/23(木) 16:21 -

引用なし
パスワード
   小僧さんの書かれたようにプロセスを調べるのが普通です。

ここではもっと簡単な方法を書きます。
ただしフォームが一つでキャプションが変わらないものに限ります。

例として電卓を終了させるものを作ってみます。

1.フォームを作成してコマンドボタンを貼り付けます。

2.コマンドボタンのプロパティを開けて名前をcmd1にします。

3.AltとF11キーを同時に押してコードエディターを開きます。

4.コード部に以下のコードを書きます。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWnidowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

Private Const WM_CLOSE = &H10

4.上のコンボボックスからcmd1とClickを選びます。
すると
Private Sub cmd1_DblClick(Cancel As Integer)

End Sub

のようになるのでその間に
  Dim hw As Long
  Dim rc As Long
    
  hw = FindWindow(vbNullString, "電卓")
  If hw <> 0 Then
    rc = SendMessage(hw, WM_CLOSE, 0, 0)
  End If
と書きます。

予め電卓を起動させておいて、このフォームのボタンをクリックして
電卓が終了するか確かめてください。
・ツリー全体表示

【7375】Re:二つのテーブルの内容をチェックするに...
質問  kumakai  - 06/2/23(木) 15:33 -

引用なし
パスワード
   意味不明な質問で、申し訳ありません。

M1、M2の二つテーブルがあり、共通のフィールド「ModelNo」を持っています。
ここで、両テーブルの最初のレコードの「ModelNo」の値は「あ」と「い」であれば、
Msgboxで「正解」を表示したいです。
以下のコードを書いたのですが、うまくいきません。

Sub T-AS()
If DFirst([ModelNo], M1) = "あ" And DFirst([ModelNo], M2) = "い" Then
  MsgBox "正解"
End If
End Sub
・ツリー全体表示

【7374】Re:レポート上での画像データの切り替えに...
発言  小僧  - 06/2/23(木) 14:24 -

引用なし
パスワード
   ▼優哉 さん、たぬき さん:
こんにちは。

たぬき さんと違ってテーブル(クエリ)を使った処理を考えてみました。

ご提示された情報が少ないので、優哉 さんの要望とは違っているかもしれませんが…。


T_作業実績
ID 日付    項目A  項目B
1  2005/01/01 True   True
2  2005/01/02 True   False
3  2005/01/03 True   True
4  2005/01/04 False  True
5  2005/01/05 False  False

T_画像データ
画像ID 項目A 項目B 画像(OLEオブジェクト型)
1    True  True  ビットマップイメージ
2    True  False ビットマップイメージ
3    False True  ビットマップイメージ
4    False False ビットマップイメージ


OLE オブジェクト型のフィールドにはあらかじめドラッグ&ドローで結構ですので
該当する bmpファイル を挿入しておいて下さい。

上記の様なテーブル構成を造り、項目A と 項目B をリレーションした
クエリを元にレポートを作成すると条件にあった画像が表示されるはずです。
・ツリー全体表示

【7373】Re:抽出(部分一致)
お礼  しゅう  - 06/2/23(木) 14:22 -

引用なし
パスワード
   なるほど!!
できました。ヘルプは見にくいので、使ってなかったのですが。
今後見るようにします。
お教えいただきありがとうございました。
・ツリー全体表示

【7372】Re:クエリの作成
お礼  コマ  - 06/2/23(木) 14:11 -

引用なし
パスワード
   小僧さん

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

お蔭で希望通りの仕組みが出来そうです。

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

【7370】Re:レポート上での画像データの切り替えに...
回答  たぬき  - 06/2/23(木) 13:33 -

引用なし
パスワード
   いろいろ考えられますが簡単な方法は
最初にイメージとして画像を貼り付けておきます。
項目の結果によって可視か不可視にすれば、良い
のではないでしょうか。

(詳細のルーチンに以下のようにするとか)

If 項目1 = 1 Then
  画像1.Visible = True
  画像2.Visible = False
Else
  画像1.Visible = False
  画像2.Visible = True
End If

はずしていたらごめんなさい。
・ツリー全体表示

【7369】Re:抽出(部分一致)
発言  小僧  - 06/2/23(木) 11:57 -

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


>部分一致の検索はどのようにすればよいのでしょうか?
>
>  Me.Filter = " 設置エリア = '" & Me!コンボ77 & "'"

ヘルプで 「Like 演算子」と「ワイルドカード」を参照されてみて下さい。


さらに複雑な曖昧検索をしたい場合には 正規表現 を使って検索をする事が可能です。
・ツリー全体表示

【7368】Re:雛形ファイルへのリッセトについて
お礼  kuma  - 06/2/23(木) 11:50 -

引用なし
パスワード
   小僧さん
 この問題でずっと悩まされて、今回のレッセンで解決できましたので、
ありがとうございました。
・ツリー全体表示

【7367】Re:クエリの作成
回答  小僧  - 06/2/23(木) 11:42 -

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


>SQLから項目の順序を変えようとしたのですが上手くできません。

クロス集計している項目の順序を入れ替えるのでしたらクエリをデザインビューで開き、

ツールバーから [表示] → [プロパティ] → [クエリ列見出し] の欄に

"入庫","出庫"

と記入すると並び替えることが可能です。


ですが、今回は残高はクロス集計の対象でないのでココでの設定は無理ですね。


>フォームの表示の仕方でデータシート指定で表示をしたいのですが、

という事ですので、フォームに対応してもらいましょう。

フォームをデータシートビューで開いた状態で「残高」の列をクリックします。

列全体が選ばれている状態になりましたら
左クリックでドラッグして「出庫」の右側でドロー。


見た目上の順序が入れ替わると思いますがいかがでしょうか。
・ツリー全体表示

【7366】Re:データーが更新されずに印刷されてしま...
回答  たぬき  - 06/2/23(木) 11:25 -

引用なし
パスワード
   いろいろ方法はあると思いますが・・・
OpenReportの前に
DoCmd.RunCommand acCmdSaveRecord
を挿入してみてください。
・ツリー全体表示

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