Access VBA質問箱 IV

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

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


1467 / 2272 ツリー ←次へ | 前へ→

【7027】テキストデータをインポートする時に NT 05/12/28(水) 14:40 質問[未読]
【7028】Re:テキストデータをインポートする時に Gin_II 05/12/28(水) 16:02 回答[未読]
【7029】Re:テキストデータをインポートする時に NT 05/12/28(水) 16:55 質問[未読]
【7030】Re:テキストデータをインポートする時に 小僧 05/12/31(土) 9:42 発言[未読]

【7027】テキストデータをインポートする時に
質問  NT  - 05/12/28(水) 14:40 -

引用なし
パスワード
   初めて投稿させていただきます

客先からテキストファイルでデータを受信しインポート処理をしてAccessに取り込んでいるのですが、インポートする際に先頭行をフィールド名にしております
客先からのデータ例

 品番 品名 日付1 日付2 日付3 日付4......
*日付は連続になっておらず飛び飛びになっています

日付1...は受信の都度変わる為 現在手作業でインポート処理をしているのですがこれをVBA等で自動で取り込めるようにできる方法があれば教えていただきたいのですが

もう少し詳しい説明が必要でしたら明記します
ご教示お願いします

【7028】Re:テキストデータをインポートする時に
回答  Gin_II  - 05/12/28(水) 16:02 -

引用なし
パスワード
   >  品番 品名 日付1 日付2 日付3 日付4......
> *日付は連続になっておらず飛び飛びになっています

この "日付1 日付2 日付3 日付4......"
の部分は、フィールド名ってことですか?

Line Input ステートメントなんかを使えば、たいていのことは
できるのでしょうけど。


> もう少し詳しい説明が必要でしたら明記します

取り込むテーブルは、新規テーブルなんでしょうか?
Windows/Access のバージョンも記載してくださいね。

【7029】Re:テキストデータをインポートする時に
質問  NT  - 05/12/28(水) 16:55 -

引用なし
パスワード
   Gin_II様
さっそくのご返事ありがとうございます

具体的にもう少し記述します

テキストデータ 例
1行目:品番,品名,日付1(例:1/5),日付2(例1/6),日付3(例1/8)...←フィールド名
2行目:A  , ギア, 200    ,300      ,100      
3行目:B  , ボルト,250    ,200      ,50
*客先への納入スケジュールのデータです      

1行目の部分をフィールド名にしたいです
客先のデータは日付1,日付2...以降が都度変わって受信されます
その為取り込む都度、フィール名をそれに併せて更新したいのですが...
取り込むテーブルは新規テーブルです

テーブルを削除した後にTransferTextで新規テーブルとして取り込もうとしたのですがフィールド名が前のデータのままになり(2行目以降は問題なしです)
困っております
*初心者と言う事もありましてさらに苦心しております

Line Input文が良さそうという事でそれについても詳しく教えて頂けると助かります

なおバージョンはWINDOWS XP ,ACCESS2000です

上記のような説明でよろしいでしょうか?
ご指導お願いします

【7030】Re:テキストデータをインポートする時に
発言  小僧  - 05/12/31(土) 9:42 -

引用なし
パスワード
   ▼NT さん:
おはようございます。

色々やり方はあると思われますが、

1) 取り込み前に加工
2) 加工しながらテーブルに取り込み
3) 取り込みした後に加工

のどれでも VBA で可能だと思われます。

以下は 3) の方法のサンプルコードです。

Sub テーブル名を変更()
'要参照DAO x.x Object Library
Dim FName As String     '対象テキストファイルのフルパス
Dim TName As String     '取り込み先のテーブル名
Dim DB As DAO.Database
Dim TDF As DAO.TableDef
Dim F As DAO.Field
Dim i As Long

  FName = "C:\Temp.txt"
  TName = "T_Test"
  
  If DCount("*", "MSysObjects", "Name = '" & TName & "'") > 0 Then _
    DoCmd.DeleteObject acTable, TName
  
  DoCmd.TransferText acImportDelim, "", TName, FName, True
  
  Set DB = CurrentDb
  Set TDF = DB.TableDefs(TName)

  i = 1
    For Each F In TDF.Fields
      If Not (F.Name = "品番" Or F.Name = "品名") Then
        F.Name = "日付" & i
        i = i + 1
      End If
    Next

  Set TDF = Nothing
  Set DB = Nothing
End Sub

コードは提示させて頂きましたが、

>1行目:品番,品名,日付1(例:1/5),日付2(例1/6),日付3(例1/8)...←フィールド名
>2行目:A  , ギア, 200    ,300      ,100      
>3行目:B  , ボルト,250    ,200      ,50

このようなテーブルを持つと後々苦労されると思いますよ。
(Excel ですとこのような値の持ち方で良いのですが…。)

T_出荷
SEQ 品番 日付    値
1  A  2005/01/05 200
2  A  2005/01/06 300
3  A  2005/01/08 100
4  B  2005/01/05 250
5  B  2005/01/06 200
6  B  2005/01/08  50

T_品名マスタ
品番 品名
A  ギア
B  ボルト

上記は一例ですが、テーブルの正規化をする事によって
今後のメンテナンスが楽になると思われます。

1467 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free