2020年12月30日

Accessについて教えてください。

Accessについて教えてください。

以前、Access2003使用し、新規テーブルにCSVファ...Accessについて教えてください。

以前、Access2003使用し、新規テーブルにCSVファイルをインポートさせたところ、

あるカラムの末尾入力された半角スペースが削除されてしまうとの質問をさせて頂きました。 その際に、VBで読み込むと、半角スペースは消えないと情報を頂き、ソースコードも記載していただきましたが、

カンマ区切りでフィールドに設定するためsplitでカンマ区切りにしていただきました。

しかし、DQでくくられている文字列にカンマが付与されているものも分割されてしまい

カラムがずれてしまいました。

頂いたソースを修正しましたが、VBも初心者のためうまく改修できませんでした。

再度お力をお貸し願えませんでしょうか。



以下が頂いたソースとなります。

---------------------------------------------

Sub SAMPLE_0608()

Dim DB As Database

Dim R1 As Recordset

Dim TDF As TableDef

Dim FLD As Field

Dim TABLE_NAME_1 As String

Dim CUR_FLD As String

Dim IN_FILE As String

Dim In_Data As String

Dim W1 As Long, W2 As Long

Dim V1 As Variant

Dim L1 As String

Dim FLG1 As Long



'このデータベースが置かれているフォルダのフルパスを取得します。

CUR_FLD = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\"))



'読み込むファイルを選択します。

WizHook.Key = 51488399

W1 = WizHook.GetFileName(0, "", "", "", IN_FILE, CUR_FLD, "csvファイル(*.csv)|*.csv", 0, 0, 4, True)

WizHook.Key = 0



DoEvents



If W1 <> 0 Then

MsgBox "ファイルが選択されなかったので、処理を中止します。"

Exit Sub

End If





'ファイルを開きます。

Open IN_FILE For Input As #1

FLG1 = 0



'ファイルを取り込みます。

Set DB = CurrentDb()



Do Until EOF(1)

Line Input #1, In_Data

If FLG1 = 0 Then

TABLE_NAME_1 = "TEST_" & Format(Date, "yyyymmdd")

On Error Resume Next

DoCmd.DeleteObject acTable, TABLE_NAME_1

On Error GoTo 0

Set TDF = DB.CreateTableDef(TABLE_NAME_1)

V1 = Split(In_Data, ",")

W1 = UBound(V1) - 1

ReDim fld_name(W1) As String

For W2 = 0 To W1

fld_name(W2) = StrConv(V1(W2), 4)

Set FLD = TDF.CreateField(fld_name(W2), DB_TEXT)

'空文字列を受け入れるようにするため、1行追加

FLD.AllowZeroLength = True

TDF.Fields.Append FLD

Next W2

DB.TableDefs.Append TDF

Set R1 = DB.OpenRecordset(TABLE_NAME_1)

FLG1 = 1

Else

V1 = Split(In_Data, ",")

R1.AddNew

For W2 = 0 To W1

R1(fld_name(W2)) = V1(W2)

Next W2

R1.Update

End If

Loop



Close #1

R1.Close



End Sub無理です。

Comma-Separated Values ファイルに

ダブルクォーテーション区切りのある物と無いフォーマットが2種類存在するのは

このカンマなどの中文字として使用する上での問題があるからです。

( "," なんて文字、普段は滅多に使わないし(笑))



日本国,東,京,127767944 CRLF

"日本国","東,京","127767944" CRLF

"日本国","東京",127767944 CRLF



まずはダブルクォーテーション囲みのフォーマットのファイルを用意する所から始めましょう。

もし運用上、Access処理の前段階でフォーマット変更が物理不可だったら

どんなデータベースでも一発での自動処理は不可能です。



Webなどの場合は、1行ずつReadLineして

カンマでSplitした後に Ubound関数で配列の最大数を取りますが

Accessだったら素直に一旦、仮テーブルにインポートを掛けて

フィールド数がオーバーしたレコードだけアウトバウンズする方法が現実的かもしれません。



あと、OPEN、GET、PUTは2000年以降に Windows OSにVBscript が標準実装されてからはあまり使用しません。

(Access97の遺産を使う場合は有効ですが)

OpenTextFile して ReadLine した方が圧倒的に簡単です(笑)



Access のVBAの中で書いても良いし

Accessに縛られずメモ帳で書いて拡張子 .vbs とすればWindowsバッチとして動作しますから。

(どっちみち1.2GBを超えるファイルの場合はVBそのもので処理の遅延がありますが)
posted by バッグオークション百貨店スタッフ at 15:18| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

貿易関係の職(商社等)に就きたいのですかどの

貿易関係の職(商社等)に就きたいのですかどのような資格を取ると有利に働きますか? 貿易関係の職(商社等)に就きたいのですかどのような資格を取ると有利に働きますか? 商社で貿易系なら、英語だと思います。



先の方が言われる通関士や貿易実務検定みたいな知識は必要ありません。

それは物流ですから。

そう思います。



英語と、中国語などが特に力になります。

TOEIC900点を目指しましょう。



通関士や貿易実務検定準Aを持っていますが、それは商社ならあまり生かすことができないと思います。生かすことができるなは、メーカーの物流部門、ロジスティクス会社、フォワーダーで発揮できる資格だと思いますよ。





商社なら英語ができないと話しになりません。通関や貿易実務については覚えれば簡単。ただ英語はそのようには行きませんからね。
posted by バッグオークション百貨店スタッフ at 12:33| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。