2016-04-06 90 views
0

bazı vba bilgi ve vbs farklılıklar hakkında hiçbir fikri olan (bu komut dosyası işi yapmaya çalışıyorum Adapte çalışıyorum çözüm buradadır: VB Script to dump an SQL Server table to CSV ve https://msdn.microsoft.com/en-us/library/ms974559.aspxvbscript:. Uzatmadan ve dönüş csv ile csv sorgulamak için nasıl

üzerinde csv dosyasını çalıştırın ACE SQL sorgusu okumak ve başka CSV

sadece boş bir output.csv dosyası oluşturur sonucu dönmek gerekiyordu ve düzenleme için kilitli bana yardım edebilir.:

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 

Bazı VBA'ları anlıyorum ama bu VBS'de çıkış yolumu bulamıyorum. Neyi yanlış yaptığımı öğrenmeme yardım edebilir misin?

İkincisi ... çözümün dağıtılabilmesi için, komut dosyasının kendisine göre olan tüm veri yollarını yapmak mümkün müdür? Vba'da nasıl yapılacağını biliyorum ama vbscript ile mümkün olup olmadığına dair hiçbir fikrim yok mu?

Böyle bir şablonun tüm topluluğa çok yardımcı olabileceğine eminim. Eğer benim soru formüle edilirse, eleştiriyi alçakgönüllü olarak kabul ediyorum.

+0

1. objRecordset muhtemelen rs olmalıdır 2. strPathtoTextFile' göreli 3. 'Set ts giriş yolunu değiştirmek için değiştirilebilir' = fso.OpenTextFile ("c: \ Databases \ output.csv ", 2, TRUE)" çıkış yolunu göreceli olarak değiştirebilir 4. Döngü içinde wscript.echo Sol'u (satır, Len (satır) -1) kullanabilirsiniz. Aslında – MikeC

+0

giriş dosyasından veri okuyorsunuz Haklısınız. Düzeltdim 1). Hala önemli bir sorun var ... düzenleme ve boş için kilitlenmiş bir çıktı dosyası üretir. –

+0

"On Resume Next Next (İleriye Devam Et)" öğesini kaldırın ve tekrar çalıştırın; Yapılması gereken birkaç değişiklik bulursunuz. "Hata Özgeçmişinde Sonraki" nin doğru kullanılması gerekir; görmek istediğiniz hatayı maskeleyebilir. – MikeC

cevap

0

Kodun çalışma sürümünü buraya ekliyorum. "On Resume Next Next (İleriye Dön) 'ü kaldırmanız ve vurgulanan hataları düzeltmeyi denemeniz yararlı olacaktır. Pek fazla yok, düzeltmek zor değil ama alıştırma bilgilendirici olmalı. İşte kod çalışma sürümü:

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

Sayın Mike. Yardım için teşekkürler. Kodu vba editörüne bir alt klasöre yapıştırdım ve satır 22'de bir Çalışma zamanı hatası '70' izni ile durdu. İzin reddedildi. "Sağlayıcı bulunamadığı iddia eden satır 12'de durdurun. Kod doğru olarak yüklenemez. Kod 800A0E7A Kaynak: ADODB.Connection –

+0

" İzni engellenmiş "olası bir yere yazıyorsunuzdur" Muhtemelen çıktı konumunu değiştirmeniz gerekir. "Sağlayıcı bulunamadı" için, gerekli olan dosyalar uzun süredir Windows varsayılan yüklemesinin bir parçası olduğu için bu alışılmadık bir durumdur.Aşağıdaki SO tartışmasının birkaç öneri vardır: http://stackoverflow.com/questions/2508037/vbscript-access-mdb-800a0e7a-provider-cannot-be-found-it-may-not-be-prop – MikeC