Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Textmarken in Excel

Begonnen von Salvation, Juni 27, 2011, 08:44:21

⏪ vorheriges - nächstes ⏩

Salvation

Hi,
ich habe wieder ein neues Problemchen.
Diesmal möchte ich Datensätze aus Access herraus exportieren. Immer nur den aktuell angezeigten Datensatz in einem Formular. Dieser soll dann in eine *.CSV Datei geschrieben werden.

Nun ist die Frage, da dies nicht über eine Abfrage laufen soll, wie ich es umsetzen kann. Ich habe sowas schon mal nach Word hingemacht, jedoch gibt es in Word die Textmarken, die angesprungen werden, diese gibt es in Ecxel scheinbar nicht.

Gibt es eine Möglichkeit, dies auch in Excel zu benutzen?

Salvation

database

Hallo,

Zitatdiese gibt es in Ecxel scheinbar nicht
RICHTIG

ZitatGibt es eine Möglichkeit, dies auch in Excel zu benutzen
NEIN

Zitatda dies nicht über eine Abfrage laufen soll
Wird aber so sein müssen, sonst kriegst du den aktuellen DS des Formulars nicht exportiert - und ausserdem spricht TransferText m.E. nur Abfragen oder Tabellen an.

Wozu würdest du denn die Textmarken benötigen? Soll der Export an eine bestehende Datei angehängt werden?

Salvation

Hi,

japp, der Export soll an eine bestehende Datei angehängt werden. ggf. soll der erste Export auch schauen, ob die Datei vorhanden ist oder nicht. Sprich, absicherung, ob jemand die Datei vielleicht gelöscht hat. Da diese ins ORBIS geladen wird, dmait daten darin aufgenommen werden. Dafür wird die CSV-Datei gebaucht. Danach kann sie ggf. gelöscht oder eben geleert werden. Danach werden wieder neue Datensätze darin gesammelt. Ich denke aber, dass die Kontrolle mit jedem Datensatz der exportiert wird durchlaufen werden soll, da sie jederzeit ins ORBIS geladen und damit ggf gelöscht werden kann.

Salvation

DF6GL

Hallo,

erstell erst mal ein genaues (!) Ablaufkonzept zu diesem Vorgang.


Dann kannst Du mit Hilfe dieser Beispiele:

http://dbwiki.net/wiki/Access_Tipps_und_Tricks   unter  "Verarbeitung von Textdateien"


(nach gewissen Code-Anpassungen) den Export der Formulardaten in eine CSV-Datei und sonstige Überprüfungen erledigen.





Salvation

Hi,

so, ich hab mich nun für eine TXT-Datei entscheiden, da man diese fix in eine CSV-Datei umwandeln kann. Einen Export mit allen Datensätzen bekomme ich nun schon hin, jedoch möchte ich nur den Datensatz exportieren, der mir grade in dem Formular angezeigt wird.

Des Weiteren sollen weiter Datensätze angehängt werden, so dass nur eine TXT-Datei besteht und da dann mehrere verschiedene Datensätze drin stehen.

Sinn und Zweck:
Der Export erfolgt, nachdem die Person neu angelegt wurde. Diese muss dann in ORBIS (ein Krankenhaus-Programm) eingebunden werden, dafür werden CSV-Dateien benötigt, aber wie gesagt, eine TXT-Datei kann man schnell mal eben Umwandeln.

Ich bin nun soweit, dass ich folgendes Modul eingebunden habe:

Option Compare Database

Public Function ExportDelim(SQL As String, _
  Optional FName As String = "C:\Temp\Temp.txt", _
  Optional HasFieldNames As Boolean = True, _
  Optional Delim As String = ";", Optional Quote As String = """")

Dim C As Long, Tmp As String, DB As DAO.Database
Dim RS As DAO.Recordset, Fld As DAO.Field
  Set DB = CurrentDb
  Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot, dbForwardOnly)
  C = FreeFile
  Open FName For Output As #C
  If Not RS.EOF And HasFieldNames Then
    Tmp = ""
    For Each Fld In RS.Fields
      Tmp = Tmp & Delim & Quote & Fld.Name & Quote
    Next Fld
    Print #C, Mid(Tmp, Len(Delim) + 1)
  End If
  Do While Not RS.EOF
    Tmp = ""
    For Each Fld In RS.Fields
      Tmp = Tmp & Delim & Quote & Fld.Value & Quote
    Next Fld
    Print #C, Mid(Tmp, Len(Delim) + 1)
    RS.MoveNext
  Loop
  Close #C
  RS.Close
  DB.Close
End Function


Der Aufruf erfolgt so:


Private Sub Befehl8_Click()

MsgBox Me.RecordSource
MsgBox Me.Vorname
MsgBox Me.Nachname
MsgBox Me.Einstelungsdatum


    ExportDelim "SELECT Me.Vorname, Me.Nachname, Me.Einstellungsdatum FROM Me.RecordSource", "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.TXT"
End Sub



Die MsgBox sind noch zur Kontrolle da, damit ich schauen kann, ob auch der Datensatz genommen wird, der aktuell angezeigt wird.

Nun hab ich jedoch einen Laufzeitfehler:


Laufzeitfehler '3024':
Datei 'C:\Dokumente und Einstellungen\Reaver\Eigene Dateien\Me.mdb' nicht gefunden



Markiert wird mir im Modul folgende Zeile:

Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot, dbForwardOnly)



Irgendwie bin ich grade leicht verwird, da ich nirgends eine Me.mdb angelegt habe, geschweige den suchen lasse. Oder schaue ich da grade nur drüber hinweg?

Salvation

DF6GL

Hallo,


"ich hab mich nun für eine TXT-Datei entscheiden, da man diese fix in eine CSV-Datei umwandeln kann. "

??  Was willst Du da umwandeln?  eine (entspr. formatierte)  txt-Datei ist doch eine csv-Datei...

.
.
Optional FName As String = "C:\Temp\Temp.csv", _
.



ExportDelim "SELECT Me.Vorname, Me.Nachname, Me.Einstellungsdatum FROM Me.RecordSource", "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"

Die Recordsoure-Eigenschaft kann nicht als "Datenlieferant" für eine Abfrage (SQL-String) herhalten. Da muß ein Tabellen/Abfragename stehen.
Ein Formularobjekt-Verweis (Me) ist in einem SQL-String unsinnig.

Um einen bestimtmen DS in die Datei zu verfrachten, kann das Kriterium in den SQL-String eingebaut werden:


ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersID= " & Me!PersID, "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"


Um Datensätze an die CSV-Datei anzuhängen, kann das Öffnungsargument "For Append" bei "Open Dateiname" benutzt werden.

database

#6
Hallo,

und in Anlehnung und als Ergänzung zu den Ausführungen von Franz KÖNNTEST du ja auch das Recordset deines Formulars verwenden um den aktuellen Datensatz zu erhalten:

Option Compare Database
Option Explicit

Public Function ExportDelim(SQL As String, _
 Optional FName As String = "C:\Temp\Temp.txt", _
 Optional HasFieldNames As Boolean = True, _
 Optional Delim As String = ";", Optional Quote As String = """")

Dim C As Long, Tmp As String, DB As DAO.Database
Dim RS As DAO.Recordset, Fld As DAO.Field
 Set DB = CurrentDb  
 Set RS = Me.RecordsetClone
  RS.FindFirst "[PersID]=" & Me!PersID
 C = FreeFile
 Open FName For Output As #C
 ...
 ..
 .
  Close #C

 Set RS = Nothing

End Function


Aufruf dann OHNE den SQL-String ...

ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersID= " & Me!PersID, "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"



DF6GL

Hallo,

dann muss die Funktion (wegen der "ME"-Referenzierung) aber im Formularklassen-Modul stehen, es sei denn, es wird der Recordset(Clone) anstelle der SQL-Strings übergeben..

database

Hallo Franz,

ja - habe ich vergessen zu erwähnen - oder eben das Form mit seinem Namen angesprochen werden.
Ausserdem könnte der Teil ...

 Do While Not RS.EOF
   Tmp = ""
   For Each Fld In RS.Fields
     Tmp = Tmp & Delim & Quote & Fld.Value & Quote
   Next Fld
   Print #C, Mid(Tmp, Len(Delim) + 1)
   RS.MoveNext
 Loop


...eigentlich entfallen, da Salvation ja nur den aktuellen DS angesprochen hat - oder?

DF6GL

Hallo


ja, sicher... Es gibt halt immer Optimierungsmöglichkeiten, wenn man die Situation individuell nimmt.   :D



Salvation

Hi,

Zitat??  Was willst Du da umwandeln?  eine (entspr. formatierte)  txt-Datei ist doch eine csv-Datei...

Das sollte auch nicht das Problem sein. Dennoch danke für den Tipp, ich hätte notfalls die Dateiändung umgeändert, aber wenn es auch so geht, um so besser :)


Nehme ich das Beispiel von DF6GL, bekomme ich folgene Fehlermeldung:

Laufzeitfehler '3464': Datentyen in Kriterienausdruck unverträglich.

Makiert wird hierbei die Textzeile:

ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersNr= " & Me!PersNr, "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"


Vermische ich nu beide Vorschläge - ja ich musste es mal versuchen - dann bekomme ich folgende Fehlermeldung. Im Endeffekt die selbe wie vorher:


Laufzeitfehler '13': Typen unverträglich


Dazu sollte vielleicht gesagt werden, das die PersID als Text geklariert wurde, da diese auch Punkte oder Komma enthalten kann. Ich meine, da dar dann was, dass man da noch einfache Gänsefüsse setzen muss, aber ich weiß grade nicht mehr wie und wo.


Nehme ich nun das Beispiel von database bekomme ich diese Fehlermeldung:


Fehler beim Kompilieren:
Variablen nicht Definiert


Hierbei wird im Modul der komplette Kopf markiert:

Public Function ExportDelim( _
  Optional FName As String = "C:\Temp\Temp.csv", _
  Optional HasFieldNames As Boolean = True, _
  Optional Delim As String = ";", Optional Quote As String = """")


Salvation

DF6GL

Hall,

"Dazu sollte vielleicht gesagt werden, das die PersID als Text geklariert wurde,"

ja, das ist auch der Grund für die Fehlermeldung. Ich hatte PersID geschrieben mit der Annahme, dass das das Primärschlüsselfeld vom DatenTyp Long , respektive Autowert sein könnte...


Wenn es sich um ein Textfeld handelt, dann muß es so heissen:

ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersNr= '" & Me!PersNr & "'", "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"

wenn wir bei der ursprünglichen Code-Version mit einem SQL-String als Übergabeargument bleiben.


database

#12
Hallo,
Zitat...aber ich weiß grade nicht mehr wie und wo...

PersNr='" & Me!PersNr & "'"

und

ZitatNehme ich nun das Beispiel von database bekomme ich diese Fehlermeldung...

Public Function ExportDelim( _  
 Optional FName As String = "C:\Temp\Temp.csv", _
 Optional HasFieldNames As Boolean = True, _
 Optional Delim As String = ";", Optional Quote As String = """")

der Unterstrich hier muss raus wenn du meine Version versuchen willst


p.s.

Zitat von: DF6GL am Juli 03, 2011, 12:37:43
ja, sicher... Es gibt halt immer Optimierungsmöglichkeiten, wenn man die Situation individuell nimmt.   :D

jou und das speziell an einem verregneten Sonntag ...   :-\ :D ;D

Salvation

@ database:

Nehme ich das _ raus, dann markiert er mir den folgenden Text rot. Wenn ich dann die Prozedur anstoze, hängt er sich daran auf.
Kann es sein, dass da noch was fehlt? Weil es ist ja - so dachte ich - eine komplette Funktion, draum hab ich das _ auch stehen lassen.

DF6GL

Hallo,


mhmm,  glaub ich nicht so ganz   ;) :D  8)

vermutlich hat er durch den Mischmasch vergessen, eine Variable zu ändern...

@Salvation:  poste mal den Mischmasch und nenne die Variable, die BLAU markiert wird, wenn die Fehlermeldung entsteht.