人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Microsoft Access 2003について】
次のようなテーブルと、テキストファイルがあります。

◆名前(テーブル)
苗字
ミドルネーム
名前
(すべてテキスト型)

◆C:\氏名.txt(テキストファイル)
苗字,名前 ←(先頭行はフィールドとして使用したい)
山田,太郎

この「氏名.txt」をテーブル「名前」に取り込みたいので、インポート定義を作成し、
次のような文を書いたのですが、「ミドルネーム」のフィールドに「太郎」が入ってきてしまいます。

DoCmd.TransferText acImportDelim, "インポート定義", "名前", "C:\氏名.txt", True, ""

インポート定義は以下のように設定しました。
【フィールド名】【データ型】
苗字 テキスト型
ミドルネーム テキスト型
名前 テキスト型

本来ならば、「ミドルネーム」のフィールドはnullになり、「苗字」と「名前」フィールドに「山田」「太郎」が
入るようにしたいのですが…。
このような動作をさせるには、どのように修正すればいいでしょうか。
ご存知の方よろしくお願いします。

ちなみに手動でインポートした場合は、目的の動作になりました。

●質問者: db_Magician
●カテゴリ:コンピュータ
✍キーワード:access Microsoft txt 「山田」 インポート
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● らいず
●20ポイント

苗字,ミドルネーム,名前

山田,,太郎

という形でテキストを作成してみたらできませんか?

◎質問者からの返答

回答ありがとうございます。

すみません、テキストの構成を変えずにやりたいのです。


2 ● りくっち
●20ポイント

インポート定義の中にミドルネームが設定されているからではないかと。

ミドルネームの定義を削除して、苗字と名前の定義のみにして実行してみてはどうでしょうか。

◎質問者からの返答

回答ありがとうございます。

ミドルネームが入ってるテキストも存在するため、それはできません。


3 ● らいず
●30ポイント

コメントが付けられないのでこちらで書き込みます。

データ形式を変えられないとするなら、モジュール内にデータを読み込み1行ずつ処理をしてテーブルに入れて行くしかないと思います。

読み込んだデータを確認して、3つ目のデータがない場合は2つ目のデータを名前に登録するようにすればいいと思いますよ。

http://www.tsware.jp/tips/tips_366.htm

◎質問者からの返答

補足ありがとうございます。

つまり「先頭行からフィールドを判別して、そのフィールドにだけデータを入れる」という動作は一発では

できないということですね。

質問文では「苗字」「ミドルネーム」「名前」の3フィールドだけですが、

実際にはもっと沢山のフィールドがあり、場合によって増えたり減ったりするので

教えていただいた方法でも難しそうですが…


4 ● charleston
●20ポイント

↓いかが?

Public Sub test()
 Dim db As Database 'データベース
 Dim rs As Recordset 'レコードセット
 Dim TxtData1 As Variant 'フィールド名
 Dim TxtData2 As Variant 'データ
 Dim TxtFileNum As Long 'ファイル番号
 Dim strData As String '一時データ
 Dim varNum As Long '読込変数
 Dim varMax As Long '読込最大数
 
 TxtFileNum = FreeFile() 'TXT開く
 Open "c:\氏名.txt" For Input As #TxtFileNum
 
 Set db = CurrentDb 'テーブル開く
 Set rs = db.OpenRecordset("名前")
 
 Line Input #TxtFileNum, strData 'フィールド名
 TxtData1 = Split(strData, ",", , vbTextCompare)
 
 Do Until EOF(TxtFileNum) 'TXTデータ
 Line Input #TxtFileNum, strData
 TxtData2 = Split(strData, ",", , vbTextCompare)
 With rs
 .AddNew '対象フィールドにデータを追加
 For varNum = 0 To UBound(TxtData1)
 Select Case TxtData1(varNum)
 Case "苗字": !苗字 = TxtData2(varNum)
 Case "ミドルネーム": !ミドルネーム = TxtData2(varNum)
 Case "名前": !名前 = TxtData2(varNum)
 End Select
 Next
 .Update
 End With
 Loop
 
 rs.Close: Set rs = Nothing '閉じる
 db.Close: Set db = Nothing
 Close #TxtFileNum
 
End Sub

ツール 参照設定 DAO Object Library の追加をお忘れなく

◎質問者からの返答

回答ありがとうございます&わざわざプログラムいただきすみません…

只今時間が取れないので、時間が取れ次第検証してみようと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ