2012-09-11 5 views
0

정보의 헤더 행을 CSV 파일에 배치해야하는 경우가 있습니다.데이터를 파일로 내보내기

그 후,이 파일에 다양한 열 번호의 3 개의 쿼리를 추가해야합니다.

현재이 논리를 가지고 있지만 TransferText 라인은 내가 이전에 파일에 배치 한 것을 덮어 쓰기 :

Dim fldr As String 

Dim dlg As Office.FileDialog 
Set dlg = Application.FileDialog(msoFileDialogFolderPicker) 
With dlg 
    .AllowMultiSelect = False 
    .Title = "Select a Folder:" 
    .Filters.Clear 
    '.Filters.Add "CSV Files", "*.csv" 

    If .show = True Then 
     fldr = .SelectedItems(1) 
    End If 
End With 
GC dlg 

'TODO: Remove after Debugging is complete 
RaiseAlert "Folder chosen: " & fldr 
'----------------------------------------- 

Dim file As String 
file = fldr & "\Export_DelaGet_" & Format(Now(), "yyyy_mm_dd") & ".csv" 

'TODO: Remove after Debugging is complete 
RaiseAlert "File: " & file 
'----------------------------------------- 

'TODO: OpenFile and output the header line 
Open file For Output As #1 
Print #1, """SYS"",""Some Data""" & vbCrLf 
Close 1 

'Output Query/View Results to file 
DoCmd.TransferText acExportDelim, "MstPrc_Spec", "vwMasterPrices_Output", file, False 

나를 그냥 레코드 집합을 통해 쿼리를 통해 반복하거나 내가 놓친 것이 좋을 것이다 TransferText의 무언가?

답변

1

다른 사람이 나에게 더 나은 수행 방법을 제공 할 수 없다면, 지금까지 내가 가진 것입니다.

Dim fldr As String 

Dim dlg As Office.FileDialog 
Set dlg = Application.FileDialog(msoFileDialogFolderPicker) 
With dlg 
    .AllowMultiSelect = False 
    .Title = "Select a Folder:" 
    .Filters.Clear 
    '.Filters.Add "CSV Files", "*.csv" 

    If .show = True Then 
     fldr = .SelectedItems(1) 
    End If 
End With 
GC dlg 

'TODO: Remove after Debugging is complete 
' RaiseAlert "Folder chosen: " & fldr 
'----------------------------------------- 

Dim file As String 
file = fldr & "\Export_" & Format(Now(), "yyyy_mm_dd") & ".csv" 

'TODO: Remove after Debugging is complete 
' RaiseAlert "File: " & file 
'----------------------------------------- 

'TODO: OpenFile and output the header line 
Open file For Output As #1 
Print #1, """SYS"",""Some Data""" & vbCrLf 
Close 1 

Open file For Append As #2 
Dim rst As DAO.Recordset, str As String 

'Append MasterPrices 
Set rst = CurrentDb.OpenRecordset("vwMasterPrices_Output") 
If rst.RecordCount > 0 Then 
    Do While Not rst.EOF 
     str = """" & rst(0) & """,""" & rst(1) & """,""" & rst(2) & """,""" & rst(3) & """,""" & rst(4) & """," & Format(rst(5), "##0.00") 

     Print #2, str 

     'Move Next 
     rst.MoveNext 
    Loop 
End If 

'Append GroupPrice 
Set rst = CurrentDb.OpenRecordset("vwGroupPrice_Output") 
If rst.RecordCount > 0 Then 
    Do While Not rst.EOF 
     str = """" & rst(0) & """,""" & rst(1) & """,""" & rst(2) & """," & Format(rst(3), "##0.00") 

     Print #2, str 

     'Move Next 
     rst.MoveNext 
    Loop 
End If 

'Append GroupLocations 
Set rst = CurrentDb.OpenRecordset("vwGroupLocations_Output") 
If rst.RecordCount > 0 Then 
    Do While Not rst.EOF 
     str = """" & rst(0) & """,""" & rst(1) & """," & rst(2) 

     Print #2, str 
     'Move Next 
     rst.MoveNext 
    Loop 
End If 

GC rst 
Close 2 

불행히도 TransferText 방법은 File-Output 아닌 File-Append 동작을 수행한다. 따라서 TransferText 이전 파일의 내용은 지워지고 메소드의 출력으로 바뀝니다.

예 CSV 문자열에 텍스트 한정자가 있어야했습니다.

+0

네 자신의 VB6 컬렉터를 만들었습니다. 그것의 조합은'Set = Nothing' (객체 일 경우)이고 RecordSet 객체가 ' .close' 인 경우입니다. 'ParamArray' 매개 변수가 필요합니다. 그래서 만약 내가 묶는 것이 필요하다면, 나는 그들을 쉼표로 구분할 수 있습니다. – GoldBishop

관련 문제