2016-04-06 27 views
0

私はいくつかのVBAの知識とVBSの違いについての考えを持つ(このスクリプトを動作させるためにしようとしています、私は適応しようとしているソリューションはここにある: VB Script to dump an SQL Server table to CSVhttps://msdn.microsoft.com/en-us/library/ms974559.aspxVBScriptが:ADOとリターンCSVでCSVファイルを照会する方法を

唯一の空のOutput.csvファイルを生成し、それは編集のためロックされている

を、csvファイルを読むことになって、その上にACEのSQLクエリを実行し、別のCSVに結果を返しているあなたは私を助けることができます。:

On Error Resume Next 

Const adOpenStatic = 3 
Const adLockOptimistic = 3 
Const adCmdText = &H0001 

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

strPathtoTextFile = "C:\Databases\" 

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
      "Data Source=" & strPathtoTextFile & ";" & _ 
      "Extended Properties=""text;HDR=YES;FMT=Delimited""" 

rs.Open "SELECT * FROM PhoneList.csv", _ 
      objConnection, adOpenStatic, adLockOptimistic, adCmdText 


Set fso=CreateObject("Scripting.FileSystemObject") 
Set ts=fso.OpenTextFile("c:\Databases\output.csv",2,TRUE) 
line="" 
For Each tmp In objRecordset.Fields 
    line=line & tmp.Name & "," 
Next 

ts.WriteLine Left(line,Len(line)-1) 
While Not rs.EOF 
line="" 
For Each tmp In rs.Fields 
    If IsNull(tmp.Value) Then 
    line=line & """" & Replace(tmp.Value,"""","""""") & """," 
    Else 
    line=line & """" & tmp.Value & """," 
    End If 
Next 
ts.WriteLine Left(line,Len(line)-1) 
rs.MoveNext 
Wend 

Set rs = Nothing 
ts.close 
rs.close 
fso.close 

cn.Close 

私はいくつかのVBAを理解していますが、このVBSで私の道を見つけることができません。私が間違っていることを見つけるのを助けることができますか?

第2に、スクリプト自体に関連するデータへのすべてのパスを作成できるので、ソリューションを配布できますか?私はvbaでそれを行う方法を知っていますが、それが可能であるかどうかはわかりません。

このようなテンプレートは、すべてのコミュニティにとって非常に役立つと確信しています。私の質問がうまくいけば、私は謙虚に批判を受け入れます。

+0

1. objRecordsetは、おそらくRSでなければなりません 2. strPathtoTextFile'は相対 3. '設定TSへの入力パスを変更するために変更することができます' = fso.OpenTextFile( "C: \ Databases \ output.csv "、2、TRUE)'を変更して相対パスに変更することができます。 4.ループの中で 'wscript.echo Left(line、Len(line)-1)'を使ってあなたは実際に入力ファイルからデータを読み取っています – MikeC

+0

あなたは正しいです。私は1)を修正しました。まだいくつかの大きな問題があります...それは編集のためにロックされ、空の出力ファイルを生成します。 –

+0

"On Error Resume Next"を削除して再度実行してください。あなたがする必要があるいくつかの変更を見つける。 "On Error Resume Next"は慎重に使用する必要があります。あなたが見たいエラーを隠すことができます。 – MikeC

答えて

0

ここにコードの作業バージョンを追加します。 「On Error Resume Next」を削除し、強調表示されているエラーを修正すると便利です。多くはありませんが、修正するのは難しくありませんが、エクササイズは有益なものでなければなりません。ここでは、コードの作業バージョンです:

On Error Resume Next 

Const adOpenStatic = 3 
Const adLockOptimistic = 3 
Const adCmdText = &H0001 

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

strPathtoTextFile = "C:\Databases\" 

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
      "Data Source=" & strPathtoTextFile & ";" & _ 
      "Extended Properties=""text;HDR=YES;FMT=Delimited""" 

rs.Open "SELECT * FROM PhoneList.csv", _ 
      cn, adOpenStatic, adLockOptimistic, adCmdText 


Set fso=CreateObject("Scripting.FileSystemObject") 
Set ts=fso.OpenTextFile(strPathtoTextFile & "output.csv",2,TRUE) 
line="" 
For Each tmp In rs.Fields 
    line=line & tmp.Name & "," 
Next 
ts.WriteLine Left(line,Len(line)-1) 

While Not rs.EOF 
line="" 
For Each tmp In rs.Fields 
    If IsNull(tmp.Value) Then 
    line=line & """" & Replace(tmp.Value,"""","""""") & """," 
    Else 
    line=line & """" & tmp.Value & """," 
    End If 
Next 
ts.WriteLine Left(line,Len(line)-1) 
rs.MoveNext 
Wend 

rs.close 
Set rs = Nothing 
ts.close 
cn.Close 
+0

親愛なるMike。手伝ってくれてありがとう。コードをvbaエディタのサブファイルに貼り付け、実行時エラー '70'のパーミッションが拒否された行22で停止します。 vbsコードで実行すると、「プロバイダが見つかりません」と表示され、コードが正しくインストールされていない可能性があります。コード800A0E7Aソース:ADODB.Connection –

+0

"あなたはおそらく、出力場所を変更する必要があります。「プロバイダが見つかりません」に関しては、これは珍しいことですが、これは長い間、Windowsのデフォルトインストールに必要なファイルが含まれているためです。 /stackoverflow.com/questions/2508037/vbscript-access-mdb-800a0e7a-provider-cannot-be-found-it-may-not-be-prop – MikeC

関連する問題