txtファイルをDoCmd.TransferTextでインポートする事は出来ているのですが、データが15~30万件ほどありかなり時間が掛かります。SQL文でのレコード全件DELETEがかなり高速だった為、インポートもSQLの方が処理が早いのでは?と思い色々サンプルをさがし、下記のようにしてみたのですが、SQL文をうまく書けず、作動しません。
間違い部分を指摘していただけませんでしょうか?
DoCmd.RunSQL "INSERT INTO Add_house_TEMP ( ハウス,カスト,SG1ステータス )"& _
"SELECT [add_house#txt].F1,[add_house#txt].F2,add_house#txt].F3"& _
"FROM add_house#txt IN "\\sv999999\_営業部\個人\作業場\20071115" "Text;HDR=NO;"
No.2ベストアンサー
- 回答日時:
全件デリートが早いからといって、読み込みが早いと判断できないと思います。
質問の趣旨から外れていると思いますが、ちょっと実験してみました。
参考になれば幸いです。
Private Sub コマンド0_Click()
Dim sTime As Date
Dim eTime As Date
Dim strFileName As String
strFileName = "C:\test.txt"
sTime = Now()
DoCmd.TransferText acImportDelim, , "T_Temp", strFileName, False
eTime = Now()
Debug.Print (eTime - sTime) * 24 * 60 * 60
End Sub
Private Sub コマンド1_Click()
Dim sTime As Date
Dim eTime As Date
Dim strFileName As String
Dim strSQL As String
strSQL = "SELECT * INTO T_TEMP FROM T_TEMP1"
strFileName = "C:\test.txt"
sTime = Now()
DoCmd.TransferText acLinkDelim, , "T_Temp1", strFileName, False
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
eTime = Now()
Debug.Print (eTime - sTime) * 24 * 60 * 60
End Sub
Private Sub コマンド2_Click()
Dim sTime As Date
Dim eTime As Date
Dim strFileName As String
Dim strSQL As String
Dim CON As New ADODB.Connection
Set CON = CurrentProject.Connection
strSQL = "SELECT * INTO T_TEMP FROM T_TEMP1"
strFileName = "C:\test.txt"
sTime = Now()
DoCmd.TransferText acLinkDelim, , "T_Temp1", strFileName, False
CON.Execute strSQL
eTime = Now()
Debug.Print (eTime - sTime) * 24 * 60 * 60
End Sub
フィールド数188、18万件(355MB)のテキストファイルを読み込んでみました。
(毎回作ったテーブルを削除し、最適化をしてから行いました。)
5回ずつテストしてみましたが、体感できる差はなさそうです。
tranfertext と runsql は私のコンピュータでは65秒くらい、
ADOを使った場合は67秒くらいでした。
どちらかというと、物理的に読むHDと書くHDを分けるのに効果が
ありそうな気がしますが、残念ながら実験できる環境がありません。
No.3
- 回答日時:
#1です。
>社の基幹システムより抽出してもらったデータを
普通は基幹システムからEUC用に渡すデータは、CSVファイルが多いように思いますが。
「社の基幹システムより抽出してもらったデータ」のファイル形式は何なのでしょうか。「.mdb」ですか。
標題から「csvファイルをインポートする方法」とあるから、渡されたとき、CSVファイルを加工する段階は許されているのでしょう。
>Dailyで処理する必要があり
私の言ったことは、デイリー作業だからできない理由にはならない。
>基幹システムへのアクセス権限無しの為
こういうのは常態であることは知ってます。しかし現にmdbには質問者が加工してる(許されている)ではないですか。
まあ質問者はそう素人では無いようなので、#2のご回答も出て、判断はできると思いますのでよろしく。
最近は内蔵メモリとか、HD入出力速度など大幅に多量化・高速化していて、各方法の差は思ったより少ないのかもしれません。
私はどちらかというと、CSV->CSvの方が判りやすいと思ったのです。
>普通は基幹システムからEUC用に渡すデータは、CSVファイルが多いように思いますが。
すみませんCSVファイルです。
>私の言ったことは、デイリー作業だからできない理由にはならない。
出来ないといったのではなく、数分でも短縮したいが為に他の方法も試したいのでした。SQL文にて試してみたところ、実行時間にほとんど差がありませんでした。
>こういうのは常態であることは知ってます。しかし現にmdbには質問者が加工してる(許されている)ではないですか。
基幹システム⇒関東圏内の顧客より料金引き落としする課金システム(ITC:大規模CATV事業者の使っている課金システム)
MDB⇒各エリア局での取次店(代理店)への支払システム
おかげさまで、SQL文によるインポートの試験が出来ました。
社のPCも機能面で??な部分がかなりあるので、PCを替えるという考えも有りかと思いました。
アドバイスありがとうございました。今後ともよろしくお願いいたします。
No.1
- 回答日時:
正面からの答えでは無いが、
CSVファイルはシーケンシャルファイルで、どんなアクセスシステムで扱うにしても、30万件のデータを1度は読まなければならず、その時間は覚悟しなければならない。
そこでSQLといった複雑高等な仕組みを使わず、VB(A)などでCSVファイルを読み、IF文などで判別して、抜き出したCSVファイルを別ファイルで書き出すのが良いのでは無いでしょうか。1回30万件読み、最大30万件書き出し時間で終ります。
SQLは便利ですがSQL馬鹿(何でもSQL)にならないほうが良い。
上記のシーケンシャルファイルを扱うコードはWEBで多数見つかります。
http://www.k1simplify.com/vba/tipsleaf/leaf291.h …
など。
imogasi様
返信ありがとうございます。
上記の質問言葉が足りていませんでした。
業務上Dailyで処理する必要があり、社の基幹システムより抽出してもらったデータをACCESSに取り込んでいます。(基幹システムへのアクセス権限無しの為)抽出に45分ほど、インポートに10分ほどインポートされたデータの体裁を整えるのに15分ほど掛かってしまい、いい方法はないのか?と探っていたのでした。もちろん一番早くなければSQLは使いません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(プログラミング・Web制作) テキストデータ変換(プログラミング、linux、python) 8 2023/08/08 16:39
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Visual Basic(VBA) エクセルVBAでメールの自動作成の モジュールを作ったのですが、txtファイルから読み込んだ本文が文 2 2022/07/20 15:01
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
「RunSQL」と「Execute」の違い
Access(アクセス)
-
AccessでSQL結果を直接csvに書き出すには?
Word(ワード)
-
【Access】クエリで抽出したデータをCSV形式でエクスポートできますか?
Access(アクセス)
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
6
access vbaにてテンポラリーテーブルが作りたいです。
Access(アクセス)
-
7
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
8
Access サブフォームでの選択行の取得
その他(データベース)
-
9
ダブルコーテーション付きでCSV出力
Visual Basic(VBA)
-
10
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
11
ACCESS VBAでインポート定義の場所
Access(アクセス)
-
12
ACCESSで一括処理する方法
その他(データベース)
-
13
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
14
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
15
Access終了時にマクロまたはVBAの実行したい
その他(Microsoft Office)
-
16
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
17
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
18
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
19
AccessのDAO.ExecuteとDoCmd.RunSqlの違いについて
その他(データベース)
-
20
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
多数のサブディレクトリ内のフ...
-
VBAでワークシートを引数として...
-
拡張子を元に戻す
-
テキストファイルのファイル名...
-
.txtではなく.logの方が良いの...
-
MATLABで行列を配列に格納する方法
-
バッチファイルからVBAに引数を...
-
テキストファイルで提出とは?
-
javaで大量のファイルを読み込...
-
Windowsのバッチファイルを利用...
-
【Excel】 VBAを使って毎回名前...
-
forfilesで検索したファイルを...
-
フォルダを自動作成・移動を複...
-
accessでSQL文を使ってcsvファ...
-
ファイルの最後に文字列挿入
-
COPYコマンドで結合すると余計...
-
OpenCVの正解生成のcreatesamples
-
ファイル名の一部をbatで変更し...
-
EXCEl/VBAで拡張子なしのファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
バッチファイル 複数ファイル...
-
テキストファイルで提出とは?
-
バッチファイルで文字列削除に...
-
Windowsのバッチファイルを利用...
-
テキストファイルのファイル名...
-
ファイルの最後に文字列挿入
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
MATLABで行列を配列に格納する方法
-
テキストファイルのタブをカン...
-
renameコマンドについて
-
【Excel】 VBAを使って毎回名前...
おすすめ情報