Microsoft Access 掲示板

6,622 件中 6,481 から 6,520 までを表示しています。
3
igaguri 2019/04/20 (土) 21:32:59 32a1e@d14a6

入出庫ID 品名ID  入出庫日  入庫数量 出庫数量
  4    1   2019/04/01  20    
  5    1   2019/04/10  5
  6    1   2019/04/12        6

のデータがサンプルとして入力してあります。

2
igaguri 2019/04/20 (土) 21:27:04 32a1e@d14a6

お世話になります。

https://hatenachips.blog.fc2.com/blog-entry-443.html を参考にして

フィールド 入出庫ID,品名ID,入出庫日,入庫数量,出庫数量,作業者ID がある テーブル F_1 入出庫台帳 を作成し、
クエリ F_1 入出庫台帳 在庫数量計算 を作成しました。
HPを参考に
在庫数量: DSum("入庫数量-出庫数量","F_1 入出庫台帳","入出庫日<#" & [入出庫日] & "# OR 入出庫日=#" & [入出庫日 ] & "# AND 入出庫ID<=" & [ 入出庫ID] & ")")
と記述しましたが、入出庫日を求めるメッセージボックスと入出庫IDを求めるメッセージボックスが表示され、何も入力せず進めると在庫数量に #エラーが表示されます。構文が間違っているのでしょうか?

6
igaguri 2019/04/20 (土) 18:32:21 32a1e@d14a6

ありがとうございます。

5

Accessの機能ではなく、リンク先のページでダウンロードできるライブラリー(DLL)の機能ですね。
リンク先に詳細に使い方が説明されているのでその通りにすればできると思います。

私自身は、PaSoRiを持ってないので、これ以上のアドバイスはできまません。

4
igaguri 2019/04/20 (土) 12:35:06 32a1e@d14a6

ありがとうございます。こういう記事を見たものでできるのかな?と思いご相談させていただきました。

https://tsware.jp/download/accpasori/

1

「クエリを作成して 在庫数量を作成し計算させる」というのがデータベースでの原則的な方法です。

在庫数量フィールドを持たせると、新規追加や更新があるたびに在庫数量フィールドも更新する必要がありますが、更新漏れがあったりして実際の在庫との乖離が発生した場合、面倒になります。

期間が長くなって計算量が多くなり処理が重くなったら、期首在庫フィールドを持たせて、期ごとに現在庫を計算するというように対処するのがいいでしょう。

3

Accessに関する質問というより、Felicaカードの機能に関する質問ですよね。
もちろんAccessに標準でそのような機能はないです。
Felicaカードのソフトの方で対応しているかどうかの質問ですので、ここで聞くよりメーカーに直接問い合わせてください。

バーコードリーダなら、ソフトで読み取ったコードをアクティブなソフトにキー送信する機能があるというのは聞いたことがあります。そのような機能がFelicaカードのソフトにもあるかどうかということになるかと思います。

2

Accessに関する質問というより、Felicaカードの機能に関する質問ですよね。
もちろんAccessに標準でそのような機能はないです。
Felicaカードのソフトの方で対応しているかどうかの質問ですので、ここで聞くよりメーカーに直接問い合わせてください。

1
igaguri 2019/04/19 (金) 22:47:24 32a1e@d14a6

SUICA用に ソニーの PaSoRi RC-S380 はもっています。

7
igaguri 2019/04/19 (金) 18:33:02 32a1e@d14a6

検索できました。ありがとうございます!!

6

上記であっているなら、下記のコードを試してみてください。

Private Sub JANコードで検索する_Click()
    Forms![F_1 在庫品マスター 入庫の登録画面].SetFocus
    Forms![F_1 在庫品マスター 入庫の登録画面]!JANコード.SetFocus
    DoCmd.FindRecord Me.JANコード検索, acEntire
    Docmd.Close acForm, Me.Name
End Sub

FindRecord はアクティブなフォームのフォーカスのあるコントロールが対象ですので、
フォームにSetFocusしてから、コントロールにSetFocusする必要があります。

5

整理すると、下記のようなことでしょうか。

フォーム[F_1 在庫品マスター 入庫の登録画面]
  レコードソース [B_1 在庫品マスター]

このフォーム上のコマンドボタン [検索画面を開く]
これをクリックすると、[F_4_1 JANコード検索画面]
が開く。

フォーム[F_4_1 JANコード検索画面]
  テキストボックス [JANコード検索]
  コマンドボタン [JANコードで検索する]

[JANコード検索] にJANコードを入力する。
あるいは、バーコードリーダから読み込んで入力される。

[JANコードで検索する]をクリックすると、

[F_1 在庫品マスター 入庫の登録画面]で、
入力したJANコードと一致するレコードが検索されて表示される。

11
5流クン 2019/04/19 (金) 17:40:49 73ee0@9ec8c

報告します。
Set ws = Workbooks("auctions_ado.xlsm").Worksheets("sheet1")

Set ws = ThisWorkbook.Worksheets("sheet1")
に変更したところ、エラーが出なくなりました。

7
5流クン 2019/04/19 (金) 17:30:45 73ee0@9ec8c

スクレイピングの結果は、CSVに出力されます。
しかし、そのままだと使い物にならないので、'を’’に変換したり、
外字を変換したり、文字数をカウントして調整したりします。

この段階では、EXCELLにありますが、CSVで保存をするだけなので問題ありません。

4
igaguri 2019/04/19 (金) 17:23:02 32a1e@d14a6

テーブル B_1 在庫品マスター をレコードソースにしているJANコード フォーム F_1 在庫品マスター 入庫の登録画面 の JANコード を検索したいのですが・・・。

8

select 見積書送付NO,ファイル名,見積日付 from T_mitu union select  見積書送付NO,ファイル名,見積日付 from T_mitumori;

このSQLの「見積日付 from」の部分の空白が全角空白になってます。これを半角空白にしてください。
あと、union ではな、union all にしてください。
union だと重複排除の処理が発生しますので重くなります。

select 見積書送付NO, ファイル名, 見積日付 from T_mitu
union all
select 見積書送付NO, ファイル名, 見積日付 from T_mitumori;

あと、添付ファイル型のフィールドがありますが、これはユニオンクエリに含めないようにしてください。

6
hatena 2019/04/19 (金) 16:10:36 修正

その外注したプログラムはスクレイピングの結果をエクセルに出力するものなのですか。
最終的Accessに格納するならcsvで出力してもらったら方が楽だったかも知れませんね。

やっていることの全体像が分からないのでなんとも言えませんが、
処理を分けて実行するようにして、どこで問題が発生しているか切り分けをすることから始めるべきかと思います。

スクレイピング結果をシート上に出力する。
このデータに問題がないか確認する。
その後、そのシートデータをAccessに出力するようにする。

出力は、"INSERT INTO " をExcuteするのではなく、
Recordsetとして開いて、AddNewする方法を試してみるといいかもしれません。

出力先のAccessファイルはローカルにあるのですよね。
ネットワーク上にあって共有しているとかだと、それが影響することもあります。

5
5流クン 2019/04/19 (金) 15:53:35 73ee0@9ec8c

ご指摘の通りです。
実は、ieオブジェクトのスクレイピングは自作したのですが、
重くてどうにもならない状況になり、ほかの言語のプログラムを外注しました。

ところが、この方がデータベースの知識がなかった。。。。。
さすがに、c+やRUBYを覚えるのが嫌なのでというわけです。
適当な値段で、請け負ってくれる方がいたら、作り直したいです。

情報が入手しやすいので、良い面もありましたが
EXCELL VBAも、どういうものかな~と思い始めています。

ただ、全部作り直すのは、大変すぎます。

今回の場合、
Set ws = Workbooks("取得.xlsx").Worksheets("sheet1")

Workbooks("取得.xlsx").Worksheets("sheet1").activate
に戻すと、エラーは多発しなくなりました。

ただ、これはありえないことなので、悩みどころです。

7
island 2019/04/19 (金) 15:44:15 ae49e@a036a

追記です。
2つのテーブルには主キーが設定されていませんでした。あと、複数値を持つフィールドですが説明にあるような多対多のリレーションシップはありません。

6
island 2019/04/19 (金) 15:19:39 ae49e@a036a

返信ありがとうございます。
関係のなさそうなフィールド名を入れてやってみました。
select 見積書送付NO,ファイル名,見積日付 from T_mitu union select  見積書送付NO,ファイル名,見積日付 from T_mitumori;

そうしたら見積日付 from T_mitu の構文エラー 演算子がありませんとでました。書き方が間違っているのでしょうね・・・

T_mitu              T_mitumori
 見積書送付NO オートナンバー型           見積書送付NO オートナンバー型
 ファイル名  短いテキスト     ファイル名   短いテキスト 
 見積日付   日付/時刻型      見積り日付   日付/時刻型
 宛先ID    数値型        会社名     短いテキスト
 現場ID    数値型         氏名     短いテキスト
 工事名    短いテキスト      現場名     短いテキスト
 金額     数値型         工事名     短いテキスト
 NET金額   数値型              金額      数値型
 見積書    添付ファイル      NET金額    数値型
                              見積書     添付ファイル

T_atesaki
  宛先ID   オートナンバー型 ←T_mituの宛先IDとリレーションシップを組んでいる。
  会社名   短いテキスト
 氏名    短いテキスト

T_genba
  現場ID   オートナンバー型 ←T_mituの現場IDとリレーションシップを組んでいる
 宛先ID   数値型 ←T_atesakiの宛先IDとリレーションシップを組んでいる
 現場名   短いテキスト

T_mitumoriは過去のデータのためフィールド名は一緒だけど独立しています。
よろしくお願いします。

4

EXCELLからACCESSに、INSERTでデータを登録するのは、避けた方が良いという事なのでしょうか?

そういうわけではないです。
通常は、問題なくできると思います。
今回はうまくいかないようなので別案を提案してみたまでです。

うまくいかないのは、
adoCn.Execute strSQL 事態に問題があるのではなく、別の部分に原因があるのではと、私は疑ってます。
原因を決めつけないで、もう一度、コード全体を見直してみてはどうでしょうか。

ただ、自分がするなら、最終的にAccessに格納するなら、最初から Access でウェブスクレイピングでして、テーブルに格納します。その方がシンプルだしトラブルもすくないと思います。

3

DoCmd.FindRecord は名前の通り該当するレコードを検索するものです。
フォームのレコードソースに何も設定されていない、つまり、レコードがないということ、ないものを検索することはできません。

フォーム [F_4_1 JANコード検索画面] で、どこから何を検索するつもりなんですか。

2
igaguri 2019/04/19 (金) 12:47:08 32a1e@d14a6

バーコードリーダーを使って B_1 在庫品マスター を印刷したものを読み込むつもりなので、何にも関連付けていません。

3
5流クン 2019/04/19 (金) 11:08:30 73ee0@9ec8c

お伺いしておきたいのですが、
EXCELLファイルと、CSVファイルでは、どちらのファイルが取り込みに適しているのでしょうか?

2
5流クン 2019/04/19 (金) 10:44:52 73ee0@9ec8c

前回の件も含めて、INSERTの処理には、原因不明のエラーが多いです。
EXCELLからACCESSに、INSERTでデータを登録するのは、避けた方が良いという事なのでしょうか?

SQLと、ACCESSは使い始めたばかりで、
初めてのことは、極力避けて通ろうとしがちなのですが、
どうも必要性があるようなので、
DoCmd.TransferSpreadsheetを試してみます。

1

フォーム [F_4_1 JANコード検索画面] のレコードソースのテーブルはなんでしょうか。

1

 adoCn.Execute strSQL がエラーを出さずに実行されているのに、追加に失敗するというのはちょっと考えにくいですね。
うーん、実物をみないと難しいかも。

Accessから、DoCmd.TransferSpreadsheet でインポートしたほうがシンプルなコードになるとおもいますが、それではだめですか。

5
hatena 2019/04/18 (木) 16:59:27 修正 >> 4

テーブルに「複数値を持つフィールド」があるということですね。
複数値を持つフィールドの作成または削除 - Access

とりあえず「複数値を持つフィールド」を含めないで、ユニオンクエリにした場合はどうなりますか。
(「複数値を持つフィールド」はユニオンクエリには含められないです。)

それで、うまくいかない場合は、
サンプルを作成して確認してみたいので、現状のテーブルのフィールド名とそのデータ型,どれが複数値をもつフィールドなのか、主キー設定を提示してもらえますか。

4
island 2019/04/18 (木) 16:30:54 ae49e@a036a

返信ありがとうございます。
ユニオンクエリの作り方を見て下記のようにやってみました。

SELECT T_mitu.見積書送付NO, T_mitu.[ファイル名], T_mitu.見積日付, T_mitu.宛先ID, 宛先マスタ.会社名, 宛先マスタ.氏名, T_mitu.現場ID, 現場.現場名, T_mitu.工事名, T_mitu.金額, T_mitu.NET金額, T_mitu.見積書
FROM (宛先マスタ INNER JOIN 現場 ON 宛先マスタ.宛先ID = 現場.宛先ID) INNER JOIN T_mitu ON (現場.現場ID = T_mitu.現場ID) AND (宛先マスタ.宛先ID = T_mitu.宛先ID);

 union all

SELECT T_mitumori.見積書送付NO, T_mitumori.[ファイル名], T_mitumori.見積日付, T_mitumori.会社名, T_mitumori.氏名, T_mitumori.現場名, T_mitumori.工事名, T_mitumori.金額, T_mitumori.NET金額, T_mitumori.見積書, *
FROM T_mitumori;

実行を押すと複数値があるものは・・・とエラーがでてしまいました。
フィールド数を揃えようと宛先ID・現場IDを消してみてもダメでした。これはクエリからではなくテーブルの結合なのでしょうか。テーブルでやるとテーブル1のT_mitumori とテーブル2のT_mituはフィールド数・フィールド名が違うのでうまくいきません。そういうことではないのでしょうか。

2
ゆか 2019/04/18 (木) 15:30:57 1588e@cae34

よし 様

とても分かりやすく教えてくださってありがとうございます!!
早速試してみましたらばっちりでした(嬉)!!
本当に助かりました(T_T)

1
よし 2019/04/18 (木) 15:16:00 08b1f@139cc

手っ取り早く、と言うか力業なんですが、replace関数でちまちまと置き換えていくのはどうでしょうか。
ヘボン式の変換表は外務省のサイトにありました。
https://www.ezairyu.mofa.go.jp/passport/hebon.html

フォーム上にコマンドボタンを配置して、コマンドボタンのクリック時イベントに以下のコードを貼り付けて下さい。
(Private Sub から End Sub)の間

コマンドボタンが押されたら、[ローマ字名]テキストボックスの値にヘボン式ローマ字表記が入ると思います。

    '文字列の変数を宣言  
    Dim strRome As String

    '[ふりがな]テキストボックスの値を変数に代入
    strRome = Me!ふりがな

    'strConv関数を使って、カタカナに変換
    strRome = StrConv(strRome, vbKatakana)

    'Replace関数を使って、該当する部分を変換
    '拗音を変換
    strRome = Replace(strRome, "キャ", "KYA")
    strRome = Replace(strRome, "キュ", "KYU")
    strRome = Replace(strRome, "キョ", "KYO")
    '※一部省略

    '濁音、半濁音を変換
    strRome = Replace(strRome, "ガ", "GA")
    strRome = Replace(strRome, "ギ", "GI")
    strRome = Replace(strRome, "グ", "GU")
    strRome = Replace(strRome, "ゲ", "GE")
    strRome = Replace(strRome, "ゴ", "GO")
    '※一部省略

    '静音を変換
    strRome = Replace(strRome, "ア", "A")
    strRome = Replace(strRome, "イ", "I")
    strRome = Replace(strRome, "ウ", "U")
    strRome = Replace(strRome, "エ", "E")
    strRome = Replace(strRome, "オ", "O")
    '※一部省略

    '[ローマ字]テキストボックスに値を書き込む
    Me!ローマ字 = strRome

3

検索フォームに入力をしたら2つのテーブルデータから1つの表に表示できればうれしいです

ユニオンクエリを使うことになります。WEB検索すると解説ページが見つかりますのでそれを参考に作成してみてください。

ユニオンクエリの作り方 | Accessの使い方教えます!(初心者向け)

作成できたら、このユニオンクエリをフォームのレコードソースにすればOKです。

2
island 2019/04/18 (木) 14:40:42 ae49e@a036a

返信ありがとうございます。
検索フォームに入力をしたら2つのテーブルデータから1つの表に表示できればうれしいです

1

2つのテーブルの検索結果をどのように表示したいのでしょうか。

現状は2つのフォームに表示されているようですが、それを一つのフォームで表示したいということでしょうか。

その場合は、2つのテーブルデータを、一つの表として表示したいのか、2つの表として並べて表示たいのか、
とか、いろいろ表示の仕方がありますが、どのような表示がご希望でしょうか。

まずは、それを明確にしてください。

8
けんたろー 2019/04/16 (火) 20:52:05 a63a9@c4786

貴重な情報ありがとうございます。

参考にさせていただきます。

10

なぜ、他のモジュールから呼び出せるPublicなのか、
分からないので調べてみます。

それに関しては、深い意味はないです。他から呼び出す必要がないなら、Private で問題ないです。

というか、AdoOpen AddDB を汎用化して、他で使いまわすなら、こちらの方を標準モジュールでPublicにしておいた方がいいですね。

9
5流クン 2019/04/16 (火) 19:43:45 73ee0@9ec8c

なんとなく、でも確実にわかってきました。
If AddDB(Tn, Fn, Fd, adoCn) なんですね。
ありがとうございます。

なぜ、他のモジュールから呼び出せるPublicなのか、
分からないので調べてみます。

どうしても、謎だったら明日、質問させていただきます。

8

私のコードの Sub Proc が Sub Data に相当しますので、参考にしてください。

7
5流クン 2019/04/16 (火) 17:33:10 73ee0@9ec8c

すみません、下の部分が分かりません
下の2つのプロシージャは、Sub Dataから呼び出すことになると思いますが
adoCnは、どう定義して呼び出したらよいのでしょうか?

Sub AdoOpen(FileName As String, adoCn As ADODB.Connection)

Function AddDB(ByVal Tn As String, ByVal Fn As String, ByVal Fd As String, ByRef adoCn As ADODB.Connection) As Boolean

最初の、Function AddDBの中に、Sub Dataのコードを書いて処理すれば
コネクションを1回だけ開いて、連続してアップできますが、
分けた方が、汎用性のあるコードになるので、使えるようにしたいと思います。

ちなみに、

7

別案として、acDialog でダイアログモードで開いたときに、APIで無理やりサイズ変更可能にする方法もあります。
下記でその方法を使ってますのでご参考に。

拡張ズームボックス関数
Shift+F2 または DoCmd.RunCommand acCmdZoomBox で表示されるズームボックスという機能がありますが、開くときにフォントサイズを指定したい、また、ウィンドウのサイズを変更したい。 標準のズームボックスでは既定値のフォントサイズが小さくて見にくい、あるいは、テキスト量が多いとき見にくい、ということで、このような要望がでることがあると思います。 探してみると T'sWareさんの 汎用ZoomBoxクラス というものが...
fc2

纏めると、方法としては、

  1. メインフォーム「ポップアップ」「いいえ」
    子フォーム、孫フォーム「ポップアップ」「はい」

  2. メインフォーム「ポップアップ」「はい」
    子フォーム、孫フォーム「ポップアップ」「はい」、「作業ウィンドウ固定」「はい」

  3. メインフォーム「ポップアップ」「はい」
    子フォーム、孫フォーム ダイアログモード(acDialog)で開く、APIでサイズ変更可能にする

のいずれかになると思います。
それぞれ、動作が異なりますので、動作を確認して、最適な方法を選択してください。