Access VBA質問箱 IV

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

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


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

【3369】コードによるテーブルの更新
質問  やま  - 04/8/30(月) 20:49 -

引用なし
パスワード
   教えてください。。

以下ようなテーブルの配列番号を持つ項目を
更新する場合、効率のよいコードの書き
方はありませんか?
(全ての項目名を指定してコードを書くと
大変なので・・・。)
更新する値は、全て同じ値です。
宜しくお願いします。

テーブルA
項目名1
項目名2
項目名3
項目名4
項目名5
項目名6


項目名100
・ツリー全体表示

【3368】Re:条件クエリの作成について
お礼  Tomato  - 04/8/30(月) 19:16 -

引用なし
パスワード
   教えて頂いたとおり試してみたところ、欲しい値を得ることができました。
"FROM TableA as TA WHERE (TableA.ID=TA.ID)"は特に必要はないのですね。
勉強になりました。どうもありがとうございました。
・ツリー全体表示

【3367】Re:条件クエリの作成について
回答  クロ  - 04/8/30(月) 18:47 -

引用なし
パスワード
   SELECT TableA.ID, Min(TableA.日付) AS 日付の最小, TableA.Item, TableA.Item2
FROM QueryB LEFT JOIN TableA ON QueryB.ID = TableA.ID
GROUP BY TableA.ID, TableA.Item, TableA.Item2;
でもいいんでは?

※Dateは日付としてあります。
・ツリー全体表示

【3366】Re:条件クエリの作成について
回答  こもれび  - 04/8/30(月) 18:27 -

引用なし
パスワード
   こもれびです

SELECT TableA.*
FROM TableA, QueryB
WHERE (((TableA.ID)=[QueryB].[ID]) AND ((TableA.Date)=(SELECT Max(Date)
    FROM TableA WHERE (TableA.Date<QueryB.Date))));

ではいかが?
・ツリー全体表示

【3365】条件クエリの作成について
質問  Tomato  - 04/8/30(月) 17:30 -

引用なし
パスワード
   テーブル(TableA)とクエリ(QueryB)より新規クエリを作成したいです。

テーブル、クエリの構成は以下のようになっています。
 TableA --- ID(重複あり), Date, Item, Item2
 QueryB --- ID(単一), Date, Item3

作成したいクエリは、TableAから
1.QueryBと同じID
2.TableAのDateがQueryBのDateよりも古い(小さい)ものの中で一番新しい(大きい)
という条件です。

ひとつのクエリでこれを満たすクエリを作成することは可能なのでしょうか?

SELECT TableA.*
FROM TableA, QueryB
WHERE ((TableA.ID=QueryB.ID) AND (TableA.Date)=(SELECT Max(Date)
    FROM TableA as TA WHERE (TableA.ID=TA.ID)));

上のSQLでは条件2のQueryBのDateよりも古い(小さい)が当てはまりません。

何かいい方法がありましたら教えてください。お願いします。
・ツリー全体表示

【3364】Re:フォーム上で別のテーブルのデータを表...
お礼  お初  - 04/8/29(日) 11:11 -

引用なし
パスワード
   ▼クロ さん:
クロさんへ
ご丁寧にありがとうございます。
大変、参考になり勉強になりました。
これからも日々勉強していきます。
・ツリー全体表示

【3363】Re:フォーム上で別のテーブルのデータを表...
回答  クロ  - 04/8/29(日) 5:09 -

引用なし
パスワード
   >今までのは商品名を入力・変更しない限りは単価も変更にならない状態ですが、
>商品名はそのまま(一切手をつけず)で入荷済みチェック(1,2)のみを変更すると単価が変わるとしたいのですが、可能でしょうか?

入力済みチェックの更新後処理イベントに同様のIf文の処理を書かれればいいのでは?
このときタブコントロール(入力順)が「商品名」→「入荷チェック」でなければなりません。
「商品名」の空欄チェック/レコードの有無チェックが必要なら...

If Len(Nz(Me.商品名,"")) = 0 Then
 MsgBox "商品名が入力されていません"
 Me.商品名.SetFocus
ElseIf DCount("*","単価テーブル","[商品名]='" & Me.商品名 &"'") = 0 Then
 MsgBox "入力された商品名はありません"
 Me.商品名.SetFocus
Else
 If Me.入荷チェック = 1 Then
  Me.単価 = Dlookup("[単価1]","単価テーブル","[商品名] ='" & Me.商品名 & "'")
 Else
  Me.単価 = Dlookup("[単価2]","単価テーブル","[商品名] ='" & Me.商品名 & "'")
 End If
End If
・ツリー全体表示

【3362】Re:追伸
お礼  古池  - 04/8/28(土) 23:54 -

引用なし
パスワード
   idはふってなかったんですが^_^;、
難しいようなので、idをふる方向でもう一度作ってみます。

また分からないことがあったらお願いしますね。

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

【3361】追伸
発言  こもれび  - 04/8/28(土) 23:12 -

引用なし
パスワード
   こもれびです

For 〜 next のループのなかでユニオンクエリの作成
エクスポートおよびメッセージの出力を行います。
・ツリー全体表示

【3360】Re:パススルークエリ
回答  こもれび  - 04/8/28(土) 23:02 -

引用なし
パスワード
   こもれびです

どうもクエリーが二重になっているような気がします。
これをお試しください。

  Dim ws As DAO.Workspace
  Dim db As DAO.Database
  Dim rs As DAO.Recordset

  Set ws = DBEngine.Workspaces(0)

  Set db = ws.OpenDatabase("ORACLE", False, False, _
      "ODBC;Driver={Oracle in OraHome92};" & _
      "SERVER=(server);DATABASE=ORACLE;" & _
      "UID=aaa;PWD=aaa;DSN=aaa")

  Set rs = db.OpenRecordset("select * from a_tbl;", _
      dbOpenDynaset, dbSeeChanges)

  Set Me.RecordSource = rs
・ツリー全体表示

【3359】Re:エクスポートの方法
回答  こもれび  - 04/8/28(土) 22:30 -

引用なし
パスワード
   こもれびです

>古池でお願いします。^_^;

了解いたしました 〆(..)メモメモ

>出来れば100件ずつ抽出する書き方も教えていただきたいのですが…。

分割するテーブルのレコード(データ)に1〜1000の番号を示す数字
(例えばid)が付いていることが条件でサンプルコードを書いておきます。
(この数字が付いていないと一筋縄ではいかなくなります)

○ betweenを使用した分割
-----------------------------------------------------
  For i = 0 To 9
   SQL01 = "SELECT T_社員.* FROM T_社員 " _
      & "WHERE (((T_社員.id) " _
      & "Between " & i * 100 + 1 & " And " & i * 100 + 100 & "));"
  Next i
-----------------------------------------------------

上のSQLステートメントにUNIONで結合するテーブルのSQLを記述すれば、
用意すべきユニオンクエリーが出来上がります。
・ツリー全体表示

【3358】Re:エクスポートの方法
発言  古池  - 04/8/28(土) 17:33 -

引用なし
パスワード
   え〜っと…ありがとうございます。
古池でお願いします。^_^;

ユニオンクエリというのはなんとなく分かりました。

出来れば100件ずつ抽出する書き方も教えていただきたいのですが…。
・ツリー全体表示

【3357】Re:パススルークエリ
発言  ミホ  - 04/8/28(土) 17:17 -

引用なし
パスワード
   ミホです。

エラーメッセージですが、出力されずに異常終了してしまいます。
どうやって確認したらいいのでしょうか?
現在は on error goto err_1で行っているだけです。
なんだか、超初心者な回答及び質問で申し訳ありません。


▼こもれび さん:
>エラーメッセージはどのような内容でしょうか?
>
>オブジェクトなのか… 構文なのか…
・ツリー全体表示

【3356】Re:パススルークエリ
発言  こもれび  - 04/8/28(土) 17:07 -

引用なし
パスワード
   エラーメッセージはどのような内容でしょうか?

オブジェクトなのか… 構文なのか…
・ツリー全体表示

【3355】Re:エクスポートの方法
発言  こもれび  - 04/8/28(土) 17:04 -

引用なし
パスワード
   こもれびです

「古池」様、「小池」様… どちらが正しいのでしょうか?? (・・;)

○ ユニオンクエリについて

野菜テーブル
id  商品名   価格
----------------------
1  じゃがいも  80
2  とまと    100
3  キャベツ   150
4  にんじん   120
5  かぼちゃ   150

果物テーブル
id  商品名   価格
----------------------
1  すいか   500
2  メロン   350
3  ぶどう   250
4   もも   120
5  パパイヤ   200

通常は上のような関連のあるテーブルもしくはクエリ同士をくっつける際に
用い、上の例ではクエリの結果として次のようになります。

id  商品名   価格
----------------------
1  じゃがいも  80
2  とまと    100
3  キャベツ   150
4  にんじん   120
5  かぼちゃ   150
1  すいか   500
2  メロン   350
3  ぶどう   250
4   もも   120
5  パパイヤ   200

SQLステートメントは次のようになります。

SELECT * FROM T_野菜 UNION ALL SELECT * FROM T_果物;

ユニオンクエリでは同じフィールド名である必要は無く、「フィールド数が同じ」
であればよく、次のテーブルを先の野菜テーブルと結合することも出来ます。

県名テーブル
id  県名  人口
---------------------
1  青森  1492669
2  秋田  1190007
3  岩手  1416421
4  山形  1236978
5  宮城  2348465
6  福島  2128309

結合すると、次のようになります。
----------------------
1  じゃがいも  80
2  とまと    100
3  キャベツ   150
4  にんじん   120
5  かぼちゃ   150
1  青森  1492669
2  秋田  1190007
3  岩手  1416421
4  山形  1236978
5  宮城  2348465
6  福島  2128309

結合するテーブルのフィールド数が違うときには、ダミーのフィールド
を設けてフィールド数を同一にします。

ACCESSのデザインビューでは作成することが出来ず、SQLを直接書き込む必要
があります。(しっかりアイコンだけは他と違うものが出てくる…)

こんな説明でいかがでしょうか
・ツリー全体表示

【3354】Re:パススルークエリ
発言  ミホ  - 04/8/28(土) 16:42 -

引用なし
パスワード
   こもれびさん、レスありがとうございます。
まずご指摘の点ですが、
参照設定は、Microsoft DAO 3.6 Object Library
を指定しています。
また、セミコロンを追加して行いましたが、
同現象でした。
・ツリー全体表示

【3353】Re:パススルークエリ
発言  こもれび  - 04/8/28(土) 16:21 -

引用なし
パスワード
   DAOをお使いですが、「参照設定」は大丈夫でしょうか?

「Microsoft DAO 3.x Object Library」

が参照できる設定になっているかどうかご確認ください。

気がついたこと…

>mysql = "select * from a_tbl"

SQLステートメントの最後には「;」(セミコロン)を付けましょう。
・ツリー全体表示

【3352】Re:フォーム上で別のテーブルのデータを表...
質問  お初  - 04/8/28(土) 15:16 -

引用なし
パスワード
   ▼クロ さん:
クロさんへ
できました(~o~)!ありがとうございます!!
助かりました。

>※これから入力するものとして考えてました。既に入力されているものは
> 更新クエリでやっちゃえばどうでしょうか?
>
おっしゃるとおり、これから入力するものをご質問しておりました。
私の質問が悪かったようです。すみません。

あつかましいようですが、今までの質問に関連した内容を追加で
ご質問させていただきます。

今までのは商品名を入力・変更しない限りは単価も変更にならない状態ですが、
商品名はそのまま(一切手をつけず)で入荷済みチェック(1,2)のみを変更すると単価が変わるとしたいのですが、可能でしょうか?

すみませんが、ご教授よろしくお願い致します。
・ツリー全体表示

【3351】パススルークエリ
質問  ミホ  - 04/8/28(土) 14:49 -

引用なし
パスワード
   OS:W2k
ACCESS 2000

初めまして、ACCESSを初めて1ヶ月足らずの初心者ですが、
パスクエリーについて教えてください。
過去ログを探してみたのですが、該当するのがなかったようでして・・・
現在以下のようにコードを書いているのですが、
>--------------------------
dim mysql as string
dim rs as recordset
dim db as database
dim qd as querydef

mysql = "select * from a_tbl"
set db = currentdb
set qd = db.qerydef![q_pass]
qd.connect = "odbc;dsn=aaa;uid=aaa;pwd=aaa"
qd.returnrecords = true
qd.odbctimeout = 3000
qd.sql = mysql
set rs = qd.openrecordset(dbopensnapshot) <- ここでエラー

となり、データを取得できずにいます。
何がおかしいのでしょうか?
ちなみに、作成されたクエリ(q_pass)をクエリより動かすと、
正常にデータを取得してきます。
すみませんが、よろしくお願いいたします。
接続はORACLE9iです。またODBCドライバーはORACLEを
使用しております。
・ツリー全体表示

【3350】Re:エクスポートの方法
発言  小池  - 04/8/28(土) 10:04 -

引用なし
パスワード
   ▼こもれび さん:
>Bのデータを100件ずつ抽出してAのデータとユニオンクエリーをつくります。
>1から10のファイルエクスポートの繰り返しの最後にメッセージボックス
>を表示するというのはいかがでしょう。

すいません。
ユニオンクエリーというのがわかりません(・・;)
もうすこし詳しく書き方を教えてくださいませんでしょうか?
・ツリー全体表示

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