Access VBA質問箱 IV

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

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


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

【8268】Re:DAOで集合関数の値を取得したい
回答  Gin_II  - 06/7/15(土) 2:43 -

引用なし
パスワード
   > DAOを利用してVBAでSQLを書きそこで取得したテーブルtのレコード数を
> 変数hに格納しmsgbox(h)として表示させたいのですが。

DAO にこだわる理由は?

MsgBox DCount("*", "t")

でも、レコード数を求めることはできますよ。


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim h As Long

Set db = Currentdb
Set rs = db.OpenRecordset("SELECT COUNT(*) AS FLD FROM t", dbOpenSnapshot)

h = rs!FLD

MsgBox h
・ツリー全体表示

【8267】Re:DAOで集合関数の値を取得したい
質問  かめ  - 06/7/15(土) 1:33 -

引用なし
パスワード
   ▼レモン さん:
>▼かめ さん:
>>▼Gin_II さん:
>>>>VBAのDAOで集合SQLの値を取得する書き方を教えてください。
>>>
>>>集合SQLの値とは?
>>>OpenRecordset ではないということでしょうか?
>>
>>VBAで"select count(*) from t"の値を変数に格納したいのですが。
>>書き方がよくわかりません。
>>OpenRecordsetだと思うのですが。
>>
>>超初心者なのでよろしくお願いします。
>
>
>Dim db       As DAO.Database
>Dim rs       As DAO.Recordset
>Set db = CurrentDb()
>
>strSQL1 = ""
>strSQL1 = "" & "SELECT COUNT(*) as Kbn_Count FROM (SELECT FIELD2,FIELD3 FROM TBL_科目別 GROUP BY Field2,Field3) AS A"
>strSQL1 = strSQL1 & " LEFT JOIN (SELECT CaseCode,CaseCode2 FROM TBL_区分マスタ) AS B"
>strSQL1 = strSQL1 & " ON b.CaseCode=A.Field2 and B.CaseCode2=A.Field3"
>strSQL1 = strSQL1 & " WHERE B.CaseCode IS NULL or B.CaseCode2 IS NULL"
>  
>  Set rs = db.OpenRecordset(strSQL1, dbOpenDynaset)
>  
>  If rs!Kbn_Count <> 0 Then
>    rs.Close: Set rs = Nothing
>    db.Close: Set db = Nothing
>    
>    Exit Function
>  End If
>
>はしょっただけですのですが・・・
>ですがカウントだけならDcount関数というのも在るのでそちらでもいいかと

レモンさんありがとうございます。

もう少し簡単な例でご説明願いないでしょうか

たとえば、テーブルtのレコード数をメッセージ表示するような場合で
VBAの中でcountの集合SQLを直接書く場合・・・

DAOを利用してVBAでSQLを書きそこで取得したテーブルtのレコード数を変数hに格納しmsgbox(h)として表示させたいのですが。

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

【8266】新規に入力する際に自動連番にしたいんで...
質問  YUU  - 06/7/14(金) 22:56 -

引用なし
パスワード
   [本文なし]
すいません。access初心者です。過去の投稿を見ても、よく分からなかったので教えてください。
WindosXP Access200Oで現在、

<テーブル1>         <テーブル2>
商品区分CD 商品区分名    商品CD  商品名 商品区分名
  100     魚        1    ハマチ   100
  200     肉        2    カツオ   100
  300     野菜       1    豚肉    200
                1   きゅうり   300
                2    人参    300

を作成し、メインフォームのコンボボックスで、商品区分CDを選ぶと
サブフォームに商品区分毎の商品名が出てきます。

<メインフォーム> 商品区分CD 100 魚
<サブフォーム>  商品CD 1  ハマチ
             2  カツオ 

そこにコマンドボタンをクリックした場合、新規に入力できるのですが、
その時に、商品CDを連番にするにはどうしたらいいですか?
上記の場合、 商品CDに 3 が入るようにしたいんです。
・ツリー全体表示

【8265】Re:DAOで集合関数の値を取得したい
回答  レモン  - 06/7/14(金) 17:49 -

引用なし
パスワード
   ▼かめ さん:
>▼Gin_II さん:
>>>VBAのDAOで集合SQLの値を取得する書き方を教えてください。
>>
>>集合SQLの値とは?
>>OpenRecordset ではないということでしょうか?
>
>VBAで"select count(*) from t"の値を変数に格納したいのですが。
>書き方がよくわかりません。
>OpenRecordsetだと思うのですが。
>
>超初心者なのでよろしくお願いします。


Dim db       As DAO.Database
Dim rs       As DAO.Recordset
Set db = CurrentDb()

strSQL1 = ""
strSQL1 = "" & "SELECT COUNT(*) as Kbn_Count FROM (SELECT FIELD2,FIELD3 FROM TBL_科目別 GROUP BY Field2,Field3) AS A"
strSQL1 = strSQL1 & " LEFT JOIN (SELECT CaseCode,CaseCode2 FROM TBL_区分マスタ) AS B"
strSQL1 = strSQL1 & " ON b.CaseCode=A.Field2 and B.CaseCode2=A.Field3"
strSQL1 = strSQL1 & " WHERE B.CaseCode IS NULL or B.CaseCode2 IS NULL"
  
  Set rs = db.OpenRecordset(strSQL1, dbOpenDynaset)
  
  If rs!Kbn_Count <> 0 Then
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
    
    Exit Function
  End If

はしょっただけですのですが・・・
ですがカウントだけならDcount関数というのも在るのでそちらでもいいかと
・ツリー全体表示

【8264】Re:DAOで集合関数の値を取得したい
質問  かめ  - 06/7/14(金) 17:30 -

引用なし
パスワード
   ▼Gin_II さん:
>>VBAのDAOで集合SQLの値を取得する書き方を教えてください。
>
>集合SQLの値とは?
>OpenRecordset ではないということでしょうか?

VBAで"select count(*) from t"の値を変数に格納したいのですが。
書き方がよくわかりません。
OpenRecordsetだと思うのですが。

超初心者なのでよろしくお願いします。
・ツリー全体表示

【8263】Re:基になるテーブルを選択するには
お礼  にしもり  - 06/7/14(金) 17:04 -

引用なし
パスワード
   ▼Gin_II さん:
わかりました。
ありがとうございます。
Gin_II 様、これからもよろしくお願いいたします。
・ツリー全体表示

【8262】Re:再度 上記の式の応用について
お礼  ねこです☆  - 06/7/14(金) 17:02 -

引用なし
パスワード
   ☆クロさんへ☆

ご解答ありがとうございますm(__)m

質問1:教えていただいたようにやってみます(^∀^)♪
質問2:別の集計方法に変更になりました。
※  :一度にたくさん質問して申し訳ありません。
    以後、1つづつするようにしますm(__)m

毎回丁寧なご指導ありがとうございます♪
・ツリー全体表示

【8261】Re:DAOで集合関数の値を取得したい
回答  Gin_II  - 06/7/14(金) 16:55 -

引用なし
パスワード
   >VBAのDAOで集合SQLの値を取得する書き方を教えてください。

集合SQLの値とは?
OpenRecordset ではないということでしょうか?
・ツリー全体表示

【8260】Re:SQLでの検索
発言  飛ばない豚  - 06/7/14(金) 16:55 -

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

> [field1] & [field2] & [field3] … & [field10]
> に「サンプル」が含まれている
>
> と同意になりませんか?

私も考えました。
検索値が一つだと、同意だと思いますが、複数になると、
少し意味が違ってくると思います。

field1「サンプル」
field2「ダウンロード」

のとき、検索値が「サン」「ロード」だった場合、ヒットするのかしないのか。

まっきんさんの最初のコードを見る限り、ヒットさせない方が良いような、
でも、普通に考えると、ヒットさせた方が良いような。。。。

と、いうことで、混乱してきたのもあり、まっきんさんのコードを生かし、
ヒットさせない方法にしました。(^_^;;


一応、参考、ということで。。。。。
・ツリー全体表示

【8259】DAOで集合関数の値を取得したい
質問  かめ  - 06/7/14(金) 16:53 -

引用なし
パスワード
   VBAのDAOで集合SQLの値を取得する書き方を教えてください。
よろしくお願いします。
・ツリー全体表示

【8258】Re:基になるテーブルを選択するには
回答  Gin_II  - 06/7/14(金) 16:53 -

引用なし
パスワード
   >UPDATE tbl_ALLOCATION
>SET tbl_ALLOCATION.Course_ID = [tbl_ALLOCATION]![Course_ID]+1
>WHERE (((tbl_ALLOCATION.ID)=1));
>
>開くときIDを更新している、という理解でよいですか。

正確には、Cource_ID を更新している
ですね。

で、更新した Cource_ID をフォーム上のコントロールに表示させているみたいですね。
・ツリー全体表示

【8257】Re:再度 上記の式の応用について
回答  クロ  - 06/7/14(金) 16:40 -

引用なし
パスワード
   こんにちは
>質問1.『法人名フィールド』の『○○法人』と『○○会社』が付かないフールドの件数を
>    返したです
>    私が間違えた式
>  =DCount("[法人名]","参加会社一覧","[法人名]Not Like'*法人*'or'*会社*'")

この第三引数を簡単に書ける方法
参加会社一覧でクエリでつくり、法人名フィールドをフィールドに下ろして
抽出対象に条件を入れます。
Andなら同行内に、Orから行を変えます。
その後にメニュー>表示>SQLビューにして
WHERE句のあとがこの第三引数となります。
※( )が多いけど大体分かりますよね

ねこさんが書いているのとどう違うか見比べてください。
省略している部分が見えてくるかと思います。


>質問2.左から以下のようなフィールドを作りました。
>   『職種1』『人数1』『職種2』『人数2』『職種3』『人数3』

こちらは根本的にテーブル設計が変でないですか?
1レコードにそれぞれ3つの職種と人数が必要な訳を教えてください。

※当初の質問と違う場合は別にスレッド建てるようにしてください。
 また、1スレッドにはなるべく1つ質問をするようにしてください。
 一辺に聞いても身に付きませんよ。
・ツリー全体表示

【8256】Re:基になるテーブルを選択するには
質問  にしもり  - 06/7/14(金) 16:12 -

引用なし
パスワード
   ▼Gin_II さん:
>レコードソースプロパティには、何が表示されていましたか?
何もない

>クエリのデザイン画面と同じものだと思いますが、フィールド欄に必要なフィールドが
>表示されていましたか?
いません。

おっっしゃるとおり開くときのイベントプロシージャをあけたら次のコードがでてきました。

Private Sub Form_Open(Cancel As Integer)
      DoCmd.OpenQuery ("QU_CourseID")
      Forms!F_NewCourse!CourseID = DLookup("Course_ID", "tbl_ALLOCATION")
End Sub


QU_CourseIDは更新クエリで、こうありました。
UPDATE tbl_ALLOCATION SET tbl_ALLOCATION.Course_ID = [tbl_ALLOCATION]![Course_ID]+1
WHERE (((tbl_ALLOCATION.ID)=1));

開くときIDを更新している、という理解でよいですか。
・ツリー全体表示

【8255】Re:基になるテーブルを選択するには
回答  Gin_II  - 06/7/14(金) 15:58 -

引用なし
パスワード
   >どのコントロールをみても「非連結」と表示されています。

レコードソースプロパティには、何が表示されていましたか?
 何もない
 SQL文
 テーブル/クエリ名

>すべてのテーブルが表示されました。

クエリのデザイン画面と同じものだと思いますが、フィールド欄に必要なフィールドが
表示されていましたか?


そうであれば、VBA等でなにかしているのだと思います。
フォームの開く時イベントなどで、[イベントプロシージャ] となっていませんか?
・ツリー全体表示

【8254】Re:基になるテーブルを選択するには
質問  にしもり  - 06/7/14(金) 15:52 -

引用なし
パスワード
   すみません、また質問です。
実はいま他のひとが作ったDBを再利用しようとトレースしています。
残念なことにそのひとはもう近くにいません。

さて、レコードソースでテーブルの選択はできました。
ところが他の人が作ったのをみると、どのコントロールをみても「非連結」と表示されています。そのひとのフォームのレコードソースを見ようと「・・・」を押したら、SQLステートメント:クエリビルダが出て、テーブルの表示が出て、すべてのテーブルが表示されました。これはなんなのでしょうか?
これはわたくしの質問を満たす方法ではないかと思うのですが一体どうすればこのようにできるのでしょうか?
・ツリー全体表示

【8253】Re:SQLでの検索
発言  小僧  - 06/7/14(金) 15:16 -

引用なし
パスワード
   ▼まっきん さん、飛ばない豚さん
こんにちは。

> その検索範囲をfield1〜field10までにすることができません・・・

field1 に「サンプル」が含まれている OR
field2 に「サンプル」が含まれている OR
field3 に「サンプル」が含まれている OR

field10 に「サンプル」が含まれている

という条件でレコードを検索する、という事は

[field1] & [field2] & [field3] … & [field10]
に「サンプル」が含まれている

と同意になりませんか?

ただし、

field1「サン」
field2「プル」

などの場合もありますので、絶対に使わなそうな
区切り文字を入れてあげても良いかもしれません。

[field1] & "@@@" & [field2] & "@@@" & [field3] … Like '%[サンプル]%'
 
・ツリー全体表示

【8252】Re:基になるテーブルを選択するには
お礼  にしもり  - 06/7/14(金) 15:10 -

引用なし
パスワード
   ▼rioさん、小僧さん、Gin_IIさん

ありがとうございます。
フォームのレコードソース、ありました。
しかし、そこでも1つしか選べないのですね。
別のソースを使いたいときはサブフォームを使うなどしなくてはいけないのですね。
やってみます。
・ツリー全体表示

【8251】Re:基になるテーブルを選択するには
発言  小僧  - 06/7/14(金) 14:59 -

引用なし
パスワード
   ▼にしもり さん、rio さん:
こんにちは。

> フォーム中のあるコントロールではテーブルAを、
> あるコントロールではテーブルBを使いたいと思います。

【T_八百屋】
野菜ID  野菜名
1    きゃべつ
2    にんじん
3    レタス
4    かぼちゃ

【T_果物屋】
果物ID 果物名
1    びわ
2    すいか
3    もも
4    めろん

とあった場合、どの野菜とどの果物を並べるかの基準がないと難しいです。
(全ての組み合わせを表示、ならできますが…)

同じID番号の野菜と果物を表示したい場合でしたら
ID番号同士を結びつけたクエリを作成し、
そのクエリからウィザードにてフォームを作成する事になります。


>ガイドをつかわず手入力でフォームをつくる時

フォームのプロパティにある、
レコードソース の右側の「...」をクリックするとウィンドウが表示されます。
・ツリー全体表示

【8250】Re:基になるテーブルを選択するには
回答  Gin_II  - 06/7/14(金) 14:52 -

引用なし
パスワード
   >「フォーム」「新規作成」 をクリックするとガイドが出て「基になるテーブル
>またはクエリの選択」でテーブルを選べますよね。このときテーブルが1つしか
>選択できないのですが、フォーム中のあるコントロールではテーブルAを、
>あるコントロールではテーブルBを使いたいと思います。
>「基になるテーブルまたはクエリの選択」で複数のテーブルを選ぶことはできない
>のですか。

できません。

(1) クエリを作成して複数のテーブルをつなぐ
(2) サブフォームを利用する

とかになります。


>また、ガイドをつかわず手入力でフォームをつくる時、「基になるテーブルまたは
>クエリの選択」に該当するものをポップアップさせるにはどうしたらよいですか?

フォームのレコードソースプロパティを使ってください。
・ツリー全体表示

【8249】Re:クエリーでの番号付加について
回答  小僧  - 06/7/14(金) 14:42 -

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

>上から順に番号を付加させていきたい

残念ながらデータベースに「上」という概念がありません。

MS技術情報より MDB のレコードの並び順について
http://support.microsoft.com/default.aspx?scid=kb;ja;834927

> 項目1  項目2  NO付加
> AAAA  1234    1
> CCCC  2346    2
> BBBB  3456    3
> DDDD  3333    4

でなく、

項目1  項目2  NO付加
AAAA  1234    1
CCCC  2346    3
BBBB  3456    2
DDDD  3333    4

の様に、「項目1」で昇順、「項目2」で昇順で並び替えた結果の順序でしたら
付加する事も可能ですね。
・ツリー全体表示

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