Microsoft Access 掲示板

どのPCからでもエラーが出ないようにファイルまでのパスを取得したい

13 コメント
views
4 フォロー

お世話になります。
下記コードのC:¥Users¥中略の部分を変数にして、どのPCからでもこのフォルダを扱えるようにしたいです。

Private Sub btn_注文データ取り込み_Click()

   Dim oldname as String
   Dim newname as String

    DoCmd.TransferText acImportDelim, "my_imp", "注文取込", "C:¥Users¥中略¥注文.csv", False, ""
    DoCmd.OpenQuery "Q_注文取込→注文データ"
    DoCmd.OpenQuery "Q_注文取込削除"
    
    Kill "C:¥Users¥中略¥前回注文.csv"
    oldname = "C:¥Users¥中略¥注文.csv"
    newname = "C:¥Users¥中略¥前回注文.csv"
    Name oldname As newname
    
    MsgBox "取り込みが完了しました。", vbInformation + vbOKOnly, "取込完了"

End Sub
A
作成: 2024/01/19 (金) 17:13:36
通報 ...
1

どのPCからでもということですが、これらのPCは同じローカルネットワーク内にあるということですか。
C:¥Users¥中略 というフォルダーはローカルネットワーク上の特定のPCのフォルダーということですか。

「どのPCからでもこのフォルダを扱えるよう」ということを上記の点も含めていもう少し詳しく説明してもらえますか。

自身のPC内のC:¥Users¥中略フォルダーでそこに注文.csvが存在するなら、そのコードではエラーにはならないと思いますが。

2

ちなみに、C:¥Users¥中略の部分を変数にするコードは下記のようになります。
ただし、質問のコードでエラーがでるならこのコードでもエラーはでます。
やっていることは同じことなので。

Private Sub btn_注文データ取り込み_Click()
    Dim folderName As String
    Dim oldname as String
    Dim newname as String
    folderName = "C:¥Users¥中略"
    DoCmd.TransferText acImportDelim, "my_imp", "注文取込", folderName & "¥注文.csv", False, ""
    DoCmd.OpenQuery "Q_注文取込→注文データ"
    DoCmd.OpenQuery "Q_注文取込削除"
    
    Kill folderName & "¥前回注文.csv"
    oldname = folderName & "¥注文.csv"
    newname = folderName & "¥前回注文.csv"
    Name oldname As newname
    
    MsgBox "取り込みが完了しました。", vbInformation + vbOKOnly, "取込完了"

End Sub
3

現在は自身のPCのデスクトップ上のフォルダの中に注文.csvがあります。
このフォルダを会社のサーバーに移動させます。
Accessの入っている会社のPCならどれからでもこのコードが動くように、PCからそのサーバー上のフォルダまでのパスを取得したいです。

4

ネットワークパス(UNCパス)を指定すればいいでしょう。

Windowsネットワークパスについて – 名古屋のパソコン入替・パソコン設定・キッティング作業業務

完全ガイド - Windows 10でネットワークドライブのパスを見つける方法 - MiniTool

一般的には下記のような書式になります。

\\サーバー名\共有フォルダー名
6

これをどうにか取得して、変数に入れるということですか?

9

はい、そうです。
アクセスの知識というよりサーバー上のファイルを共有する場合の前提知識ですね。

リンクテーブルにする場合もネットワークパス経由でリンクすることになります。

5
りんご 2024/01/23 (火) 12:18:03 935bc@0e907

これってそもそもデータベース分割とリンクテーブルをきちんとやっているの?

7

どういうことでしょうか?初学者なものでデータベース分割、リンクテーブルはよく理解しておりません。

8

マスターテーブルと、取り込んだ注文.csvを加工して作成した注文データテーブルは、メインデータ.accdbに入ってり、テーブルのみのファイルになっています。他の作業用.accdbファイルではそのテーブルをリンクさせています。

10
hatena 2024/01/24 (水) 09:29:38 修正 >> 7

メインデータ.accdbはサーバーに置いてあり、作業用.accdbは各クライアントPCにおいてあるということでしょうか。

どういうことでしょうか?初学者なものでデータベース分割、リンクテーブルはよく理解しておりません。

複数ユーザーでデータを共有する場合は、データベースの分割は必須ですので、しっかり学習しておきましょう。WEB検索すれば解説ページは多数見つかります。

access データベースの分割 - Google 検索

12
りんご 2024/01/24 (水) 13:36:38 935bc@0e907 >> 7

>> 8
じゃあ、各々のPCで取込・加工・登録が終わってから、各々でサーバ保管庫に投げておけばいいんじゃね?

11
すずやん 2024/01/24 (水) 10:30:17

ちょっとどの程度まで理解しておられるか分かりませんので、余談になるかもしれません。

会社のサーバー(ファイルサーバーか共有フォルダ、のはず)に置き、ということなので、同じネットワーク上にあるPCからでしたら、共有フォルダのアドレスは変わらないはずです。

例えば「10.0.0.1」というIPアドレスにある「共有CSVフォルダ」という共有フォルダの場合、どのPCからアクセスしてもアドレスは「\10.0.0.1\共有CSVフォルダ」ですよね。
※探し方は参考リンクを書いて頂いてますのでそちらを参照してください

ですの以下のように設定すればいいのではないでしょうか?

DoCmd.TransferText acImportDelim, "my_imp", "注文取込", "\10.0.0.1\共有CSVフォルダ\中略\注文.csv", False, ""

または

folderName = "\10.0.0.1\共有CSVフォルダ"

ただしAccessのプログラムをネットワークフォルダなどに置き、同時に複数人が使用すると不具合が発生します。例えばプログラムを使って同時に取り込み作業を行った場合、データベースに同時に書き込みが発生してしまい、壊れやすくなります。

参考:https://sys-daddy.com/multi-user-setting-of-access/

そこで「データベース分割」などが必要になってきます。
(でも書き込みを見ると、ある程度できているようですね)

13
すずやん 2024/01/24 (水) 15:45:31 >> 11

すみません、追記させてください。
「\10.0.0.1\共有CSVフォルダ」が正常に表示されませんでした。
コードブロックとして再度記載します。

DoCmd.TransferText acImportDelim, "my_imp", "注文取込", "¥¥10.0.0.1¥共有CSVフォルダ¥注文.csv", False, ""

または

folderName = "¥¥10.0.0.1¥共有CSVフォルダ"