人気マンガがだれでも無料♪電子コミック読み放題!!

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;"

このQ&Aに関連する最新のQ&A

A 回答 (3件)

全件デリートが早いからといって、読み込みが早いと判断できないと思います。


質問の趣旨から外れていると思いますが、ちょっと実験してみました。
参考になれば幸いです。
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を分けるのに効果が
ありそうな気がしますが、残念ながら実験できる環境がありません。
    • good
    • 0
この回答へのお礼

おかげさまで色々と試験する事ができました。
ありがとうございました。

お礼日時:2007/11/22 17:01

#1です。


>社の基幹システムより抽出してもらったデータを
普通は基幹システムからEUC用に渡すデータは、CSVファイルが多いように思いますが。
「社の基幹システムより抽出してもらったデータ」のファイル形式は何なのでしょうか。「.mdb」ですか。
標題から「csvファイルをインポートする方法」とあるから、渡されたとき、CSVファイルを加工する段階は許されているのでしょう。
>Dailyで処理する必要があり
私の言ったことは、デイリー作業だからできない理由にはならない。
>基幹システムへのアクセス権限無しの為
こういうのは常態であることは知ってます。しかし現にmdbには質問者が加工してる(許されている)ではないですか。
まあ質問者はそう素人では無いようなので、#2のご回答も出て、判断はできると思いますのでよろしく。
最近は内蔵メモリとか、HD入出力速度など大幅に多量化・高速化していて、各方法の差は思ったより少ないのかもしれません。
私はどちらかというと、CSV->CSvの方が判りやすいと思ったのです。
    • good
    • 0
この回答へのお礼

>普通は基幹システムからEUC用に渡すデータは、CSVファイルが多いように思いますが。
すみませんCSVファイルです。
>私の言ったことは、デイリー作業だからできない理由にはならない。
出来ないといったのではなく、数分でも短縮したいが為に他の方法も試したいのでした。SQL文にて試してみたところ、実行時間にほとんど差がありませんでした。
>こういうのは常態であることは知ってます。しかし現にmdbには質問者が加工してる(許されている)ではないですか。
基幹システム⇒関東圏内の顧客より料金引き落としする課金システム(ITC:大規模CATV事業者の使っている課金システム)
MDB⇒各エリア局での取次店(代理店)への支払システム

おかげさまで、SQL文によるインポートの試験が出来ました。
社のPCも機能面で??な部分がかなりあるので、PCを替えるという考えも有りかと思いました。
アドバイスありがとうございました。今後ともよろしくお願いいたします。

お礼日時:2007/11/17 11:01

正面からの答えでは無いが、


CSVファイルはシーケンシャルファイルで、どんなアクセスシステムで扱うにしても、30万件のデータを1度は読まなければならず、その時間は覚悟しなければならない。
そこでSQLといった複雑高等な仕組みを使わず、VB(A)などでCSVファイルを読み、IF文などで判別して、抜き出したCSVファイルを別ファイルで書き出すのが良いのでは無いでしょうか。1回30万件読み、最大30万件書き出し時間で終ります。
SQLは便利ですがSQL馬鹿(何でもSQL)にならないほうが良い。
上記のシーケンシャルファイルを扱うコードはWEBで多数見つかります。
http://www.k1simplify.com/vba/tipsleaf/leaf291.h …
など。
    • good
    • 0
この回答へのお礼

imogasi様
返信ありがとうございます。
上記の質問言葉が足りていませんでした。
業務上Dailyで処理する必要があり、社の基幹システムより抽出してもらったデータをACCESSに取り込んでいます。(基幹システムへのアクセス権限無しの為)抽出に45分ほど、インポートに10分ほどインポートされたデータの体裁を整えるのに15分ほど掛かってしまい、いい方法はないのか?と探っていたのでした。もちろん一番早くなければSQLは使いません。

お礼日時:2007/11/16 14:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESSのVBAでCSVを取込処理について

ACCESS初心者です。
ACCESSのVBAでCSV取込をしようとしていますが、
うまくいきません。
CSVとテーブルの項目の場所が違ったりオートナンバーが設定されていたりしているので、
そこのところが全くわかりません。
いろいろ調べて試しましたが、うまくいがず行き詰っています。
VBAでなくてもクエリやマクロといったやり方でもいいので、
教えてください。
-------------------------------------------------------------------
VBAプログラム
'処理実行確認画面
rc = MsgBox("処理を実行しますか?", vbOKCancel, "注文データ処理")
If rc = vbCancel Then
Exit Sub
End If

'[ファイルを開く]ダイアログボックスを作成
Set dlgOpen = Application.FileDialog(msoFileDialogOpen)

'ダイアログボックスの初期値をセット
dlgOpen.AllowMultiSelect = False
dlgOpen.Filters.Clear
dlgOpen.Filters.Add "CSVファイル", "*.csv"
dlgOpen.InitialFileName = CurrentProject.Path

'ダイアログボックス表示
retDialog = dlgOpen.Show

'[キャンセル]ボタン
If retDialog = 0 Then
Exit Sub

'[開く]ボタン
Else
'選択したファイル名を表示
Me!txtファイル名IN = dlgOpen.SelectedItems(1)
End If

Const ForRading = 1

strFilePath = txtファイル名IN

Set Con = CurrentProject.Connection
Rec.Open "order_list", Con, adOpenDynamic, adLockOptimistic


Open strFilePath For Input As #FNo
'ファイルの1行目の項目名部分を読み込む(何も処理しない)
Line Input #FNo, txtData

On Error GoTo ErrHndl
'エラーが発生した場合にデータのインポートをなかったこと(ロールバック)
'にするためにトランザクション処理として実行
Con.BeginTrans
'実際のデータ部分(2行目)からの処理
Do While Not EOF(FNo)
Line Input #FNo, txtData
Debug.Print txtData
Loop

Con.CommitTrans

Close #FNo

MsgBox ("処理が完了しました。")

Exit Sub

ErrHndl:
Close #FNo
Con.RollbackTrans
MsgBox "以下のエラーが発生したためロールバックしました。" & vbCrLf & _
Err.Description, vbCritical
----------------------------------------------------------------------------------------

ACCESS初心者です。
ACCESSのVBAでCSV取込をしようとしていますが、
うまくいきません。
CSVとテーブルの項目の場所が違ったりオートナンバーが設定されていたりしているので、
そこのところが全くわかりません。
いろいろ調べて試しましたが、うまくいがず行き詰っています。
VBAでなくてもクエリやマクロといったやり方でもいいので、
教えてください。
-------------------------------------------------------------------
VBAプログラム
'処理実行確認画面
rc = MsgBox("処理を実行します...続きを読む

Aベストアンサー

CSVファイルにタイトル行が有り、テーブルのフィールド名と同じ、
列数も同じ(オートナンバー型フィールドは除く)、
ならTransferTextメソッドでインポートはだめですか。
安全のためインポート定義を利用するべき
オートナンバー型フィールドは考えなくとも自動的に処理されます。
トランザクション処理が出来ないからNGか・・・。

インポート出来ないデータ型(数値に文字など)の場合は
インポートエラーテーブルが自動生成され記録されます。
テキスト型に255超の文字数の場合、超過分は黙って切り捨てられ
エラーは記録されません。

姑息な方法かもしれませんがインポート前にオートナンバーの最大値を控え
インポート処理後にエラーテーブルの有無・レコード数の増加をチェックし
変化が有れば削除クエリで元に戻す。
オートナンバーが大きく飛ぶので最適化で修正
Access VBA 自身を最適化 でGoogleとVBAサンプルもあるけど。。。

・・・
現状の方向だと
dim v() as variant,i as integer
v=split(txtData,",") '配列に格納
for i= lbound(v(i)) to ubound(v(i))
debug.print i,v(i) '添え字と値(タイトル)の確認
next

with rec
.addnew
!購入者氏名(漢字)= v(2)
!注文日時= cdate(v(0) ) 'Cdate 要らないかも?
・・のように対応する配列を指定
.update
end with
のようになるかと思います。
ただ、CSVファイルを、,カンマで分割して配列に入れているだけなので
ExcelでCSV出力した時のようなフォーマット
(位取り有りの数値にダブルクォートがついて、"1,100")
区切り以外でカンマが使われていると項目数・データとも崩れます。
Rollbackすることに。

CSVファイルにタイトル行が有り、テーブルのフィールド名と同じ、
列数も同じ(オートナンバー型フィールドは除く)、
ならTransferTextメソッドでインポートはだめですか。
安全のためインポート定義を利用するべき
オートナンバー型フィールドは考えなくとも自動的に処理されます。
トランザクション処理が出来ないからNGか・・・。

インポート出来ないデータ型(数値に文字など)の場合は
インポートエラーテーブルが自動生成され記録されます。
テキスト型に255超の文字数の場合、超過分は黙って切...続きを読む

QAccessでSQL結果を直接csvに書き出すには?

Access2003,WinXP

お世話になります。
自作のSQLを書いて、結果をTransferTextで手軽にCSVにできないかと考えてこんなのを書いてました。
Dim strSql AS String
Dim strPath AS String
strSql = 自作SQL文
strPath = c:\test.csv
Docmd.TransferText acExportDelim, , strSql, strPath, True

しかし、TransferTextでは「テーブル」か「クエリ」名を直接書くように指示してあり、これだと動かない?んでしょうか。
SQLは300個くらい出力する必要があるため(クエリ300個作れば解決するのですが・・・)上のようなコードをループして動かしたいのですが、何か他の簡単な出力方法があるのでしょうか。
よろしくお願いいたします。

Aベストアンサー

Dim dbs As Database
Dim qdf As QueryDef
Dim strSql AS String
Dim strPath AS String
Dim i As Integer
Set dbs = CurrentDB
'準備。「適当なクエリ名」と言うクエリを作る
qdf = dbs.CreateQueryDef("適当なクエリ名","SELECT * FROM 何か適当なテーブル");
Set qdf = Nothing 'qdfを開放
'ループ
For i = 1 to 300
  strPath = "c:\test" & Format(i,"00#") & ".csv"
  strSql = 自作SQL文
  dbs.QueryDefs![適当なクエリ名].SQL = strSql
  Docmd.TransferText acExportDelim, , strSql, strPath, True
Next
dbs.Close 'dbsをクローズ
Set dbs = Nothing 'dbsを開放

Dim dbs As Database
Dim qdf As QueryDef
Dim strSql AS String
Dim strPath AS String
Dim i As Integer
Set dbs = CurrentDB
'準備。「適当なクエリ名」と言うクエリを作る
qdf = dbs.CreateQueryDef("適当なクエリ名","SELECT * FROM 何か適当なテーブル");
Set qdf = Nothing 'qdfを開放
'ループ
For i = 1 to 300
  strPath = "c:\test" & Format(i,"00#") & ".csv"
  strSql = 自作SQL文
  dbs.QueryDefs![適当なクエリ名].SQL = strSql
  Docmd.TransferText acExportDelim, , strS...続きを読む

Qcsvファイルをアクセスにインポート

こんにちは。Access2000について質問させてください。よろしくお願いいたします。


csvファイル内のデータをAccess2000に作成したデータベースにインポートしたいんのですが、どうすれば良いでしょうか?

何を調べたらいいかもわからない状態で…

どなかかご存知の方がいらっしゃったら教えて下さい。なにとぞ宜しくお願いいたします。

Aベストアンサー

メニューのファイルメニューから外部データの取り込みを選択するかデータベースウィンドウ上で右クリックしインポートを選択します。
ファイルの種類をテキストファイルに設定しcsvファイルのあるフォルダを開きファイルを指定しインポートボタンをクリックするとインポートウィザードが開きますので順次従って進めればできます。
データを保存する場所で既存のテーブルに保存したければ次のテーブルで指定します。ウィザードの設定が終わったら完了ボタンでインポートできます。
ウィザードにある設定ボタンをクリックすればインポート定義を登録できます。インポート定義を登録すれば次回からフィールドの設定などしなくてインポート定義を使って同様のデータ構成のファイルはインポートできるようになります。
ヘルプでインポートで検索すれば出てきますのでそちらも参照してください。

QACCESSで毎回CSVファイルをテーブルにインポートする

ACCESSでGUIで毎回CSVファイルをインポートしていますが、
(テーブル→新規作成→デーブルのインポート)
自動化?VBA?することはできるのでしょうか。
ACCSESSは初心者でよくわかっていません。
よろしくおねがいします。

Aベストアンサー

>「マクロに設定」のやり方がわかりません。
え、そうなんですか。
アクセスを開くと左側に「マクロ」ってありませんか。
そこで新規作成します。
テーブルを削除するとか、クエリを開く(実行する)とか、動作を順番に設定するのです。
任意に実行したいなら、マクロ名は任意で構いません。
mdbを開いたら、必要なときにマクロを実行するだけです。

>こちらはoffのする方法が、チェックを外せばいいということでしょうか。
見つけましたよね。そのチェックを外します。

あのー、とりあえず解説書などお持ちではないですか。
最低限のことはそういう書籍で勉強して欲しいのですが。(マクロがわからないことにびっくりしたので)
ここで一つ一つやり取りするわけにもいかないので。

Q作成したレコードセットのCSV出力の方法

test.csv とtest2.csvから作成したレコードセットをtest3.csvに出力したいのですが、
”指定した式は、いずれかの引数とデータ型が対応していません。”
とエラーが帰ってきます。

色々試したのですがうまくいきません、

作成したレコードセットをCSVファイルにエクスポートする方法を教えてください。

Private Sub コマンド6_Click()


Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

Set CN = New ADODB.Connection

CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\;" & _
"Extended Properties='Text;HDR=YES'"

Set RS = CN.Execute("SELECT * FROM test.csv a LEFT JOIN test2.csv b ON a.tel = b.tel")

DoCmd.TransferText acExportDelim, , RS, "C:\test3.csv", True, ""



Set RS = Nothing
Set CN = Nothing


End Sub

test.csv とtest2.csvから作成したレコードセットをtest3.csvに出力したいのですが、
”指定した式は、いずれかの引数とデータ型が対応していません。”
とエラーが帰ってきます。

色々試したのですがうまくいきません、

作成したレコードセットをCSVファイルにエクスポートする方法を教えてください。

Private Sub コマンド6_Click()


Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

Set CN = New ADODB.Connection

CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
...続きを読む

Aベストアンサー

#2です

解決されたという解釈で良かったのでしょうか。
(記述を見直しました)(前のものでも一応動くとは思います)

ただ、気がかりなのがCドライブ直下と言う事で・・・・
(私はそこには作らないというだけの話ですが)


「test1.csv」「test2.csv」のありかを、「D:\HOGE」と仮定します。
作成する「test3.csv」の場所を「E:\hogehoge」と仮定します。
「E:\hogehoge\test3.csv」が存在したらエラーとなります。

「D:\HOGE」を★★に、「E:\hogehoge」を☆☆で置換えて記述したとすると
(#2の記述をチョッと変更しています。
変な改行表示されるので、一度メモ帳等にコピー&ペーストして確認ください)


Dim CN As ADODB.Connection
Dim sSql As String

Set CN = New ADODB.Connection

CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=★★;" & _
"Extended Properties='Text;HDR=YES'"

sSql = "SELECT * INTO [test3.csv] IN '☆☆'[Text;FMT=Delimited;HDR=YES;IMEX=0;]" _
    & " FROM [test.csv] AS a LEFT JOIN [test2.csv] AS b ON a.tel = b.tel;"

CN.Execute sSql
Set CN = Nothing

※ この辺については、Web上のブログで見たような気が気ます。
(SQLで CSV出力指定記述とか・・・)

※  [test3.csv] の後の IN句の記述について、いろいろ確認を取られたらと思います。

#2です

解決されたという解釈で良かったのでしょうか。
(記述を見直しました)(前のものでも一応動くとは思います)

ただ、気がかりなのがCドライブ直下と言う事で・・・・
(私はそこには作らないというだけの話ですが)


「test1.csv」「test2.csv」のありかを、「D:\HOGE」と仮定します。
作成する「test3.csv」の場所を「E:\hogehoge」と仮定します。
「E:\hogehoge\test3.csv」が存在したらエラーとなります。

「D:\HOGE」を★★に、「E:\hogehoge」を☆☆で置換えて記述したとすると
(#2の記述をチョ...続きを読む

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QSQLの速度をあげるには・・・

テキストファイルからキーワードを拾って
SQLをなげています
SQLの質問になってしまうかもしれません
いまはADO接続でやっています

Open ファイル as input......

SQL = select * from tbl where name like '%キーワード%'
execute(SQL)

レコードセットの値で処理をいろいろ・・・
Loop

もともとのDBの件数がものすごくおおくてselect文に結構な時間が
かかってしまいます。速度をあげるほうほうってあるのでしょうか
私にはおもいつかなくて・・・

こういったほうほうは どう? ってのがありましたら
おしえていただきたいのですが よろしくおねがいします。

Aベストアンサー

確かに・・・Like演算子・・・あまり使いたくないですね・・・
文字列比較は処理を遅くさせるし、増してや「=」ではなくLikeですから、膨大な時間がかかる恐れが・・・

ちなみにぼく自身、DB系を多くしています。今の仕事もDB系なのですが、元となるホストは他の会社が行っており、それにあわせて作らなければなりません。
で、そのホスト連携部分に文字列を比較しなければならない部分があるんですよ・・・・
自分の会社ならまだしも、他の会社がすでに設計済みのDBだから変えようがないのです。。。

まぁ愚痴っても仕方ないか・・・


なのでぼくも(不本意ながら)Like演算子を使用しています。


長い前置きはさておき・・・

本題のSQLのスピードなのですが、
http://homepage2.nifty.com/inform/vbdb/addnew.htm
こちらに面白い記述がありました。

AddNewにかかるスピードの検証で
Access データベースの場合: AddNew のほうが INSERT INTO より5倍以上速い
SQL Server の場合: INSERT INTO のほうが AddNew より 1.4倍 くらい速い
とあります。


たぶんで物を言ってはいけないと思うけど、言っちゃいます。

(1)もしDBがアクセスで
 >レコードセットの値で処理をいろいろ・・・
 のところがUpdate用のSQL文で処理を行ってる場合

 Recordsetをして、処理を行う


(2)もしDBがアクセス以外で
 >レコードセットの値で処理をいろいろ・・・
 のところがRecordsetで処理を行ってる場合

 Recordsetをせずに、UPDATE用のSQLを実行する


未検証なのですが多分イメージとして、こういうパターンが各DBに適してるのかな?

すでにこのパターンなのであれば、意味ないですね(^^;)

参考URL:http://homepage2.nifty.com/inform/vbdb/addnew.htm

確かに・・・Like演算子・・・あまり使いたくないですね・・・
文字列比較は処理を遅くさせるし、増してや「=」ではなくLikeですから、膨大な時間がかかる恐れが・・・

ちなみにぼく自身、DB系を多くしています。今の仕事もDB系なのですが、元となるホストは他の会社が行っており、それにあわせて作らなければなりません。
で、そのホスト連携部分に文字列を比較しなければならない部分があるんですよ・・・・
自分の会社ならまだしも、他の会社がすでに設計済みのDBだから変えようがないのです。。。

...続きを読む

QDAOとADOの違いについて

Accessからイントラネット上のデータベースに接続するための接続方法で困っています。
DAOとADOの違いが分からず困っています。
メリット、デメリットが分かる方、どうか教えてください。

宜しくお願い致します。

Aベストアンサー

DAO(データアクセスオブジェクト)はAccessで使用されるMicrosoftJetデータベースエンジン を公開した最初のオブジェクト指向インターフェイスです。DAOは単一システムのアプリケーションや小規模でローカルなネットワークで使用するのに最も適しています。
とMSDNライブラリでは説明しています。
DAOはJetデータベースエンジンを対象にして開発されているのでJetのもつセキュリティ機能・データ定義機能などを十分に操作することができます。
ADO(ActiveXDataObjects)ではオブジェクトの種類が簡素化されているためJetデータベースエンジンの細かな機能を制御することができないといった点が不足している部分がありますがADOXやJROの各オブジェクトモデルで使用できる機能を使えばADOで不足している機能をほとんど補うことができます。
DAOはデータベースにAccessを使用するアプリケーションの場合、最大のパフォーマンスを得ることができます。しかしアプリケーションを運用していくうちに規模が大きくなってデータベースをSQLServerに移行することがあるかもしれません。
そのような可能性が含まれているのであれば最初からADOで開発しておいたほうが無難です。ADOはSQLServerに対する処理で良いパフォーマンスを得ることができます。

Jetデータベースエンジンを主なターゲットにしているならDAOで可。それ以外のデータベースを利用するのであればADOを選択する方が良いのではと思います。

DAO(データアクセスオブジェクト)はAccessで使用されるMicrosoftJetデータベースエンジン を公開した最初のオブジェクト指向インターフェイスです。DAOは単一システムのアプリケーションや小規模でローカルなネットワークで使用するのに最も適しています。
とMSDNライブラリでは説明しています。
DAOはJetデータベースエンジンを対象にして開発されているのでJetのもつセキュリティ機能・データ定義機能などを十分に操作することができます。
ADO(ActiveXDataObjects)ではオブジェクトの種類が簡素化されて...続きを読む

QAccessのマクロでCSVファイルをインポートする

Accessのマクロ・VBAにてCSVファイルを
インポートしたいのですが、うまくいきません。

DoCmd.TransferText acImportDelim, , "C:\Documents and Settings\yoshimi\My Documents\顧客マスタテーブル.csv", False
現在のコードです。

「オブジェクト'0.txt’が見つかりませんでした。
オブジェクトが存在していること、名前やパス名が正しいことを確認
してください。」
とエラーが表示されます。

過去ログを検索し、似たようなものを見つけ同じようにしたつもりです。
http://okweb.jp/kotaeru.php3?q=1691138
(回答のANo.1の定義の保存場所が分からずしていません)

どこがおかしいのか教えていただきたいです・・・

Aベストアンサー

インポート先(保存先)となるテーブルが指定されていないようです。

その分、カンマ(,)が1個少ないなっているために引数がずれて判断され、インポートするファイルが「C:\~顧客マスタテーブル.csv」ではなく、「0.txt」だと判断されているのではないかと思います。
(「False」がファイル名と解釈され(False=0)、テキストファイルと解釈されて拡張子「.txt」をつけてエラー表示された、と)

とりあえず、「Test」テーブルを作成し(フィールドは仮でF1,F2の2つでテキスト型)、「,"C:\~」の前に「,"Test"」を入れて実行してみて下さい。
(csvファイルが3列以上の構成であれば、「テーブル'Test'にはF3フィールドがありません」とのエラーが表示されるようになりると思いますので、適宜F3,F4,・・・と、必要な列数を追加して下さい:定義のかわりです)


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング