Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Gefilterte Tabellen aus Query als CSV Exportieren

Begonnen von luana, Juni 29, 2017, 10:22:31

⏪ vorheriges - nächstes ⏩

luana

Hallo, ich bin neu hier habe leider keinerlei Erfahrung mit VBA und versuche mich nun für ein Projekt an diese Sache. (wurde ins eiskalte Wasser geschmissen)

Ich schildere mal mein Ziel:
Ich habe eine Abfrage in Access erstellt, mit der ich alle Tabellen aus der aktuellen DB anzeige.
Die Tabellen die nicht angezeigt werden sollen starten mit "CST-". Diesen Selektion habe ich natürlich hinbekommen.
Nun möchte ich über VBA (mittels Button in einer FORM) alle selektierten Tabellen aus dem query (also alle Tabellen die nicht "CST-*" sind) als CSV exportieren.
Der Export für ALLE tabellen gelingt mir, jedoch nicht für die Selektion.

mein Code

Private Sub Command0_Click()
     Dim AktTable As TableDef
   Dim i As Integer
     
     i = 0

     For Each AktTable In CurrentDb.TableDefs
       
         If AktTable.Attributes = 0 Then
             DoCmd.TransferText acExportDelim, acFormat, _
                                       AktTable.Name, _
                                       "C:\" & AktTable.Name & ".csv", True, ""
                                       i = i + 1
         End If
    Next AktTable
     MsgBox (i & "CSV's " & "created")
End Sub


Die Suchfunktion war nicht so erfolgreich. Ich hoffe ihr könnt mir helfen :([/size][/size]

Lachtaube

Du kannst die Name-Eigenschaft vom TableDef-Objekt auswerten.

If Left$(AktTable.Name, 4) <> "CST-" Then 'exportiere

PS: Warum verwendest Du Minuszeichen (-) in Tabellennamen?
Grüße von der (⌒▽⌒)

luana

danke dir für die Antwort. ich werde das mal schnell versuchen.
Die Datenbank wurde vor 5 Monaten von einem erstellt, der bald das Unternehmen verlässt. Somit muss ich erstmal alles so nehmen wie es ist.

luana

Danke dir vielmals, das hat wunderbar funktioniert.

Nun möchte ich den nächsten Schritt machen und über Button alle Löschabfragen , die auch "delete records" heißen starten.
ich habe soeben rausgefunden, dass es passend zu TableDefs auch QueryDefs gibt. kann man da auch die einzelnen
Namen ansprechen?
..
Dim qry As QueryDef
   ..
If Left$(Qry.Name,14) <> "Delete records " Then 
DoCmd.OpenQuery Qry.Name, acViewNormal, acEdit

?? geht sowas?.. Wenn ich das versuche, dann meckert er :(

(sorry Leute, ich habe von Programmierung keinerlei Ahnung und kämpfe mich nun seit vorgestern damit herum. Dementsprechend bin ich ein absoluter nichtskönner und werde mich über das wochenende reinknien. danke für euer verständnis)

DF6GL

Hallo,


Aktionsabfragen  (delete, drop, Insert, Update) müssen mit

Docmd RunSQl   ....

oder Currentdb.Execute  ....

ausgeführt werden.

luana

Hi Leute,
da ich jetzt erst aus dem Kurzurlaub zurück bin konnte ich nicht früher antworten. Danke euch auf jeden Fall.
Ich habe das ganze etwas abgeändert und exportiere nun (auch) alle Abfrageergebnisse als CSV.
Zuvor Schreibe ich alle benötigten Abfragen in einer Extra Tabelle "table_chris".

Hier der Code - vllt nicht der schönste, aber er scheint zu funktionieren lol.


Public Sub Command23_Click()

        Dim AktQry As QueryDef
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Set db = Application.CurrentDb
        Set rst = db.OpenRecordset("table_Chris")
         Dim AppShell As Object
     Dim BrowseDir As Variant
     Dim Pfad As String
       
Set AppShell = CreateObject("Shell.Application")
     Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
     On Error Resume Next
     Pfad = BrowseDir.items().Item().Path
     If Pfad = "" Then Exit Sub
     MsgBox Pfad
     On Error GoTo 0
     
     Do While Not rst.EOF
       
       
        'DoCmd.TransferText acExportDelim, acFormat, _
                                       rst!QryName, _
                                       Pfad & "\" & rst!QryOutput & ".csv", True, ""
       
       
         rst.MoveNext
   
     Loop


End Sub



luana

ich bräuchte nochmal eure hilfe.

angenommen, bei der obigen schleife kommt heraus, dass eine abfrage nicht funktioniert (name falsch whatever).
gibt es da eine möglichkeit den fehler zu überspringen, zum nächsten zu gehen aber die fehler alle am ende aufzuzählen? wenn ja, wie macht man sowas?

DF6GL

Hallo,

möglich ist das schon, das muss aber selber ausprogrammiert werden.

Aber wozu denn?  Auftretende (Entwicklungs-) Fehler sind sofort zu eliminieren und nicht erst nach Feierabend...  ;)


Laufzeitfehler können natürlich in z. B. einer Tabelle geloggt werden.  Inwieweit bei solchen Fehlern ein weiterer Codeablauf sinnvoll ist, kann ich nicht beantworten.



Schon mal was von "Folgefehlern" gehört?


luana

Hi,
danke für deine schnelle Antwort.
Ich habe keine bis kaum keine Kenntnisse in der Programmierung und versuche mich so schnell wie möglich einzuarbeiten, daher seid bitte nachsichtig mit mir lol

Weshalb ich die Fehler "aufzählen"  und am Ende zusammen aufgelistet ausgeben möchte hat folgenden Hintergrund.

Die Datenbank beinhaltet ca. 90 Queries und einige davon funktionieren nicht.
Da ich aber faul bin, möchte ich nicht jeden einzelne Abfrage manuell aufrufen um zu schauen obs ausgeführt wird.

DF6GL

Hallo,


ZitatDa ich aber faul bin


Faulheit erzeugt lediglich exponentiellen Arbeitsaufwand...  bringt also nichts.


Wirf "On Error GoTo 0"   heraus und schon läuft der Code durch, ohne Rücksicht auf Verluste...

Am Ergebnis (den erzeugten csv-Dateien) sieht Du ja, welche funktionieren (und damit, welche nicht)

luana

Danke, hilft mir nicht weiter :)
Ich denke, dass in diesem Fall faulheit keine Arbeit erzeugt, sondern in der Zukunft Zeit spart.

Danke dir trotzdem :)

Lachtaube

Luana, kommt Dir dieser Code entgegen?

Private Sub Command23_Click()

   Dim Pfad As String, q() As String, i As Long

   Pfad = CreateObject("Shell.Application") _
          .BrowseForFolder(0, "Ordner auswählen", &H1000, 17) _
          .Items().Item().Path()
         
   If Len(Pfad) = 0 Then Exit Sub
   
   'MsgBox Pfad

   On Error Resume Next

   With CurrentDb.OpenRecordset("table_Chris", dbOpenSnapshot)

      ' ggf. Kommentar entfernen
      '.MoveLast
      '.MoveFirst

      ReDim q(.RecordCount - 1)

      Do Until .EOF

         DoCmd.TransferText acExportDelim, acFormat, _
                            !QryName, _
                            Pfad & "\" & !QryOutput & ".csv", True
         If Err Then s(i) = !QryName: i = i + 1
         .MoveNext
      Loop
      .Close
   End With

   If i > 0 Then
      ReDim Preserve q(i - 1)
      MsgBox Join(s, vbCrLf), , "Fehlerhafte Abfragen"
   End If

End Sub
Grüße von der (⌒▽⌒)

luana

vielen dank!
das hilft mir auf jeden fall weiter. Krass, wenn ich das gewusst hätte.

danke dir vielmals

ich glaube da war ein kleiner Fehler vorhanden

If Err Then [b]q(i)[/b] = !QryName: i = i + 1

Lachtaube

Grüße von der (⌒▽⌒)

luana

danke,

ach und unten auch      MsgBox Join(q, vbCrLf), , "Fehlerhafte Abfragen"

ich danke euch allen nochmal.
ich habe irgendwie nun Interesse an Programmierung gefunden und werde ab dem 12.07 definitive mit paar tutorials starten :)