質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

294閲覧

access2021 テーブルから複数のフィールド値を取得しローカルに複数のレコードを出力したい

syuu07

総合スコア15

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2024/10/17 08:09

実現したいこと

テーブルから値を取り出し、変数に入れ条件に合うデータをSQLServerから取り出さそうとしたのですが、
テーブルの値が複数ある場合全てのレコードを取り出すことができません。

条件に合う複数のデータを取り出し、別の条件に組み込めたいです。

発生している問題・分からないこと

テーブルとして見積、見積作業、明細マスターというのがあり見積の主キーである「見積番号」を見積作業に記入することで「親子データ」の関係にしております。
また明細マスターの主キーである「明細ID」は見積作業テーブルの中にもあり、該当の明細マスターのデータを取り出すことをしています。

st3 = Me.[見積番号]
st4 = DLookup("明細ID", "見積作業", "見積番号 = " & st3 & "")

'サーバーのデータをローカルに出力する
st = dbsCls.CopyLocal_fromSvr("明細マスター", "select * from 明細マスター where 明細ID like '" & st4 & "'", False, 0)

見積にある見積番号と、見積作業にある見積番号を一致させ、
さらに見積作業にある明細IDと、明細マスターにある明細IDを一致させSQLServerにある明細マスターの値をローカルへ取り出さそうとしました。
しかし、dlookupの場合見積作業テーブルに同じ見積番号がある場合明細マスターの値が一つしか結果が返ってこないです。

最終的には複数の明細IDを取り出し変数に組み込めるようにすることで、明細マスターのレコードを一度に複数ローカルへと出力したいです。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Dim st As Boolean
Dim st3 As String

st3 = Me.[明細ID]
st = dbsCls.CopyLocal_fromSvr("明細マスター", "select * from 明細マスター where 明細ID like '" & st3 & "'", False, 0)

ローカルにデータがない状況で作成しているため、フォームにある明細IDと同じ明細IDを出力するという処理をしても明細マスターに値がないため結果が返ってこないです。

明細マスターのデータをすべてローカルへ保存することはできますが、量が多く処理に膨大な時間がかかってしまいます。

補足

・データはSQLサーバーとリンクしており別のツールを使いaccessを起動しています。
その関係上、ローカルにテーブルを基本入れず毎度欲しいデータのみサーバーから出力している形になります。
フォームを開いた段階で、該当の見積番号のレコードが出力されます。ただしマスターだけは、見積番号がないため出力されない状況です。

・見積と見積作業は「親子データ」の関係のため、「見積リスト」というフォームに見積作業のデータを入れています。

テーブル
メインフォーム
名前 見積
フィールド名(データ型) 見積番号(int)

サブフォーム
名前 見積作業
フィールド名(データ型) 見積作業ID(int),見積番号(int),明細ID(string)

明細マスター
フィールド名(データ型) 明細ID(string),作業名(String)

(例)
見積 見積番号 1

見積作業 見積作業ID 100,見積番号 1,明細ID A1
見積作業ID 200,見積番号 1,明細ID B1

明細マスター 明細ID A1,作業名 サンプル1
明細ID B1,作業名 サンプル2

明細マスターにある明細ID A1と明細ID B1をSQL Serverからローカルへと取り出したい。

・windows11 home、64ビット
・Microsoft access2021
テーブルはSQL serverとリンクしておりdbsheetclientという別のツールを使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

テーブルはSQL serverとリンクしておりdbsheetclientという別のツールを使っています。

st = dbsCls.CopyLocal_fromSvr("明細マスター", "select * from 明細マスター where 明細ID like '" & st3 & "'", False, 0)

本質的には Access ではなく dbsheetclient の利用方法に関するご質問であり、サードパーティー製の未知の API 関数の問題についてまともな回答を出来る人など恐らくいないのではないでしょうか(開発したベンダーの人以外は)。

名前 見積作業
フィールド名(データ型) 見積作業ID(int),見積番号(int),明細ID(string)

明細マスター
フィールド名(データ型) 明細ID(string),作業名(String)

見積にある見積番号と、見積作業にある見積番号を一致させ、
さらに見積作業にある明細IDと、明細マスターにある明細IDを一致させ
SQLServerにある明細マスターの値をローカルへ取り出さそうとしました。

例えばCopyLocal_fromSvrなるAPI関数の第2引数に渡すのが「SQL Server 側で実行させるSQL文(T-SQL)」であり、かつ副問い合わせも有効であると仮定するのであれば、恐らく次のような形にすれば可能かも知れませんが。

vba

1If IsNumeric(Me![見積番号].Value) = False Then 2 Exit Sub 3End If 4 5Dim strSQL As String 6Dim strSubSQL As String 7 8strSubSQL = "SELECT [見積作業].[明細ID]" & _ 9 " FROM [見積作業]" & _ 10 " WHERE [見積作業].[見積番号]=" & CLng(Me![見積番号].Value) & _ 11 " GROUP BY [見積作業].[明細ID]" 12 13strSQL = "SELECT [明細マスター].[明細ID], [明細マスター].[作業名]" & _ 14 " FROM [明細マスター]" & _ 15 " INNER JOIN (" & strSubSQL & ") AS [見積作業抽出結果]" & _ 16 " ON [明細マスター].[明細ID]=[見積作業抽出結果].[明細ID];" 17 18Debug.Print strSQL 19 20st = dbsCls.CopyLocal_fromSvr("明細マスター", strSQL, False, 0)

投稿2024/10/18 06:01

sk.exe

総合スコア957

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syuu07

2024/10/23 02:10

dbsheetclientについては対象外でしたね.....。 頂いたコードは今後の参考にさせて頂きます。 ご回答ありがとうございました。
guest

0

取得するSQLでの条件を見積作業経由により取得するようしてみて下さい。

SQL

1select * from 明細マスター 2where 明細ID in ( 3 select 明細ID from 見積作業 where 見積番号=[画面の見積番号] 4 )

投稿2024/10/18 05:12

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syuu07

2024/10/23 02:10

dbsheetclientについては対象外のようですのでこの質問は閉じさせていただきます。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問