🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
49 messages
49 total messages Started by Jan Koc Mon, 21 Nov 2016 11:31
export kwerendy do pliku csv
#137305
Author: Jan Koc
Date: Mon, 21 Nov 2016 11:31
31 lines
2334 bytes
Witam
Od pewnego czasu boksuję się z wyeksportowaniem kwerendy "ExportDoDPD" do pliku csv (skoroszyt excela z polami rozdzielonymi średnikami)
próbowałem bezpośrednio 

Specyfikacja exportu "Export11" do pliku tekstowego .csv

DoCmd.TransferText acExportDelim, "Export11", "ExportDoDPD", "X:\Export_DPD.csv", True

albo najpierw wysyłam plik excelowski a potem go zamieniam na csv

Dim WrksheetName As String
Dim xl As Object
Set xl = CreateObject("Excel.Application")

xl.Workbooks.Open "X:\Export_DPD.xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "ExportDoDPD", "X:\Export_DPD.xls", True

'Set xl = Nothing

' Dim AJ As String
' Dim AB As String
'       AJ = "X:\Export_DPD.xls"
'       AB = "X:\Export_DPD.csv"
'      fSaveAsXlsx AJ, AB

i za każdym razem dostaję plik który jest nieczytany przez aplikację zawnętrzną. 
Dopiero jak otworzę plik i polecę zapis, EXCEL poda komunikat, że zostaną utracone formuły a ja się na to zgodzę, to plik jest akceptowany.

Czy ktoś ma jakiś pomysł ?

Z góry dziękuję
Re: export kwerendy do pliku csv
#137306
Author: Prot
Date: Mon, 21 Nov 2016 14:34
11 lines
1571 bytes
Użytkownik "Jan Koc" <jan.kociumbas@gmail.com> napisał w wiadomości 
news:39d994b6-e28e-4fc2-a084-f06f776fd643@googlegroups.com...
Od pewnego czasu boksuję się z wyeksportowaniem kwerendy "ExportDoDPD" do 
pliku csv (skoroszyt excela z polami rozdzielonymi średnikami)
...
Czy ktoś ma jakiś pomysł ?

Swego czasu wojowałem z importem poprzez VBA z csv do accessa 2003 i excela 
2007 - bardzo poważne problemy miałem ... ze względu na kłopoty z kodowaniem 
znaków - u mnie rozwiązałem problem poprzez zastosowanie zestawu OEM 852 ;) 
Re: export kwerendy do pliku csv
#137308
Author: MaciejF
Date: Tue, 22 Nov 2016 08:33
59 lines
2729 bytes
Witaj,
Pomiń wywoływanie obiektu Excel.

Proponuję użyć procedurkę VBA:


"
    Public Sub exportQuery(exportSQL As String)
    Dim db As DAO.Database, qd As DAO.QueryDef
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)

    Set db = CurrentDb

    'Check to see if querydef exists
    For i = 0 To (db.QueryDefs.Count - 1)
        If db.QueryDefs(i).Name = "tmpExport" Then
            db.QueryDefs.Delete ("tmpExport")
            Exit For
    End If
    Next i

    Set qd = db.CreateQueryDef("tmpExport", exportSQL)

    'Set intial filename
    fd.InitialFileName = "export_" & Format(Date, "mmddyyy") & ".csv"

    If fd.show = True Then
        If Format(fd.SelectedItems(1)) <> vbNullString Then
            DoCmd.TransferText acExportDelim, , "tmpExport", fd.SelectedItems(1), False
        End If
    End If

    'Cleanup
    db.QueryDefs.Delete "tmpExport"
    db.Close
    Set db = Nothing
    Set qd = Nothing
    Set fd = Nothing

    End Sub

"

Wywoływana pod przyciskiem:
 Public Sub someButton_Click()
    Dim queryStr as String
    'Store Query Here:
    queryStr = "SELECT * FROM..."

    Call exportQuery(queryStr)

    End Sub


źródło:
http://stackoverflow.com/questions/14700192/vba-docmd-transfertext-exporting-query-to-csv-with-user-defined-file-path

MF
Re: export kwerendy do pliku csv
#137307
Author: MaciejF
Date: Tue, 22 Nov 2016 09:00
11 lines
1714 bytes
> 2007 - bardzo poważne problemy miałem ... ze względu na kłopoty z kodowaniem 
> znaków - u mnie rozwiązałem problem poprzez zastosowanie zestawu OEM 852 ;)

Tak jak pisał Prot
Ustaw w funkcji transportu odpowiednie kodowanie:

https://msdn.microsoft.com/en-us/library/office/ff835958.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx

MF
Re: export kwerendy do pliku csv
#137309
Author: Jan Koc
Date: Tue, 22 Nov 2016 17:41
18 lines
1963 bytes
Dziękuję za podpowiedzi.
Właśnie próbowałem zaimplementować kod MaciejaF i wyskoczył mi błąd
przy deklaracji:
  Dim fd As FileDialog
że ten typ jest niezdefiniowany.

Podejrzewam, że brakuje mi jakiś referencji. A mam podłączone następujące:
1.Visual Basic For Application
2.Microsoft Access 15.0 Object Library
3.OLE Automation
4.Microsoft Office 15.Access database engine Object Library
5.Microsoft ActiveX Data Objects 6.0 Library
6.Microsoft ActiveX Data Objects Recordset 6.0 Library

Czy powinienem coś dodać ?

Jan
Re: export kwerendy do pliku csv
#137310
Author: MaciejF
Date: Tue, 22 Nov 2016 18:57
13 lines
1649 bytes
> 
> Czy powinienem coś dodać ?
> 
> Jan

Widzę że powinna być referencja do:
Microsoft Office 11.0 Object Library


Pobróbuj zmieniając też w deklaracji fd:
Dim fd As Office.FileDialog

MF
Re: export kwerendy do pliku csv
#137311
Author: MaciejF
Date: Tue, 22 Nov 2016 19:11
21 lines
1882 bytes
W dniu wtorek, 22 listopada 2016 19:57:58 UTC+1 użytkownik MaciejF napisał:
> > 
> > Czy powinienem coś dodać ?
> > 
> > Jan
> 
> Widzę że powinna być referencja do:
> Microsoft Office 11.0 Object Library
> 
> 
> Pobróbuj zmieniając też w deklaracji fd:
> Dim fd As Office.FileDialog
> 
> MF

Twoja wersja Accessa będzie miała:
Microsoft Office 15.0 Object Library 
I tę podłącz.

Powodzenia!
MF
Re: export kwerendy do pliku csv
#137312
Author: Jan Koc
Date: Tue, 22 Nov 2016 19:44
6 lines
1497 bytes
Mam Office 2013
oj długo szukałem tej 11-stki.

Dzięki za podpowiedź, biorę się do roboty.

Jan
Re: export kwerendy do pliku csv
#137313
Author: Jan Koc
Date: Tue, 22 Nov 2016 20:07
8 lines
1993 bytes
Kod został skompilowany
i
wyskoczył błąd 3441 - Separator pól specyfikacji pliku tekstowego odpowiada separatorowi dziesiętnemu lub ogranicznikowi tekstu.

?????
i jeszcze dopytam, czy w  fd.SelectedItems(1) jest zawarta jakaś konkretna ścieszka dostępu? bo potrzebuję X:\Export_DPD.csv

Jan
Re: export kwerendy do pliku csv
#137314
Author: Jan Koc
Date: Tue, 22 Nov 2016 20:14
7 lines
1955 bytes
> i jeszcze dopytam, czy w  fd.SelectedItems(1) jest zawarta jakaś konkretna ścieszka dostępu? bo potrzebuję X:\Export_DPD.csv
> 
To znaczy zanim wywala błąd pojawia się okienko dialogowe adresu pliku,
ale czy to można zautomatyzować ?

Jan
Re: export kwerendy do pliku csv
#137315
Author: Jan Koc
Date: Tue, 22 Nov 2016 20:46
12 lines
2339 bytes
wróć !!!!

nie wpisałem specyfikacji exportu i stąd ten błąd.

poprawka (czyli wpis) uruchomiła transfer tekstu, ale bez nagłówków kolumn.

Jak dodałem na końcu True to nagłówki pojawiły się. OK.

Niestety efekt był ten sam co w poprzednich moich metodach.
Tzn. plik jest nieczytany przez aplikację zewnętrzną i dopiero otwarcie pliku i zapisanie jako Export..... .csv z konieczną akceptacją, że zostaną utracone formuły daje poprawny wynik.  Przy czym cały czas plik jest identyfikowany jako plik w formacie wartości oddzielonymi przecinkami Excel

Jan
Re: export kwerendy do pliku csv
#137316
Author: Jan Koc
Date: Tue, 22 Nov 2016 21:46
7 lines
2136 bytes
I mam jeszcze jeden pomysł. Ale brak mi wiedzy jak to zrobić.

W tle po dokonaniu transferu, otworzyć utworzony plik csv, polecić zapisać go jako csv, wyrazić zgodę na utratę formuł (lub wyłączyć komunikaty) i na koniec go zamknąć.

Pewnie nie jest to elegancka droga, ale cel zostałby osiągnięty.

Jan
Re: export kwerendy do pliku csv
#137317
Author: MaciejF
Date: Wed, 23 Nov 2016 06:23
10 lines
2091 bytes
skorzystaj z doświadczeń Prota:
Zmień kod w swojej procedurce:

DoCmd.TransferText acExportDelim,"Export11" , "tmpExport", fd.SelectedItems(1), True,,852


Dodałem kodowanie OEM Latin2 - 852
Zmień "Export11" jeżeli twoja specyfikacja eksportu jest inna

MF
Re: export kwerendy do pliku csv
#137318
Author: MaciejF
Date: Wed, 23 Nov 2016 06:25
19 lines
2344 bytes
W dniu środa, 23 listopada 2016 07:23:54 UTC+1 użytkownik MaciejF napisał:
> skorzystaj z doświadczeń Prota:
> Zmień kod w swojej procedurce:
> 
> DoCmd.TransferText acExportDelim,"Export11" , "tmpExport", fd.SelectedItems(1), True,,852
> 
> 
> Dodałem kodowanie OEM Latin2 - 852
> Zmień "Export11" jeżeli twoja specyfikacja eksportu jest inna
> 
> MF

Tutaj zmień nazwę pliku:
fd.InitialFileName = "export_" & Format(Date, "mmddyyy") & ".csv"

np.
fd.InitialFileName = "mojCSV_" & Format(Date, "Yyyymmdd") & ".csv"

MF
Re: export kwerendy do pliku csv
#137338
Author: Jan Koc
Date: Wed, 23 Nov 2016 06:29
2 lines
1874 bytes
Już to zrobiłem, nie pomogło.Raczej chodzi o to że tworzony plik obsługuje formuły, a dopiero wyłączenie formuły daje poprawną wersję csv.
 Jan
Re: export kwerendy do pliku csv
#137319
Author: Jan Koc
Date: Wed, 23 Nov 2016 06:31
1 lines
1960 bytes
To już mam zrobione.
Re: export kwerendy do pliku csv
#137320
Author: Jan Koc
Date: Wed, 23 Nov 2016 06:43
1 lines
2070 bytes
Tzn kodowanie włączyłem i nie pomogło
Re: export kwerendy do pliku csv
#137321
Author: Jan Koc
Date: Mon, 28 Nov 2016 20:57
44 lines
4281 bytes
Wracam !!
Nie udaje mi się tego poprawnie zrobić.
Kod jest następujący:
    Dim db As DAO.Database, qd As DAO.QueryDef
    Dim fd As FileDialog
    Dim exportSQL As String
    Dim i As Integer
    
    Set fd = Application.FileDialog(msoFileDialogSaveAs)

    Set db = CurrentDb
exportSQL = "SELECT FIRMA.Nazwa AS S_Name, FIRMA.Ulica AS S_Address, FIRMA.Kod AS S_Zip, FIRMA.Miasto AS S_City, FIRMA.telefon AS S_Phone, FIRMA.e_mail AS S_Email, 'Grzegorz Kociumbas' AS S_Contact_Person, [Export DPD2].P_Cat_KP, [Export DPD2].P_Cat_5, [Export DPD2].P_Cat_10, [Export DPD2].P_Cat_20, [Export DPD2].P_Cat_30, [Export DPD2].P_Cat_50, [Export DPD2].R_Name, [Export DPD2].R_Address, [Export DPD2].R_Zip, [Export DPD2].R_City, [Export DPD2].R_Phone, [Export DPD2].R_Email, [Export DPD2].R_Contact_Person, [Export DPD2].P_Courier_Name, [Export DPD2].P_Comment, [Export DPD2].P_Content, [Export DPD2].A_Terminal, [Export DPD2].P_Cod, [Export DPD2].Time FROM FIRMA, [Export DPD2] WHERE ((([Export DPD2].Wydrukowane)=2));"

    'Check to see if querydef exists
    For i = 0 To (db.QueryDefs.Count - 1)
        If db.QueryDefs(i).Name = "tmpExport" Then
            db.QueryDefs.Delete ("tmpExport")
            Exit For
    End If
    Next i

    Set qd = db.CreateQueryDef("tmpExport", exportSQL)

    'Set intial filename
    fd.InitialFileName = "x:\export_" & Format(Date, "yyyymmdd") & ".csv"

    If fd.show = True Then
        If Format(fd.SelectedItems(1)) <> vbNullString Then
            DoCmd.TransferText acExportDelim, "Export Specyfikacja eksportu", "tmpExport", fd.SelectedItems(1), True, , 852
        End If
    End If

    'Cleanup
    db.QueryDefs.Delete "tmpExport"
    db.Close
    Set db = Nothing
    Set qd = Nothing
    Set fd = Nothing

I jest poprawnie wykonywany, ale w efekcie otrzymuję plik podobno typu csv, ale dopiero po jego otwarciu i zapisaniu jako csv (tu informuje, że zostaną utracone formuły), plik jest poprawnie wczytywany przez aplikację zewnętrzną. Przed tą operacją plik jest nierozpoznawalny.

W związku z tym czy ktoś mógłby mi podrzucić dalszy ciąg tzn uruchomienie w tle tego pliku, zapisanie jako csv, wyłączenie komunikatu i na koniec zamknięcie excela ??

Jan
Re: export kwerendy do pliku csv
#137322
Author: MaciejF
Date: Tue, 29 Nov 2016 13:45
23 lines
2495 bytes
W dniu poniedziałek, 28 listopada 2016 21:57:17 UTC+1 użytkownik Jan Koc napisał:
> Wracam !!
> Nie udaje mi się tego poprawnie zrobić.
> Kod jest następujący:

> 
>     'Set intial filename
>     fd.InitialFileName = "x:\export_" & Format(Date, "yyyymmdd") & ".csv"

Może zmień na:
fd.InitialFileName = "x:\export_DPD.txt"

Wypróbuj poniższe.
Dołącz swój zmodyfikowany kod:

Dim AJ As String 
Dim AB As String 
      AJ = "X:\Export_DPD.txt" 
      AB = "X:\Export_DPD.csv" 
      fSaveAsXlsx AJ, AB 

Pozdrawiam
MF
Re: export kwerendy do pliku csv
#137323
Author: MaciejF
Date: Tue, 29 Nov 2016 15:35
16 lines
2340 bytes
zamiast

> Dim AJ As String 
> Dim AB As String 
>       AJ = "X:\Export_DPD.txt" 
>       AB = "X:\Export_DPD.csv" 
>       fSaveAsXlsx AJ, AB 
> 

    FileCopy "X:\Export_DPD.txt", "X:\Export_DPD.csv"
End Sub

Sprawdź to rozwiązanie

Pozdrawiam ponownie
MF
Re: export kwerendy do pliku csv
#137324
Author: Jan Koc
Date: Tue, 29 Nov 2016 16:29
7 lines
2689 bytes
Dziękuję za ponowną próbę ale nadal nie wychodzi.
Wygląda na to, że Excel zawsze tworząc plik csv dodaje mu możliwość tworzenia formuł i dopiero zadeklarowanie aby zapisał plik jako csv daje możliwość pozbycia się tego "bagażu". 
Dlatego może dać mu tę możliwość i  jak pisałem powyżej

"tzn uruchomienie w tle tego pliku, zapisanie jako csv, wyłączenie komunikatu i na koniec zamknięcie excela " 

Jan
Re: export kwerendy do pliku csv
#137325
Author: MaciejF
Date: Tue, 29 Nov 2016 16:50
5 lines
2464 bytes
https://support.office.com/pl-pl/article/Formatowanie-i-funkcje-programu-Excel-kt%C3%B3re-nie-s%C4%85-transferowane-do-innych-format%C3%B3w-plik%C3%B3w-8fdd91a3-792e-4aef-a5bb-46f603d0e585

To dziwne, gdyż plik txt czy csv jest po konwersji z Excela lub qwerendy pozbawiony formuł.

MF
Re: export kwerendy do pliku csv
#137337
Author: MaciejF
Date: Tue, 29 Nov 2016 16:51
5 lines
2573 bytes
https://support.office.com/pl-pl/article/Formatowanie-i-funkcje-programu-Excel-kt%C3%B3re-nie-s%C4%85-transferowane-do-innych-format%C3%B3w-plik%C3%B3w-8fdd91a3-792e-4aef-a5bb-46f603d0e585

To dziwne, gdyż plik txt czy csv jest po konwersji z Excela lub qwerendy pozbawiony formuł.

MF
Re: export kwerendy do pliku csv
#137326
Author: Jan Koc
Date: Tue, 29 Nov 2016 17:30
2 lines
2416 bytes
A jak Pan wykona taką operację (txt na csv), to proszę sprawdzić jak u Pana zachowa się Excel, gdy poleci mu Pan "zapisz jako csv". U mnie informuje o utracie formuł. Może mam źle ustanowione jakieś właściwości exelowskie..
Jan
Re: export kwerendy do pliku csv
#137327
Author: MaciejF
Date: Tue, 29 Nov 2016 18:05
82 lines
5460 bytes
W dniu wtorek, 29 listopada 2016 18:30:01 UTC+1 użytkownik Jan Koc napisał:
> A jak Pan wykona taką operację (txt na csv), to proszę sprawdzić jak u Pana zachowa się Excel, gdy poleci mu Pan "zapisz jako csv". U mnie informuje o utracie formuł. Może mam źle ustanowione jakieś właściwości exelowskie..
> Jan

Może konwersja musi być jawna a nie tylko przez zmianę rozszerzenia.

Wygrzebałem gdzieś jeszcze to:
1. Zapisz w Module swojego Accessa taką funkcję:

Sub txt2csv()
    Dim fnam As String
    Dim spath As String
    Dim ftxt As String
    Dim wb As Workbook
    Dim cel As Range
    Dim txts As String
    spath = "X:\"
    fnam = Dir(spath & "*.txt")
    Do While fnam <> ""
        Open spath & fnam For Input As #1
        ftxt = Input(LOF(1), 1)
        Close 1
        ftxt = Replace(ftxt, "|", ",")
        Open spath & Replace(UCase(fnam), ".TXT", ".csv") For Output As #1
        Print #1, ftxt
        Close 1
        Set wb = Workbooks.Open(spath & Replace(UCase(fnam), ".TXT", ".csv"))
        For Each cel In wb.Sheets(1).Range("A2:A" & wb.Sheets(1).Range("A2").End(xlDown).Row)
        txts = Right("0" & cel, 8)
        cel = CVDate(Left(txts, 2) & "/" & Mid(txts, 3, 2) & "/" & Right(txts, 4))
        Next cel
        wb.Close True
        fnam = Dir
    Loop
End Sub

xxxxxxxxx

2. zmodyfikowany kod pod przyciskiem:
 Dim db As DAO.Database, qd As DAO.QueryDef 
    Dim fd As FileDialog 
    Dim exportSQL As String 
    Dim i As Integer 
    
    Set fd = Application.FileDialog(msoFileDialogSaveAs) 

    Set db = CurrentDb 
exportSQL = "SELECT FIRMA.Nazwa AS S_Name, FIRMA.Ulica AS S_Address, FIRMA.Kod AS S_Zip, FIRMA.Miasto AS S_City, FIRMA.telefon AS S_Phone, FIRMA.e_mail AS S_Email, 'Grzegorz Kociumbas' AS S_Contact_Person, [Export DPD2].P_Cat_KP, [Export DPD2].P_Cat_5, [Export DPD2].P_Cat_10, [Export DPD2].P_Cat_20, [Export DPD2].P_Cat_30, [Export DPD2].P_Cat_50, [Export DPD2].R_Name, [Export DPD2].R_Address, [Export DPD2].R_Zip, [Export DPD2].R_City, [Export DPD2].R_Phone, [Export DPD2].R_Email, [Export DPD2].R_Contact_Person, [Export DPD2].P_Courier_Name, [Export DPD2].P_Comment, [Export DPD2].P_Content, [Export DPD2].A_Terminal, [Export DPD2].P_Cod, [Export DPD2].Time FROM FIRMA, [Export DPD2] WHERE ((([Export DPD2].Wydrukowane)=2));" 
  'Check to see if querydef exists 
    For i = 0 To (db.QueryDefs.Count - 1) 
        If db.QueryDefs(i).Name = "tmpExport" Then 
            db.QueryDefs.Delete ("tmpExport") 
            Exit For 
    End If 
    Next i 

    Set qd = db.CreateQueryDef("tmpExport", exportSQL) 

    'Set intial filename 
    fd.InitialFileName = "X:\export_" & Format(Date, "yyyymmdd") & ".txt" 

    If fd.show = True Then 
        If Format(fd.SelectedItems(1)) <> vbNullString Then 
            DoCmd.TransferText acExportDelim, "Export Specyfikacja eksportu", "tmpExport", fd.SelectedItems(1), True, , 852 
        End If 
    End If 

    'Cleanup 
    db.QueryDefs.Delete "tmpExport" 
    db.Close 
    Set db = Nothing 
    Set qd = Nothing 
    Set fd = Nothing 

' jawnie konwertowane txt na csv
Call txt2csv

End Sub


Proszę spróbować jeszcze to.
MF
Re: export kwerendy do pliku csv
#137328
Author: Jan Koc
Date: Tue, 29 Nov 2016 20:41
6 lines
2546 bytes
Ok ale jutro. Teraz naprawiam piec, konkretnie komin.

Jutro dam znać co wyszło.

A tak przy okazji, na jakiej grupie exelowej można znaleść podobne przyjazne podejście jak tu gdzie jesteśmy?
Jan
Re: export kwerendy do pliku csv
#137329
Author: Jan Koc
Date: Wed, 30 Nov 2016 05:28
7 lines
2489 bytes
wyrzuca mi błąd w funkcji przy deklaracji

Dim wb As Workbook

czy brakuje jakiś referencji (we wcześniejszych postachh wypisałem je) ?

Jan
Re: export kwerendy do pliku csv
#137330
Author: MaciejF
Date: Wed, 30 Nov 2016 06:54
14 lines
3022 bytes
W dniu środa, 30 listopada 2016 06:28:24 UTC+1 użytkownik Jan Koc napisał:
> wyrzuca mi błąd w funkcji przy deklaracji
> 
> Dim wb As Workbook
> 
> czy brakuje jakiś referencji (we wcześniejszych postachh wypisałem je) ?
> 
> Jan

Referencja:
Microsoft Excel Object Library 

przydatny link:
http://stackoverflow.com/questions/5729195/how-to-refer-to-excel-objects-in-access-vba
Re: export kwerendy do pliku csv
#137331
Author: MaciejF
Date: Wed, 30 Nov 2016 07:01
42 lines
3877 bytes
W dniu środa, 30 listopada 2016 07:54:35 UTC+1 użytkownik MaciejF napisał:
> W dniu środa, 30 listopada 2016 06:28:24 UTC+1 użytkownik Jan Koc napisał:
> > wyrzuca mi błąd w funkcji przy deklaracji
> > 
> > Dim wb As Workbook
> > 
> > czy brakuje jakiś referencji (we wcześniejszych postachh wypisałem je) ?
> > 
> > Jan
> 
> Referencja:
> Microsoft Excel Object Library 
> 
> przydatny link:
> http://stackoverflow.com/questions/5729195/how-to-refer-to-excel-objects-in-access-vba

Procedurka poprawiona

Sub txt2csv() 
    Dim fnam As String 
    Dim spath As String 
    Dim ftxt As String 
    Dim objExcelApp As Object
	Dim wb As Object 
    Dim cel As Range 
    Dim txts As String 
    spath = "X:\" 
    fnam = Dir(spath & "*.txt") 
    Set objExcelApp = CreateObject("Excel.Application")
	Do While fnam <> "" 
        Open spath & fnam For Input As #1 
        ftxt = Input(LOF(1), 1) 
        Close 1 
        ftxt = Replace(ftxt, "|", ",") 
        Open spath & Replace(UCase(fnam), ".TXT", ".csv") For Output As #1 
        Print #1, ftxt 
        Close 1 
        Set wb = objExcelApp.Workbooks.Open(spath & Replace(UCase(fnam), ".TXT", ".csv")) 
        wb.Close True 
        fnam = Dir 
    Loop 
End Sub
Re: export kwerendy do pliku csv
#137332
Author: MaciejF
Date: Wed, 30 Nov 2016 07:11
24 lines
3514 bytes
modyfikacja (sprawdziłem funkcję u siebie

Sub txt2csv() 
    Dim fnam As String 
    Dim spath As String 
    Dim ftxt As String 
    Dim objExcelApp As Object 
    Dim wb As Object 
    spath = "X:\" 
    fnam = Dir(spath & "*.txt") 
    Set objExcelApp = CreateObject("Excel.Application") 
        Do While fnam <> "" 
        Open spath & fnam For Input As #1 
        ftxt = Input(LOF(1), 1) 
        Close 1 
        ftxt = Replace(ftxt, "|", ",") 
        Open spath & Replace(UCase(fnam), ".TXT", ".csv") For Output As #1 
        Print #1, ftxt 
        Close 1 
        Set wb = objExcelApp.Workbooks.Open(spath & Replace(UCase(fnam), ".TXT", ".csv")) 
        wb.Close True 
        fnam = Dir 
    Loop 
End Sub 
Re: export kwerendy do pliku csv
#137333
Author: MaciejF
Date: Wed, 30 Nov 2016 07:59
8 lines
2964 bytes
Prosze sprawdź jeszcze swoją kwerendę SQL:

Po FROM nie ma złączeń i wygląda to na iloczyn kartezjański 2-ch tabel
wprawdzie masz potem filtr w klauzuli WHERE
niemniej sprawdź jeszcze raz poprawność napisanego SQLa.

Pozdrawiam
MF
Re: export kwerendy do pliku csv
#137334
Author: MaciejF
Date: Wed, 30 Nov 2016 13:55
28 lines
3528 bytes
Uproszczenie procedurki w module:

Sub txt2csv()
    Dim fnam As String
    Dim spath As String
    Dim ftxt As String
    Dim objExcelApp As Object
    Dim wb As Object
    spath = "X:\"
    fnam = Dir(spath & "*.txt")
    Set objExcelApp = CreateObject("Excel.Application")
    
    Do While fnam <> ""
        Open spath & fnam For Input As #1
        ftxt = Input(LOF(1), 1)
        Close 1
        ftxt = Replace(ftxt, "|", ";")
        Open spath & Replace(UCase(fnam), ".TXT", ".csv") For Output As #1
        Print #1, ftxt
        Close 1
        Set wb = objExcelApp.Workbooks.Open(spath & fnam)
        wb.Close True
        fnam = Dir
    Loop
End Sub

/
MF
Re: export kwerendy do pliku csv
#137335
Author: Jan Koc
Date: Wed, 30 Nov 2016 18:01
9 lines
3093 bytes
Niestety.

Procedura działa poprawnie, tworzy plik tekstowy i zamienia go na Excela csv, ale niestety z dopiero po otwarciu, zapisaniu jako csv i ..........

Widać Excel ma wbudowaną strukturę przy tworzeniu pliku csv pozwalającą na używanie formuł i dopiero jasno zdeklarowane polecenie aby się tego "bagażu" pozbyć pozostawia plik "czystym"

Jan

chyba trzeba by uderzyć do jakiejś grupy excelowej ?
Re: export kwerendy do pliku csv
#137336
Author: Prot
Date: Wed, 30 Nov 2016 20:13
52 lines
4018 bytes
Użytkownik "Jan Koc" <jan.kociumbas@gmail.com> napisał w wiadomości 
news:3752680b-e403-4a90-a64d-93c340596fed@googlegroups.com...
Niestety.

Procedura działa poprawnie, tworzy plik tekstowy i zamienia go na Excela 
csv, ale niestety z dopiero po otwarciu, zapisaniu jako csv i ..........

Widać Excel ma wbudowaną strukturę przy tworzeniu pliku csv pozwalającą na 
używanie formuł i dopiero jasno zdeklarowane polecenie aby się tego "bagażu" 
pozbyć pozostawia plik "czystym"

Jan

chyba trzeba by uderzyć do jakiejś grupy excelowej ?

A czy nie prościej byłoby eksportować kwerendę do pliku xls, a potem dopiero 
eksportować (czy zachować jako) csv ?

Przypominam sobie moje wojowanie z importem z plików tekstowych (dokładnie 
to nie był csv lecz podobny format sta - stosowany przy wyciągach 
bankowych) - też stosowałem różne kombinacje pośrednie i metodą prób i 
błędów zastosowałem procedurę następującą: tworzyłem plik roboczy "dest" 
oraz w tle plik źródłowy "temp" utworzony z "zaimportowanego" pliku 
tekstowego sta. Jeśli do tego importu zastosowałem opcję Origin:=852 - plik 
temp miał już "ogonkowy" - polski format i po kilku procedurach wykonanych 
na stringach wyniki zapisywałem do pliku dest.
Dopiero z tak uformowanego pliku dest mogłem importować dane do accessa.

Kod VBA wyglądał w tym fragmencie tak:

Dim dWb As Workbook:    Set dWb = ThisWorkbook
Dim sWb As Workbook
Dim dWks As Worksheet:  Set dWks = dWb.Sheets("dest")
Dim sWks As Worksheet

    dWks.Activate
    Range("intro").Select
    dWks.Range("intro").ClearContents


    Workbooks.OpenText Filename:=strPathFile, Origin:=852, StartRow:=1 _
    , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
    , Space:=False, Other:=False, FieldInfo:=Array(Array(0, 1)), _
    TrailingMinusNumbers:=True


    ActiveSheet.Name = "temp"
    Set sWb = ActiveWorkbook
    Set sWks = sWb.Sheets("temp")
    ActiveSheet.UsedRange.Select 
Re: export kwerendy do pliku csv
#137339
Author: Zbigniew Bratko
Date: Wed, 30 Nov 2016 20:21
79 lines
3892 bytes
W dniu 2016-11-21 o 12:31, Jan Koc pisze:
> Witam
> Od pewnego czasu boksuję się z wyeksportowaniem kwerendy "ExportDoDPD" do pliku csv (skoroszyt excela z polami rozdzielonymi średnikami)
> próbowałem bezpośrednio
>
> Specyfikacja exportu "Export11" do pliku tekstowego .csv
>
> DoCmd.TransferText acExportDelim, "Export11", "ExportDoDPD", "X:\Export_DPD.csv", True
>

Już prawie 3-ci tydzień mija na Waszej nieustającej walce z eksportem 
kwerendy ExportDoDPD do pliku *.csv w oparciu o Specyfikacje eksportu o 
nazwie "Export11".

Nie wiem, czy dobrze rozumiem Twój problem?
Masz w bazie danych MS Access jakowąś tabelę(e), na której(ych) opierasz 
kwerendę ExportDoDPD. Dane do tabel(i) pobrałeś (zaimportowałeś) z pliku 
Excela.

Korzystając z metody DoCmd.TransferSpreadsheet zapisujesz dane w pliku 
X:\Export_DPD.csv w oparciu o specyfikację "Export11"

I dalej nie bardzo wiem o co chodzi. Jakieś formatowanie, utrata formuł, 
jakiś plik .txt, jakieś Replace. Zamiany pliku *.txt (lub *.xls) na *.csv.

Moim skromnym zdaniem "CÓŚ" takiego powinno zadziałać prawidłowo:

DoCmd.TransferText acExportDelim, "Export11", "ExportDoDPD", 
"X:\Export_DPD.csv", True

Może specyfikacja "Export11" jest do d... (no taka nie za zbytnio ;-))

Proponuję, byś utworzył nowa bazę, a w niej prostą tabelę o kilku polach:
np. Nazwisko, data urodzenia, miasto, wiek
zapisać w niej ze trzy rekordy i spróbować wyeksportować tabelę do pliku 
*.csv, zapisując wcześniej specyfikację eksportu.
Potem otworzyć zapisany plik w Notatniku i popatrzeć co się zapisało i 
czy taki plik czyta Excel.

Następny etap, to korzystając z metody DoCmd.TransferSpreadsheet zapisz 
dane w pliku w oparciu o zapisana, "NOWĄ" specyfikację.

I znowu popatrz co się zapisało.

> albo najpierw wysyłam plik excelowski a potem go zamieniam na csv
>
> Dim WrksheetName As String
> Dim xl As Object
> Set xl = CreateObject("Excel.Application")
>
> xl.Workbooks.Open "X:\Export_DPD.xls"
> DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "ExportDoDPD", "X:\Export_DPD.xls", True
>
> 'Set xl = Nothing
>
> ' Dim AJ As String
> ' Dim AB As String
> '       AJ = "X:\Export_DPD.xls"
> '       AB = "X:\Export_DPD.csv"
> '      fSaveAsXlsx AJ, AB
>
Nie za bardzo rozumiem, o co chodziło Ci w zaremowanych linijkach.
Eksportujesz kwerendę "ExportDoDPD" do pliku  "X:\Export_DPD.xls", a 
potem zmieniasz rozszerzenie na *.csv i ????


> i za każdym razem dostaję plik który jest nieczytany przez aplikację zawnętrzną.
> Dopiero jak otworzę plik i polecę zapis, EXCEL poda komunikat, że zostaną utracone formuły a ja się na to zgodzę, to plik jest akceptowany.

Nie udało mi się wygenerować takiego komunikatu:
...że zostaną utracone formuły

Może więcej szczegółów.

-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137340
Author: Zbigniew Bratko
Date: Wed, 30 Nov 2016 21:11
58 lines
2736 bytes
W dniu 2016-11-30 o 21:21, Zbigniew Bratko pisze:
> W dniu 2016-11-21 o 12:31, Jan Koc pisze:
>> Witam
>> Od pewnego czasu boksuję się z wyeksportowaniem kwerendy "ExportDoDPD"
>> do pliku csv (skoroszyt excela z polami rozdzielonymi średnikami)
>> próbowałem bezpośrednio
>>
>> Specyfikacja exportu "Export11" do pliku tekstowego .csv
>>
>> DoCmd.TransferText acExportDelim, "Export11", "ExportDoDPD",
>> "X:\Export_DPD.csv", True
>>

Uczyniłem, jak proponowałem:

> Proponuję, byś utworzył nowa bazę, a w niej prostą tabelę o kilku polach:
> np. Nazwisko, data urodzenia, miasto, wiek
> zapisać w niej ze trzy rekordy i spróbować wyeksportować tabelę do pliku
> *.csv, zapisując wcześniej specyfikację eksportu.
> Potem otworzyć zapisany plik w Notatniku i popatrzeć co się zapisało i
> czy taki plik czyta Excel.

Mój plik *.csv Excel czyta

> Następny etap, to korzystając z metody DoCmd.TransferSpreadsheet zapisz
> dane w pliku w oparciu o zapisana, "NOWĄ" specyfikację.
>
> I znowu popatrz co się zapisało.

Zapisało mi się takie "CÓŚ":

"ID";"Nazwisko";"Miasto";"DataUr";"Wiek"
1;"Kowalski";"Kraków";2010-11-30 00:00:00;6
2;"Nowak";"Lublin";2011-11-2 00:00:00;5
3;"Malinowski";"Warszawa";2000-11-2 00:00:00;16


Mój kod:

Private Sub Polecenie0_Click()
Dim strFullPath As String
Const conFileNameCSV As String = "TestCsv.csv"
Const conTblName As String = "tblTestCsv"
Const conSpecyficationName As String = "MojaSpecyfikacja"

   strFullPath = CurrentProject.Path & "\" & conFileNameCSV
   DoCmd.TransferText acExportDelim, conSpecyficationName, conTblName, 
strFullPath, True

End Sub

Plik *.csv zapisany zostanie w katalogu bazy.

-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137341
Author: MaciejF
Date: Thu, 01 Dec 2016 08:05
25 lines
2396 bytes
Jeżeli dobrze zrozumiałem Jana to chciałby zrzucić wynik kwerendy do pliku csv.
Może najpierw utwórz tabelę tymczasową tmpTmpExpDPD.
I z niej zrzucaj do pliku csv tak jak napisał Zbigniew Bratko.
Popracuj nad prawidłową specyfikacją eksportu.
Dla uproszczenia tylko 3 pola.


strDel = "DELETE * FROM tblTmpExpDPD"

strINS = "INSERT INTO tblTmpExpDPD (S_Name, S_Address, S_Zip) SELECT FIRMA.Nazwa AS S_Name, FIRMA.Ulica AS S_Address, FIRMA.Kod AS S_Zip FROM FIRMA, [Export DPD2] WHERE ((([Export DPD2].Wydrukowane)=2));" 

DoCmd.Execute strDel
DoCmd.Execute strINS


Dim strFullPath As String 
Const conFileNameCSV As String = "TestCsv.csv" 
Const conTblName As String = "tblTmpExpDPD" 
Const conSpecyficationName As String = "MojaSpecyfikacja" 

   strFullPath = CurrentProject.Path & "\" & conFileNameCSV 
   DoCmd.TransferText acExportDelim, conSpecyficationName, conTblName, 
strFullPath, True 

MF
Re: export kwerendy do pliku csv
#137342
Author: MaciejF
Date: Thu, 01 Dec 2016 08:14
29 lines
2276 bytes
poprawnie będzie tak:

Dim db As Database
Dim strDel As String
Dim strINS As String

Set db = CurrentDb


strDel = "DELETE * FROM tblTmpExpDPD" 

strINS = "INSERT INTO tblTmpExpDPD (S_Name, S_Address, S_Zip) SELECT FIRMA.Nazwa AS S_Name, FIRMA.Ulica AS S_Address, FIRMA.Kod AS S_Zip FROM FIRMA, [Export DPD2] WHERE ((([Export DPD2].Wydrukowane)=2));" 

Db.Execute strDel 
Db.Execute strINS 


Dim strFullPath As String 
Const conFileNameCSV As String = "TestCsv.csv" 
Const conTblName As String = "tblTmpExpDPD" 
Const conSpecyficationName As String = "MojaSpecyfikacja" 

   strFullPath = CurrentProject.Path & "\" & conFileNameCSV 
   DoCmd.TransferText acExportDelim, conSpecyficationName, conTblName, 
strFullPath, True 

Poprzednio były błędy.

MF
Re: export kwerendy do pliku csv
#137343
Author: Zbigniew Bratko
Date: Thu, 01 Dec 2016 09:50
67 lines
3035 bytes
W dniu 2016-11-30 o 22:11, Zbigniew Bratko pisze:
> W dniu 2016-11-30 o 21:21, Zbigniew Bratko pisze:
>> W dniu 2016-11-21 o 12:31, Jan Koc pisze:
>>> Witam
>>> Od pewnego czasu boksuję się z wyeksportowaniem kwerendy "ExportDoDPD"
>>> do pliku csv (skoroszyt excela z polami rozdzielonymi średnikami)
>>> próbowałem bezpośrednio
>>>
>>> Specyfikacja exportu "Export11" do pliku tekstowego .csv
>>>
>>> DoCmd.TransferText acExportDelim, "Export11", "ExportDoDPD",
>>> "X:\Export_DPD.csv", True
>>>

Być może najłatwiej będzie zaimportować Arkusz roboczy do tabeli, 
utworzyć kwerendę pobierającą potrzebne dane i tą kwerendę wyeksportować 
do pliku *.csv.

Call ImportFromExcel("tblTestCsvBis", CurrentProject.Path & "\" & _
                      "TestCsv.xlsx", "DaneTestCsv")

'___________________________________________________
Private Sub ImportFromExcel(strTableName As String, _
                             strFilePath As String, _
                             strWorksheet As String)

   CurrentDb.Execute "DELETE * FROM " & strTableName
   DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, _
           strTableName, strFilePath, True, strWorksheet & "$"

End Sub

i w poniższej procedurze zmienić wartość stałej Const conTblName As 
String na "qryJakiasNazwa"


Najpierw zrób próbny eksport i zapisz specyfikację eksportu by z niej 
skorzystać w procedurze.
Wszystko będzie miało sens jeżeli czynności są powtarzalne, tzn. dotyczą 
takiego samego zestawu danych


>
>
> Mój kod:
>
> Private Sub Polecenie0_Click()
> Dim strFullPath As String
> Const conFileNameCSV As String = "TestCsv.csv"
> Const conTblName As String = "tblTestCsv"
> Const conSpecyficationName As String = "MojaSpecyfikacja"
>
>   strFullPath = CurrentProject.Path & "\" & conFileNameCSV
>   DoCmd.TransferText acExportDelim, conSpecyficationName, conTblName,
> strFullPath, True
>
> End Sub
>
> Plik *.csv zapisany zostanie w katalogu bazy.
>


-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137344
Author: Jan Koc
Date: Thu, 01 Dec 2016 10:32
6 lines
2409 bytes
Jeszcze raz. Problemem nie jest export z Accesa ale plik który powstaje po stronie Excela. Wszystkie dotychczasowe próby (te trzy tygodnie boksowania się z problemem) w wyniku tworzą poprawny plik Excel.csv . Problemem jest jego struktura, która zawiera możliwość tworzenia wewnątrz formuł. i dopiero otwarcie pliku i polecenie zapisania go jako csv likwiduje tę możliwość. Dopiero taki "czysty" plik jest czytany przez aplikację klienta (firma kurierska). Spróbujcie otworzyć nawet pusty plik xls zapisać go jako csv a (ja tak mam) otrzymacie komunikat że w wyniku tego procesu zostaną utacone formuły.
I problem jest w tym, że tak samo jest z plikiem wyeksportowanym z Accesa. Mimo że to plik z rozszerzeniem csv, to dopiero procedura "zapisz jako ....csv" zapisuje plik jako csv bez "bagażu" potencjalnych formuł.

Również pliki już "czyste" csv  poddane procedurze "zapisz jako ...csv" w trakcie tego procesu informują o utracie formuł.
A ja chciałem to zautomatyzować i nie mieć tej konieczności otwierania przygotowanego przez Accesa pliku.
Jan
Re: export kwerendy do pliku csv
#137345
Author: Zbigniew Bratko
Date: Thu, 01 Dec 2016 17:10
67 lines
3782 bytes
W dniu 2016-12-01 o 11:32, Jan Koc pisze:
> [...] Wszystkie dotychczasowe próby (te trzy tygodnie boksowania się z problemem) w wyniku tworzą poprawny plik Excel.csv . Problemem jest jego struktura, która zawiera możliwość tworzenia wewnątrz formuł. i dopiero otwarcie pliku i polecenie zapisania go jako csv likwiduje tę możliwość. Dopiero taki "czysty" plik jest czytany przez aplikację klienta (firma kurierska). Spróbujcie otworzyć nawet pusty plik xls zapisać go jako csv a (ja tak mam) otrzymacie komunikat że w wyniku tego procesu zostaną utacone formuły.

Próba zapisu pustego, nowego skoroszytu skutkuje u mnie utworzeniem 
pustego pliku tekstowego z rozszerzenie *.csv, bez jakichkolwiek 
komunikatów. Również arkusz z danymi jest prawidłowo zapisany i 
prawidłowo otwierany przez Excela.

> I problem jest w tym, że tak samo jest z plikiem wyeksportowanym z Accesa. Mimo że to plik z rozszerzeniem csv, to dopiero procedura "zapisz jako ....csv" zapisuje plik jako csv bez "bagażu" potencjalnych formuł.

Plik *.csv zapisany przez MS Access

"KluczID";"Nazwisko";"Miasto";"DataUr";"Wiek"
1;"Kowalski";"Kraków";2010-11-30 00:00:00;6
2;"Nowak";"Lublin";2011-11-2 00:00:00;5
3;"Malinowski";"Warszawa";2000-11-2 00:00:00;16

Plik *.csv zapisany przez MS Excel

KluczID;Nazwisko;Miasto;DataUr;Wiek
1;Kowalski;Kraków;2010-11-30 00:00;6
2;Nowak;Lublin;2011-11-02 00:00;5
3;Malinowski;Warszawa;2000-11-02 00:00;16


>
> Również pliki już "czyste" csv  poddane procedurze "zapisz jako ...csv" w trakcie tego procesu informują o utracie formuł.
> A ja chciałem to zautomatyzować i nie mieć tej konieczności otwierania przygotowanego przez Accesa pliku.


Niestety, Excel to nie moja działka, więc nie mogę Ci pomóc.

Spróbuj zadać pytanie na: http://www.coderscity.pl/forum46.html


CIEKAWOSTKA.

Spróbujcie zapisać jako plik *.csv arkusz w którym pierwsza komórka 
nazwana jest ID, lub zaczyna się od liter ID.

Otrzymacie przykładowy plik *csv.
ID;Nazwisko
1;Kowalski
2;Nowak

i spróbujcie go otworzyć za pomocą Excela

Pojawi się komunikat:

Plik, który próbujesz otworzyć (nazwa pliku), ma inny format niż 
określony przez rozszerzenie pliku.
Plik może być uszkodzony lub pochodzić z niezaufanego źródła ...bla bla bla

A potem jeszcze kilka okienek z komunikatami.
m.in. że jest to plik SYLK i nie może go załadować .... albo w pliku są 
błędy albo nie jest to plik SYLK ....

Po prostu, pierwsza komórka nie może zaczynać się od ID
Troszkę inaczej reaguje Excel, gdy pierwsza komórka nazwana jest np. 
IDentyfikator.


-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137346
Author: Jan Koc
Date: Thu, 01 Dec 2016 19:28
143 lines
7353 bytes
Nie wiem czy to będzie ciekawostka ale zapraszam Pana Bratko oraz towarzyszącego mi w zmaganiach Pana MaciejaF do próby znalezienia (pewnie mojego) błędu
Poniżej jest kod tworzący niezbędną tabelę i wpisujący jakieś tam dane.
Proszę po uruchomieniu z przycisku dodać specyfikację exportu do dowolnego z nazwy pliku csv, z zastrzeżeniem, że separatorami ma być średnik i należy transportować nagłówki kolumn. Po dokonaniu exportu proszę wejdźcie na stronę
https://www.sendit.pl/logowanie

utworzyłem tam konto 

login:janmroz@onet.eu
hasło"123456

zalogujcie się, a potem :
-NADAJ PACZKĘ
-IMPORTUJ DANE Z CSV
-WYBIERZ
tu wybieramy nasz utworzony plik CSV
-WYŚLIJ

Jeśli plik i dane są poprawne to otrzymujemy skrótową informację o adresie odbiorcy
w przeciwnym razie na czerwono wyświetla się komunikat o błędach.
Jeśli nie macie błędów to ja coś mieszam, bo ja tu mam błąd.

Bez zamykania aplikacji SENDIT otwórzcie Wasz plik csv i zróbcie to o czym pisałem : "zapisz jako ... csv" . Po zamknięciu powróćcie do aplikacji i jeszcze raz wybierzcie teraz już zmieniony plik csv, a potem WYŚLIJ.

Jeśli uzyskacie poprawny wynik to należałoby na tym zakończyć i nie robić następnych kroków, aby w firmie SENDIT nie zrobić zbędnych bałaganów, gdyż konto jet fikcyjne.

I o to chodzi.

Jan
----------------------
'
 Dim db As DAO.Database
 Dim tdf As DAO.TableDef
 Dim fldAddr1 As DAO.Field, fldAddr2 As DAO.Field, fldAddr3 As DAO.Field
 Dim fldAddr4 As DAO.Field, fldAddr5 As DAO.Field, fldAddr6 As DAO.Field
 Dim fldAddr7 As DAO.Field, fldAddr8 As DAO.Field, fldAddr9 As DAO.Field
 Dim fldAddr10 As DAO.Field, fldAddr11 As DAO.Field, fldAddr12 As DAO.Field
 Dim fldAddr13 As DAO.Field, fldAddr14 As DAO.Field, fldAddr15 As DAO.Field
 Dim fldAddr16 As DAO.Field, fldAddr17 As DAO.Field, fldAddr18 As DAO.Field
 Dim fldAddr19 As DAO.Field, fldAddr20 As DAO.Field, fldAddr21 As DAO.Field
 Dim fldAddr22 As DAO.Field, fldAddr23 As DAO.Field, fldAddr24 As DAO.Field
 Dim fldAddr25 As DAO.Field, fldAddr26 As DAO.Field
 Set db = CurrentDb
 On Error Resume Next

 Set tdf = db.CreateTableDef("Export_DPD")

 Set fldAddr1 = tdf.CreateField("S_Name", dbText)
 Set fldAddr2 = tdf.CreateField("S_Address", dbText)
 Set fldAddr3 = tdf.CreateField("S_Zip", dbText)
 Set fldAddr4 = tdf.CreateField("S_City", dbText)
 Set fldAddr5 = tdf.CreateField("S_Phone", dbText)
 Set fldAddr6 = tdf.CreateField("S_Email", dbText)
 Set fldAddr7 = tdf.CreateField("S_Contact_Person", dbText)
 Set fldAddr8 = tdf.CreateField("P_Cat_KP", dbLong)
 Set fldAddr9 = tdf.CreateField("P_Cat_5", dbLong)
 Set fldAddr10 = tdf.CreateField("P_Cat_10", dbLong)
 Set fldAddr11 = tdf.CreateField("P_Cat_20", dbLong)
 Set fldAddr12 = tdf.CreateField("P_Cat_30", dbLong)
 Set fldAddr13 = tdf.CreateField("P_Cat_50", dbLong)
 Set fldAddr14 = tdf.CreateField("R_Name", dbText)
 Set fldAddr15 = tdf.CreateField("R_Address", dbText)
 Set fldAddr16 = tdf.CreateField("R_Zip", dbText)
 Set fldAddr17 = tdf.CreateField("R_City", dbText)
 Set fldAddr18 = tdf.CreateField("R_Phone", dbText)
 Set fldAddr19 = tdf.CreateField("R_Email", dbText)
 Set fldAddr20 = tdf.CreateField("R_Contact_Person", dbText)
 Set fldAddr21 = tdf.CreateField("P_Courier_Name", dbText)
 Set fldAddr22 = tdf.CreateField("P_Comment", dbText)
 Set fldAddr23 = tdf.CreateField("P_Content", dbText)
 Set fldAddr24 = tdf.CreateField("A_Terminal", dbText)
 Set fldAddr25 = tdf.CreateField("P_Cod", dbLong)
 Set fldAddr26 = tdf.CreateField("Time", dbText)


 tdf.Fields.Append fldAddr1
 tdf.Fields.Append fldAddr2
 tdf.Fields.Append fldAddr3
 tdf.Fields.Append fldAddr4
 tdf.Fields.Append fldAddr5
 tdf.Fields.Append fldAddr6
 tdf.Fields.Append fldAddr7
 tdf.Fields.Append fldAddr8
 tdf.Fields.Append fldAddr9
 tdf.Fields.Append fldAddr10
 tdf.Fields.Append fldAddr11
 tdf.Fields.Append fldAddr12
 tdf.Fields.Append fldAddr13
 tdf.Fields.Append fldAddr14
 tdf.Fields.Append fldAddr15
 tdf.Fields.Append fldAddr16
 tdf.Fields.Append fldAddr17
 tdf.Fields.Append fldAddr18
 tdf.Fields.Append fldAddr19
 tdf.Fields.Append fldAddr20
 tdf.Fields.Append fldAddr21
 tdf.Fields.Append fldAddr22
 tdf.Fields.Append fldAddr23
 tdf.Fields.Append fldAddr24
 tdf.Fields.Append fldAddr25
 tdf.Fields.Append fldAddr26



 db.TableDefs.Append tdf

 db.TableDefs.Refresh
 Application.RefreshDatabaseWindow


 Set fldAddr1 = Nothing
 Set fldAddr2 = Nothing
 Set fldAddr3 = Nothing
 Set fldAddr4 = Nothing
 Set fldAddr5 = Nothing
 Set fldAddr6 = Nothing
 Set fldAddr7 = Nothing
 Set fldAddr8 = Nothing
 Set fldAddr9 = Nothing
 Set fldAddr10 = Nothing
 Set fldAddr11 = Nothing
 Set fldAddr12 = Nothing
 Set fldAddr13 = Nothing
 Set fldAddr14 = Nothing
 Set fldAddr15 = Nothing
 Set fldAddr16 = Nothing
 Set fldAddr17 = Nothing
 Set fldAddr18 = Nothing
 Set fldAddr19 = Nothing
 Set fldAddr20 = Nothing
 Set fldAddr21 = Nothing
 Set fldAddr22 = Nothing
 Set fldAddr23 = Nothing
 Set fldAddr24 = Nothing
 Set fldAddr25 = Nothing
 Set fldAddr26 = Nothing

 Set tdf = Nothing
 Set db = Nothing
 'wpis danych
Dim strSQL As String
strSQL = "INSERT INTO Export_DPD ( R_Name, R_Address, S_Email, R_Zip, R_City, R_Phone, R_Email, R_Contact_Person, P_Cat_KP, P_Courier_Name, S_Name, S_Address, S_Zip, S_City, S_Phone, S_Contact_Person, [Time] ) SELECT 'Jan Mróz' AS Wyr1, 'Sztokcholmska' AS Wyr2, 'aaa@wp.pl' AS Wyr17, '71-234' AS Wyr3, 'Kasina Wielko' AS Wyr4, '123456789' AS Wyr5, 'Costam@wp.pl' AS Wyr6, 'Jan Mróz' AS Wyr7, 1 AS Wyr8, 'DPD' AS Wyr9, 'Jakaś firma' AS Wyr15, 'Okrągła' AS Wyr14, '02-223' AS Wyr13, 'Warsaawa' AS Wyr12, '123456789' AS Wyr11, 'AAA' AS Wyr10, 'normal' AS Wyr16;"

DoCmd.RunSQL strSQL
Re: export kwerendy do pliku csv
#137347
Author: Zbigniew Bratko
Date: Thu, 01 Dec 2016 20:04
50 lines
3244 bytes
W dniu 2016-12-01 o 20:28, Jan Koc pisze:
> Nie wiem czy to będzie ciekawostka ale zapraszam Pana Bratko oraz towarzyszącego mi w zmaganiach Pana MaciejaF do próby znalezienia (pewnie mojego) błędu
> Poniżej jest kod tworzący niezbędną tabelę i wpisujący jakieś tam dane.
> Proszę po uruchomieniu z przycisku dodać specyfikację exportu do dowolnego z nazwy pliku csv, z zastrzeżeniem, że separatorami ma być średnik i należy transportować nagłówki kolumn. Po dokonaniu exportu proszę wejdźcie na stronę

Z poziomu Access Wyeksportowałem dane do pliku *.csv.

> https://www.sendit.pl/logowanie

[...]


> Jeśli plik i dane są poprawne to otrzymujemy skrótową informację o adresie odbiorcy
> w przeciwnym razie na czerwono wyświetla się komunikat o błędach.
> Jeśli nie macie błędów to ja coś mieszam, bo ja tu mam błąd.

Za pierwszym razem miałem błąd, ponieważ separatorem tekstu w Accessie 
był domyślnie "" (cudzysłów) i aplikacja zgłosiła błąd o polu "S_Name".

Ponownie wyeksportowałem, ale bez separatorów tekstu i wszystko poszło OK.

>
> Bez zamykania aplikacji SENDIT otwórzcie Wasz plik csv i zróbcie to o czym pisałem : "zapisz jako ... csv" . Po zamknięciu powróćcie do aplikacji i jeszcze raz wybierzcie teraz już zmieniony plik csv, a potem WYŚLIJ.

Otworzyłem Excelem zapisany plik *.csv i zapisałem go jako inny plik 
*.csv. Żadnych komunikatów o błędach.
Anulowałem poprzedni wpis w SENDIT, zaimportowałem nowy plik po 
konwersji przez Excela i też jest OK.

Odczytane przez SENDIT dane poniżej:

Nr	Odbiorca	Adres	Pobranie	Dodatkowe
ubezpieczenie	Nr dok.
sprzedaży	Cena
Nr 1	Jan Mróz	Sztokcholmska, 71-234 Kasina Wielko	-	-	-	14.49 zł

>
> Jeśli uzyskacie poprawny wynik to należałoby na tym zakończyć i nie robić następnych kroków, aby w firmie SENDIT nie zrobić zbędnych bałaganów, gdyż konto jet fikcyjne.


[...]

Windows 7 64bit, Excel 2016 64 bit, Access 2007 32-bit


-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137348
Author: Jan Koc
Date: Thu, 01 Dec 2016 21:06
26 lines
3198 bytes
W dniu czwartek, 1 grudnia 2016 21:04:47 UTC+1 użytkownik Zbigniew Bratko napisał:
> W dniu 2016-12-01 o 20:28, Jan Koc pisze:

> Z poziomu Access Wyeksportowałem dane do pliku *.csv.
> 
> 
> Za pierwszym razem miałem błąd, ponieważ separatorem tekstu w Accessie 
> był domyślnie "" (cudzysłów) i aplikacja zgłosiła błąd o polu "S_Name".

błąd "S_Name" (nazwa pierwszej kolumny) pojawia się gdy plik nie jest czytany przez aplikację (moje doświadczenia)
> 
> Ponownie wyeksportowałem, ale bez separatorów tekstu i wszystko poszło OK.
> 

> Otworzyłem Excelem zapisany plik *.csv i zapisałem go jako inny plik 
> *.csv. Żadnych komunikatów o błędach.
a nie miał Pan tu komunikatu o utracie formuł ?

i sedno sprwy
Zrobił Pan to z czym walczę od więcej niż trzech tygodni. Zapisany przez Accesa plik csv ponownie w Excela zapisał Pan jako csv. Po łacinie takie tłumaczenie tego samego przez to samo nazywano IDEM PER IDEM. Jak już mam plik csv to po co ta operacja. Bo jeśli Pan tego nie zrobi to Excel dołącza "coś" do tgo pliku i aplikacja pocztowa źle, niepoprawnie to odczytuje. Ja oczekiwałem, że jak już Acces dał mi plik csv to mogę go przetwarzać dalej bez tej zbędnej kołomyji.
Więc ponieważ przez trzy tygodnie nie udało się w żaden sposób "prawdziwego" pliku csv z Accesa otrzymać, to proponowałem czy nie można by w tle po utworzeniu przez Accesa pliku cvs otworzyć go Excelam i w tle zapisać jako csv. Czyli to co Pan zrobił ręcznie i co ja też ręcznie robię codziennie.


Serdecznie pozdrawiam i miło wspominam Pana pomoc kilka lat temu w pracy nad programem dla stolarni w której pracowałem.

Jan Kociumbas
Re: export kwerendy do pliku csv
#137349
Author: Jan Koc
Date: Thu, 01 Dec 2016 21:25
9 lines
2018 bytes
I może jeszcze tak pracyzyjniej
Czy podpisałby się Pan pod następującym kodem:

DoCmd.TransferText acExportDelim, "nowyexport", "Export_DPD", "X:\Export_dpd.csv", True

Msgbox "A teraz drogi użytkowniku, aby wysłać zlecenie do firmy kurierskiej, musisz samodzielnie utworzony u Ciebie plik X:\Export_dpd.csv otworzyć Excelem i zapisać jako (nomen omen) csv. Bo mi to nie wychodzi."

Przepraszam za trochę sarkazmu, ale o to mi chodzi.
Jan
Re: export kwerendy do pliku csv
#137351
Author: Zbigniew Bratko
Date: Thu, 01 Dec 2016 21:42
74 lines
4463 bytes
W dniu 2016-12-01 o 22:06, Jan Koc pisze:
> W dniu czwartek, 1 grudnia 2016 21:04:47 UTC+1 użytkownik Zbigniew Bratko napisał:
>> W dniu 2016-12-01 o 20:28, Jan Koc pisze:
>
>> Z poziomu Access Wyeksportowałem dane do pliku *.csv.
>>
>>
>> Za pierwszym razem miałem błąd, ponieważ separatorem tekstu w Accessie
>> był domyślnie "" (cudzysłów) i aplikacja zgłosiła błąd o polu "S_Name".
>
> błąd "S_Name" (nazwa pierwszej kolumny) pojawia się gdy plik nie jest czytany przez aplikację (moje doświadczenia)

I tak jest. Nie jest czytany ponieważ domyślnie (jeżeli nie usuniemy w 
specyfikacji ""- cudzysłowiu jako znacznika tekstu, to otrzymamy ten 
błąd. Więc ponownie z poziomu Accessa wyeksportowałem tabelę, ale w 
specyfikacji eksportu wybrałem jako kwalifikator tekstu {brak} ew. można 
usunąć średnik z tego pola.

I utworzony z poziomu Accessa plik *.csv był czytany przez SENDIT
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>
>> Ponownie wyeksportowałem, ale bez separatorów tekstu i wszystko poszło OK.
>>
>

>> Otworzyłem Excelem zapisany plik *.csv i zapisałem go jako inny plik
>> *.csv. Żadnych komunikatów o błędach.
> a nie miał Pan tu komunikatu o utracie formuł ?

Żadnych komunikatów.

> i sedno sprwy
> Zrobił Pan to z czym walczę od więcej niż trzech tygodni. Zapisany przez Accesa plik csv ponownie w Excela zapisał Pan jako csv.

Ale na wyraźne żądanie, by przeprowadzić test. W/g mnie pliki *.csv 
Accessowy (bez kwalifikatora tekstu) i Excelowy są takie same.

Po łacinie takie tłumaczenie tego samego przez to samo nazywano IDEM PER 
IDEM. Jak już mam plik csv to po co ta operacja.
Bo jeśli Pan tego nie zrobi to Excel dołącza "coś" do tgo pliku i 
aplikacja pocztowa źle, niepoprawnie to odczytuje. Ja oczekiwałem, że 
jak już Acces dał mi plik csv to mogę go przetwarzać dalej bez tej 
zbędnej kołomyji.

Ale oba pliki były poprawnie czytane przez SENDIT. Plik *.csv Accessowy 
bez kwalifikatora tekstu był czytany poprawnie, i tenże plik otwarty 
przez Excela i ponownie zapisany pod inną nazwą.


> Więc ponieważ przez trzy tygodnie nie udało się w żaden sposób "prawdziwego" pliku csv z Accesa otrzymać, to proponowałem czy nie można by w tle po utworzeniu przez Accesa pliku cvs otworzyć go Excelam i w tle zapisać jako csv. Czyli to co Pan zrobił ręcznie i co ja też ręcznie robię codziennie.

Jeszcze raz powtórzę:

Plik *.csv utworzony przez MS Access, gdzie w specyfikacji został 
usunięty Kwalifikator tekstu, był czytany poprawnie.
W pliku *.csv pierwsze pole zostało zapisane jako S_Name, a nie jako 
"S_Name" (w cudzysłowiu) z którym to zapisem SENDIT nie dawał rady.

Po prostu Excel zapisuje plik *.csv nie stosując kwalifikatora tekstu. W 
Accessie domyślnie używany jest "" cudzysłów i to właśnie musimy zmienić 
(usunąć go)!


>
> Serdecznie pozdrawiam i miło wspominam Pana pomoc kilka lat temu w pracy nad programem dla stolarni w której pracowałem.

Miło mi.


-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137350
Author: Zbigniew Bratko
Date: Thu, 01 Dec 2016 21:50
30 lines
2444 bytes
W dniu 2016-12-01 o 22:25, Jan Koc pisze:
> I może jeszcze tak pracyzyjniej
> Czy podpisałby się Pan pod następującym kodem:
>
> DoCmd.TransferText acExportDelim, "nowyexport", "Export_DPD", "X:\Export_dpd.csv", True
>
> Msgbox "A teraz drogi użytkowniku, aby wysłać zlecenie do firmy kurierskiej, musisz samodzielnie utworzony u Ciebie plik X:\Export_dpd.csv otworzyć Excelem i zapisać jako (nomen omen) csv. Bo mi to nie wychodzi."
>
> Przepraszam za trochę sarkazmu, ale o to mi chodzi.

Absolutnie NIE. Pisałem o tym w poprzednim poście.

Tytułem testu proszę w bazie ustawić w opcjach by Access pokazał 
wszystkie obiekty systemowe. Otworzyć tabelę MSysIMEXSpecs, znaleźć tam 
zapisaną specyfikację "nowyexport" i w polu TextDelim usunąć pojedynczy 
znak cudzysłowiu i wyeksportować tabelę.

DoCmd.TransferText acExportDelim, "nowyexport", "Export_DPD",
"X:\Export_dpd.csv", True

Msgbox "A teraz drogi użytkowniku,możesz wysłać zlecenie do firmy 
kurierskiej. Wszystko jest OK"



-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137352
Author: Zbigniew Bratko
Date: Thu, 01 Dec 2016 21:52
28 lines
2377 bytes
W dniu 2016-12-01 o 22:42, Zbigniew Bratko pisze:
> W dniu 2016-12-01 o 22:06, Jan Koc pisze:
>> W dniu czwartek, 1 grudnia 2016 21:04:47 UTC+1 użytkownik Zbigniew
>> Bratko napisał:
>>> W dniu 2016-12-01 o 20:28, Jan Koc pisze:
>>
>>> Z poziomu Access Wyeksportowałem dane do pliku *.csv.
>>>
>>>
>>> Za pierwszym razem miałem błąd, ponieważ separatorem tekstu w Accessie
>>> był domyślnie "" (cudzysłów) i aplikacja zgłosiła błąd o polu "S_Name".
>>
>> błąd "S_Name" (nazwa pierwszej kolumny) pojawia się gdy plik nie jest
>> czytany przez aplikację (moje doświadczenia)
>
> I tak jest. Nie jest czytany ponieważ domyślnie (jeżeli nie usuniemy w
> specyfikacji ""- cudzysłowiu jako znacznika tekstu, to otrzymamy ten
> błąd. Więc ponownie z poziomu Accessa wyeksportowałem tabelę, ale w
> specyfikacji eksportu wybrałem jako kwalifikator tekstu {brak} ew. można
> usunąć średnik z tego pola.

Oczywiście że znak " (cudzysłów), a nie średnik ;

-- 
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: export kwerendy do pliku csv
#137353
Author: Jan Koc
Date: Thu, 01 Dec 2016 22:13
10 lines
2329 bytes
Panie Zbigniewie !!!

Działa.
Ponad trzy tygodnie boksowania się. Ale albo źle to tłumaczyłem, albo należało już na początku udostępnić całość tego problemu w postaci tabeli i dostępu do SENDIT-a. Kombinowałem z kwantyfikatorem teksty, ale separatora nie tknąłem.
Pięknie, że mam to za sobą.
Dziękuje Panu, a także Panu MaciejowiF za poświęcony czas. Dużo mi dał kontakt z jego postami.

Msgbox "Drogi użytkowniku. Świat nie jest taki zły. Jest pełno przyjaznych, chętnych do pomocy ludzi. Avanti"

Dziękuję GURU
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads