FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 
smartsuitefaq.martinholz.de Foren-Übersicht

... excel sauber?

 
Neues Thema eröffnen   Neue Antwort erstellen    smartsuitefaq.martinholz.de Foren-Übersicht -> Approach-Scripte
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Logeno
Power-User


Anmeldungsdatum: 17.02.2005
Beiträge: 106
Wohnort: Bingen am Rhein

BeitragVerfasst am: Di 19.04.2005 08:26    Titel: ... excel sauber? Antworten mit Zitat

moin zusammen,

bei excel fällt mir was ein und es wäre klasse, wenn ich mich von excel bzw. microsoft verabschieden könnte.

also folgendes:
meine mitarbeiter schreiben über eine abgespeckte approach-db einen arztbericht (serienbrief) auf ihrem eigenen pc. damit ich immer die aktuellen daten in meiner verwaltungs-db habe, konvertieren meine ma´s diesen bericht in das html-format und schicken ihn mir per email.

diese datei öffne ich dann mit excel - so stehen allte textbausteine untereinander - und ich brauche nur die jeweilige zelle anzuklicken und in meine db einfügen.

nun, wenn ich das ganze mit 123 öffne, habe ich den gesamten text in einer zeile - lässt sich also nicht anklicken und in approach einfügen - bleibt mir also weiterhin die variante mit excel, oder?

ich weiß, am besten wäre es, das ganze über ein netzwerk oder server laufen zu lassen, aber pro monat sind es nur etwa 10 berichte und überhaupt übersteigt das doch den finanziellen rahmen einer kleinpraxis.

meine idee ist, die daten aus dem gesendeten bericht (in welcher form auch immer - vielleicht hat hier jemand andere ideen) per script in meine verwaltungs-db zu übertragen, genial wäre hierbei nur ein klick.

geht so etwas, wenn ja, wie? bekomme ich das eventuell alleine hin? wenn nicht, kann mir jemand so etwas basteln? wenn ja, was würde so etwas kosten? (wenn ich dabei noch was lernen kann, gebe ich für sowas gerne etwas geld aus)

danke für antworten und gruß

mh[/quote][/code]
_________________
http://www.logeno.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
Site Admin


Anmeldungsdatum: 31.12.2004
Beiträge: 389
Wohnort: Düsseldorf

BeitragVerfasst am: Mi 20.04.2005 04:52    Titel: Re: ... excel sauber? Antworten mit Zitat

Logeno hat folgendes geschrieben:
wenn ich das ganze mit 123 öffne, habe ich den gesamten text in einer zeile - lässt sich also nicht anklicken und in approach einfügen - bleibt mir also weiterhin die variante mit excel, oder?

Nicht zwingend ... (wobei HTML sicher das fragwürdigste Dateiformat für sowas ist).
Wenn Du HTML beibehalten, und die Daten in 123 öffnen willst, sollte die HTML-Datei mit einer Tabelle strukturiert sein. Dann macht 123 genau das was Du willst.
Logeno hat folgendes geschrieben:

meine idee ist, die daten aus dem gesendeten bericht (in welcher form auch immer - vielleicht hat hier jemand andere ideen) per script in meine verwaltungs-db zu übertragen, genial wäre hierbei nur ein klick.

Exportiere doch den aktuellen Serienbrief aus der Mitarbeiter-Anwendung in eine CSV-Datei mit einem fest definierten Namen (z.B. Kundennummer_Datum.csv), und laß Dir diesen per Email zustellen. Anschließend kopierst Du die CSV-Datei in einen definierten Ordner Deines Dateisystems (z.B. Import), wo Deine Anwendung die zu importierenden Dateien finden kann.
Mit Approach kannst Du diese CSV-Dateien dann importieren und z.B. über eine Log-Datei den Import zu überwachen.

Es ist auf jeden Fall etwas frickelig das Ding zu entwickeln - ich habe das vor ca. 1 Jahr mal mit einer Umfrage-Datenbank gemacht, die ich aber ohne weiteres nicht zur Verfügung stellen kann. Wenn ich am WE Zeit finde gucke ich mal ob ich das Teil soweit umbauen kann, daß man es weitergeben kann (anonymisieren usw.)
Logeno hat folgendes geschrieben:
geht so etwas, wenn ja, wie? bekomme ich das eventuell alleine hin? wenn nicht, kann mir jemand so etwas basteln? wenn ja, was würde so etwas kosten? (wenn ich dabei noch was lernen kann, gebe ich für sowas gerne etwas geld aus)

Je nach nach dem wie aufwändig das ganze ist, würde ich schon rund 3-6 Stunden dafür ansetzen. Ein Stundensatz von 50,- EUR ist dabei sicher nicht untertrieben - die fertige Lösung würde Dich also irgendwas zwischen 150 und 300 EUR kosten.
Aber ... ICH würde dafür kein Geld nehmen, da ich dann ja auch in der Produkthaftung wäre und Garantie und sowas geben müsste - habe ich keine Lust zu. Ich helfe lieber Gratis.
_________________
FAQ gelesen?
=> http://smartsuitefaq.martinholz.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Logeno
Power-User


Anmeldungsdatum: 17.02.2005
Beiträge: 106
Wohnort: Bingen am Rhein

BeitragVerfasst am: Do 21.04.2005 07:03    Titel: ... sehr großzügig!!! Antworten mit Zitat

hallo,

html fragwürdig Shocked

serienbrief mit tabelle Rolling Eyes

erst mal danke für die antwort und das angebot.

habe natürlich erst mal selbst nachgedacht Wink

ich denke, die geschichte mit den csv-dateien könnte interessant werden. dazu ein paar anmerkungen: bei einer csv-datei muss man jedesmal die entsprechenden felder auswählen (wären ca. 25 - und das kann ich meinen ma´s nicht zumuten) oder kann man diese speicherung irgendwie speichern?! und außerdem werden immer alle datensätze exportiert. übrigens log-datei sagt mir nix Confused

gruß

mh
_________________
http://www.logeno.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
Site Admin


Anmeldungsdatum: 31.12.2004
Beiträge: 389
Wohnort: Düsseldorf

BeitragVerfasst am: Fr 22.04.2005 05:03    Titel: Re: ... sehr großzügig!!! Antworten mit Zitat

Logeno hat folgendes geschrieben:
html fragwürdig Shocked

HTML ist eine Auszeichnungssprache ... und enthält keinerlei Datenstruktur, wie dies z.B. bei XML der Fall wäre.
Eine Dateiausgabe nach HTML führt oft (je nach Anwendung) dazu, daß die erstellte Datei aufgrund der Style-Informationen a) sehr groß wird und b) proprietäre Tags verwendet werden.
Der kleinste gemeinsame Nenner ist eine Text-Datei mit Zeichensatz UTF-8 (z.B. CSV).

Logeno hat folgendes geschrieben:
serienbrief mit tabelle Rolling Eyes

Da habe ich mich dumm ausgedrückt ...
Der Serienbrief wird doch auf Grundlage der Daten in Approach erstellt ... diese Daten sind in die CSV zu exportieren - nicht der Serienbrief an sich.

Logeno hat folgendes geschrieben:
bei einer csv-datei muss man jedesmal die entsprechenden felder auswählen (wären ca. 25 - und das kann ich meinen ma´s nicht zumuten) oder kann man diese speicherung irgendwie speichern?! und außerdem werden immer alle datensätze exportiert.

Muß ich am WE mit Approach ausprobieren ... kann ich so derweil nichts zu sagen (Approach läuft noch nicht unter Linux) - meine Anwendung konnte ich damals dazu überreden auf Mausklick hin eine .dbf zu erstellen (ohne Auswahl der Felder) und diese über Notes zu versenden.

Logeno hat folgendes geschrieben:
übrigens log-datei sagt mir nix Confused

Du öffnest/erstellst per Script z.B. eine Text-Datei im Dateisystem, wo du einfach "mitschneidest" welche Datei fertig exportiert/importiert wurde. So kannst Du bei einem Abbruch/Absturz den Fehler leichter eingrenzen und anschließend kontrollieren was das Teil fertiggestellt hat.
_________________
FAQ gelesen?
=> http://smartsuitefaq.martinholz.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Martin
Site Admin


Anmeldungsdatum: 31.12.2004
Beiträge: 389
Wohnort: Düsseldorf

BeitragVerfasst am: Sa 23.04.2005 18:09    Titel: Re: ... sehr großzügig!!! Antworten mit Zitat

martin hat folgendes geschrieben:
Logeno hat folgendes geschrieben:
bei einer csv-datei muss man jedesmal die entsprechenden felder auswählen (wären ca. 25 - und das kann ich meinen ma´s nicht zumuten) oder kann man diese speicherung irgendwie speichern?! und außerdem werden immer alle datensätze exportiert.

Muß ich am WE mit Approach ausprobieren ... kann ich so derweil nichts zu sagen (Approach läuft noch nicht unter Linux) - meine Anwendung konnte ich damals dazu überreden auf Mausklick hin eine .dbf zu erstellen (ohne Auswahl der Felder) und diese über Notes zu versenden.


So ... das Wochenende ist da, und Zeit hatte ich auch Wink

Ein CSV-Export lässt sich per Script recht gut automatisieren.
Das Script selber lautet folgendermaßen:

Code:
Sub CSVExport
   '
   ' Exportiert eine dBase-Datenbank in eine CSV-Datei
   ' (c) 2005, Martin Holz <martin@martinholz.de>
   '
   
   ' Dateipfade und Dateinamen festlegen   
   Dim pfad As String, dateiname As String, csv As String
   pfad = CurrentDocument.path
   dateiname = CurrentDocument.name
   csv = pfad & dateiname & ".csv"
   
   ' .. willst DU das wirklich?   
   Dim machen As Integer
   machen = 7
   machen% = Messagebox ("Dies exportiert Ihre Daten in die Datei " & Chr$(13) & csv & Chr$(13) & "Wollen Sie den Export starten?", 4 + 32 + 0 + 0, "Dateiexport nach CSV")
   
   If machen = 7 Then
      Goto ende
   Else
      Goto start
   End If
   
start:
   ' Feldnamen der Datenbank einlesen und in einen String schreiben
   Dim i As Integer, feldnamen As String, AnzahlFelder As Integer
   
   AnzahlFelder = CurrentDocument.Tables(0).NumFields
   
   For i = 0 To  AnzahlFelder - 1
      feldnamen =  feldnamen & ",""" & CurrentDocument.Tables(0).FieldNames(i) & """"
   Next
   feldnamen = Right$(feldnamen, Len(feldnamen)-2)
   feldnamen = Left$(feldnamen, Len(feldnamen)-1)
   
   '
   ' CSV-Datei-Operationen
   '
   
   ' CSV-Datei anlegen
   Dim csv_dateinr As Integer
   csv_dateinr% = Freefile()
   Open csv For Output As csv_dateinr
   
   ' Feldnamen in eine neue CSV-Datei schreiben und CSV-Datei schließen
   Write #csv_dateinr, feldnamen
   Close #csv_dateinr
   
   ' CSV-Datei wieder öffnen um die Datensätze anzuhängen
   csv_dateinr% = Freefile()
   Open csv For Append As csv_dateinr
   
   ' vorhandene Datensätze abfragen
   Dim abfrage As New ResultSet, daten As String
   Set abfrage = CurrentDocument.Tables(0).CreateResultSet()
   
   ' Datensätze an die CSV-Datei anhängen
   Do   
      daten = ""
      For j = 1 To AnzahlFelder
         ' Die einzelnen Felddaten werden zu einem String zusammengefasst
         daten =  daten & ",""" & abfrage.GetValue(j) & """"
      Next
      daten = Right$(daten, Len(daten)-1)
      If abfrage.GetValue(1) <> "" Then
         Print #csv_dateinr, daten
      End If
   Loop While abfrage.nextrow
   
   ' CSV-Datei schließen   
   Close #csv_dateinr
   Messagebox "Die Datei wurde gespeichert", 0 + 64 + 0 + 0, "Dateixport nach CSV"
ende:
   
End Sub


Eine komplette Datei ist als Beispiel unter http://smartsuitefaq.vol4u.de/download/Approach_Export_CSV.zip herunterzuladen.

Damit dieser Thread hier auch wieder in einem sinnvollen Kontext zum Kapitel steht habe ich mir erlaubt ihn ein weiteres mal zu verschieben.
_________________
FAQ gelesen?
=> http://smartsuitefaq.martinholz.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Logeno
Power-User


Anmeldungsdatum: 17.02.2005
Beiträge: 106
Wohnort: Bingen am Rhein

BeitragVerfasst am: Mi 27.04.2005 18:57    Titel: csv-datei Antworten mit Zitat

hallo martin,

vielen dank erst mal ... ich musste allerdings viel nachlesen um zu verstehen (habe jetzt von muhs/klatt Notes/Domino5: "Einführung in die LotusScript-Programmierung") ... offensichtlich ist hier jedoch nur das letzte drittel für mich zu gebrauchen - habe nämlich kein notes - braucht man das eigentlich, wenn ja, für was eigentlich; was kann notes, was approach nicht kann (habe echt keine ahnung)?

bei deinem script erscheint eine datei in excel-form, habe diese dann mit 123 geöffnet und ... it works!!! klasse

so weit so gut, bei meiner db läuft es allerdings nicht ... fehlermeldung bei zeile: daten = daten & ",""" & abfrage.GetValue(j) & """"
und zwar genau bei abfrage.getvalue (heißt glaube ich, dass die felder mit daten gefüllt werden) ... sind vielleicht zu viele bzw. nur aus einer db, außerdem werden alle datensätze exportiert.

1. kann ich im script irgenwie festlegen, welche felder genau exportiert werden sollen (und zwar aus verschiedenen dbs und nur ganz bestimmte felder), wenn ja, wie?

2. wie kann ich verhindern, dass alle datensätze exportiert werden - ich möchte nur den aktuellen datensatz exportieren.

ansonsten bin ich echt beeindruckt von deinem know how

vielleicht bekommst du das ja auch noch hin

p.s. solltest du auf die idee kommen, dass ich noch eine extra db anlegen soll, vergiss es - ich bin schon bei 50 Wink

gruß

mh
_________________
http://www.logeno.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
Site Admin


Anmeldungsdatum: 31.12.2004
Beiträge: 389
Wohnort: Düsseldorf

BeitragVerfasst am: Fr 29.04.2005 10:19    Titel: Antworten mit Zitat

Sorry ... bin jetzt ca. 1 Woche unterwegs, daher kann ich Dir erst Ende nächster Woche eine entsprechende Antwort geben.

Vielleicht findet sich ja jemand hier, der Dir zwischenzeitlich helfen kann. Sonst musst Du halt etwas warten Wink
_________________
FAQ gelesen?
=> http://smartsuitefaq.martinholz.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Martin
Site Admin


Anmeldungsdatum: 31.12.2004
Beiträge: 389
Wohnort: Düsseldorf

BeitragVerfasst am: Sa 07.05.2005 13:01    Titel: Re: csv-datei Antworten mit Zitat

Logeno hat folgendes geschrieben:
[...]habe nämlich kein notes - braucht man das eigentlich, wenn ja, für was eigentlich; was kann notes, was approach nicht kann (habe echt keine ahnung)?


Notes ist eine Groupware-Anwendung (Mail, Kalender, Datenbanken usw.) von Lotus. In Verbindung mit einem Domino-Server kannst Du den gesamten Unternehmens-Workflow darüber machen.

Approach hingegen ist "nur" eine Datenbankanwendung.

Mit Notes/Domino verdient Lotus wahrscheinlich den Löwenanteil im Softwarebereich.

Logeno hat folgendes geschrieben:
so weit so gut, bei meiner db läuft es allerdings nicht ... fehlermeldung bei zeile: daten = daten & ",""" & abfrage.GetValue(j) & """"
und zwar genau bei abfrage.getvalue (heißt glaube ich, dass die felder mit daten gefüllt werden) ... sind vielleicht zu viele bzw. nur aus einer db, außerdem werden alle datensätze exportiert.


Die Variablen müssen natürlich angepasst werden. "abfrage" ist IIRC ein Feldname in meinem(!) Formular. Wenn deine Felder anders heißen, muss das Script entsprechend angepasst werden. (HINT: Ich verwende eigentlich immer die deutschen Begriffe für Felder - dadurch kann ich die leichter von den LS-Konstanten/Funktionen unterscheiden.)

Logeno hat folgendes geschrieben:

1. kann ich im script irgenwie festlegen, welche felder genau exportiert werden sollen (und zwar aus verschiedenen dbs und nur ganz bestimmte felder), wenn ja, wie?


Ja klar ... Du musst "nur" das o.a. Script über die verschiedenen DB's laufen lassen, die allerdings alle mit der .apr verknüpft sein sollten.
Desweiteren müssen die Felder sichtbar sein, damit Du darauf zugreifen kannst.
Will heißen: Du erstellst eine Ansicht, die alle Deine benötigten Felder enthält und liest diese Ansicht über Script aus. Mittels Script kannst Du auch die einzelnen Datensätze direkt anspringen. Versuch's mal ...

Logeno hat folgendes geschrieben:
2. wie kann ich verhindern, dass alle datensätze exportiert werden - ich möchte nur den aktuellen datensatz exportieren.


Nimm die aktuelle Ansicht und rödel halt nicht alle Datensätze durch.
Das kannst Du zum Beispiel erreichen, indem Du in einer Ansicht einen Button einfügst und ein Script (wie oben) anhängst, das allerdings nur die Daten der aktuellen Ansicht übernimmt (auf die Schnelle: CurrentView.<<FELD>>.<<WERT>>)

Logeno hat folgendes geschrieben:
ansonsten bin ich echt beeindruckt von deinem know how


Ich erschrecke mich manchmal selbst ... Wink

Gruß
Martin
_________________
FAQ gelesen?
=> http://smartsuitefaq.martinholz.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Logeno
Power-User


Anmeldungsdatum: 17.02.2005
Beiträge: 106
Wohnort: Bingen am Rhein

BeitragVerfasst am: Sa 07.05.2005 21:02    Titel: Antworten mit Zitat

Sorry, ich bin überfordert!!!

1. was heißt IIRC bzw. HINT?

2. 'abfrage' kann doch kein Feld sein, sondern eine Variable für eine ... Abfrage!?

currentview.<<FELD>>.<<WERT>> verstehe ich auch nicht - was ich mittlerweile gut verwenden kann und auch verstehe ist currentview.body.FELD.text (wobei mit FELD das Objekt gemeint ist)

Ich habe eine Ansicht mit Feldern aus sechs verschiedenen DB´s, die natürlich mit .apr verbunden sind. Nachdem ich in Deinem Script ein paar mal 'exit' eingebaut habe um zu sehen, wo ich eigentlich bin, habe ich bemerkt, dass es nur die Felder aus einer DB ausliest, allerdings nicht die DB der Ansichts-Hauptdatenbank

"... und rödel halt nicht alle durch" ... ähem, ich hatte es nie vor ...


Ich nehme mal an, der Knackpunkt liegt in diesen Zeilen:
Dim abfrage As New ResultSet, daten As String
Set abfrage = CurrentDocument.Tables(0).CreateResultSet()

Ich glaube, es würde mir helfen, diese einmal auf deutsch zu verstehen ... was bedeuten diese Klammern???

Gruß

MH
_________________
http://www.logeno.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
Site Admin


Anmeldungsdatum: 31.12.2004
Beiträge: 389
Wohnort: Düsseldorf

BeitragVerfasst am: So 08.05.2005 07:48    Titel: Antworten mit Zitat

Logeno hat folgendes geschrieben:
1. was heißt IIRC bzw. HINT?

IIRC = If I Remember Correctly (Wenn ich mich recht entsinne)
HINT = versteckter Hinweis, Tip

Logeno hat folgendes geschrieben:

2. 'abfrage' kann doch kein Feld sein, sondern eine Variable für eine ... Abfrage!?

Sorry - Du hast recht ... hätte mir mein Script vorher nochmal anschauen sollen. "abfrage" ist das Array der Datensätze.

Logeno hat folgendes geschrieben:
currentview.<<FELD>>.<<WERT>> verstehe ich auch nicht - was ich mittlerweile gut verwenden kann und auch verstehe ist currentview.body.FELD.text (wobei mit FELD das Objekt gemeint ist)

So hatte ich's gemeint ... aber "body" vergessen. "<<WERT>>" schrieb ich, da es unterschiedliche Felder gibt, und nicht jedes mit ".text" anzusprechen ist (z.B. teilweise .value).

Logeno hat folgendes geschrieben:

Ich habe eine Ansicht mit Feldern aus sechs verschiedenen DB´s, die natürlich mit .apr verbunden sind. Nachdem ich in Deinem Script ein paar mal 'exit' eingebaut habe um zu sehen, wo ich eigentlich bin, habe ich bemerkt, dass es nur die Felder aus einer DB ausliest, allerdings nicht die DB der Ansichts-Hauptdatenbank


Mein Script liest die erste Datenbank - Table(0) - aus. Dabei durchläuft mein Script alle Datensätze und alle Felder. (Das machen die For/Next-Schleifen).

Möchtest Du die zweite Tabelle auslesen, so hat diese die Nummer 1 und ist über Table(1) erreichbar. (alle weiteren Tabellen äquivalent)
Logeno hat folgendes geschrieben:
"... und rödel halt nicht alle durch" ... ähem, ich hatte es nie vor ...

Genau das ist der Knackpunkt ... mein Script macht - wie gesagt - genau das. Statt also pauschal über alle Datensätze zu huschen (Do ... Loop while ...) müsstest Du Deine Datensätze definieren können (z.B. ein Datum oder ähnliches - da ich in Unkenntnis Deiner Datenbank bin, kann ich nur ein rudimentäres Beispiel geben.

Logeno hat folgendes geschrieben:
Ich nehme mal an, der Knackpunkt liegt in diesen Zeilen:
Dim abfrage As New ResultSet, daten As String
Set abfrage = CurrentDocument.Tables(0).CreateResultSet()
Ich glaube, es würde mir helfen, diese einmal auf deutsch zu verstehen ... was bedeuten diese Klammern???


ResultSet ist ein Abfrageergebnis. "abfrage" ist die Variable (ein Array), welches die Abfrage aufnimmt. Die zweite Zeile bedeutet: Nimm die Tabelle "0" und frage alle Daten ab.
Das entscheidende ist aber die "Do ... Loop"-Schleife danach.

Diese durchläuft die gesamte Tabelle, bis kein weiterer Datensatz mehr übrig ist (Do ... Loop While abfrage.nextrow). Innerhalb der "Do ... Loop"-Schleife, werden durch eine "For/Next"-Schleife die Felder jedes Datensatzes nacheinander durchlaufen. ("j" ist dabei der Zähler - zuerst wird er auf 1 gesetzt [for j = 1] und dann wird das Limit gesetzt bis wieweit er zählen soll [To AnzahlFelder]. "abfrage" repräsentiert nun den aktuellen Datensatz. "abfrage.GetValue(j)" holt das Feld mit der Nummer "j" aus dem aktuellen Datensatz.
Die Methode ist nicht elegant aber am ehesten nachvollziehbar.

Das was Du wahrscheinlich benötigst ist eine Beschreibung der Funktion "CreateResultSet". Hier ein Auszug aus der Hilfe (mal ins deutsche übersetzt):

Zitat:

Auszug aus der Lotus Approach Hilfe - CreateResultSet()
Mit dieser Methode können Sie auf Daten eine Tabelle zugreifen, die mit einer .APR-Datei verbunden ist, ohne die Approach Benutzerschnittstelle zu benutzen. Wenn die Tabelle noch nicht mit einer .APR verbunden ist, benutzen Sie die Klassen "Connection", "Query" und "ResultSet" um ein neues ResultSet-Objekt zu erstellen.
Diese Methode erzeugt ein Abfrageergebnis mit allen Datensätzen der Tabelle.
Wurde die Tabelle mit dem SQL-Assistenten erzeugt, gibt das ResultSet-Objekt die durch SQL in Approach geöffneten Datensätze wieder - nicht die gesamte Tabelle.


Desweiteren wirst Du wahrscheinlich auch alle Tabellen durchlaufen wollen, und nicht nur die (in meinem Script hartcodierte) erste Tabelle.

In diesem Falle wird die ganze Sache (so wie ich das im Moment sehe) auf eine SQL-Abfrage hinauslaufen, damit Du Deine Daten aus den unterschiedlichen Tabellen "zusammensuchen" kannst.
Allerdings sind SQL-Abfragen über Lotus Script nicht gerade trivial. Ich werde mal versuchen ein Beispiel mit zwei Datenbanken zu bauen, aus denen nur bestimmte Felder und Datensätze exportiert werden. Kann aber etwas dauern, da ich sowas auch nicht jeden Tag mache.
_________________
FAQ gelesen?
=> http://smartsuitefaq.martinholz.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Martin
Site Admin


Anmeldungsdatum: 31.12.2004
Beiträge: 389
Wohnort: Düsseldorf

BeitragVerfasst am: So 08.05.2005 12:57    Titel: DBF => CSV (über SQL) Antworten mit Zitat

Sodele ...
Die Funktionsweise des folgenden Scripts mal in einem kurzen Abriß:

Es exisitieren zwei Datenbanken:
basisdaten.dbf (Nachname, Vorname, Adresse, Kundennummer)
persoenliches.dbf (Gebrutsdatum, Telefonnummer, Kundennummer)

Das Feld Kundennummer ist in beiden DBF vorhanden und in der APR als eindeutig markiert (eignet sich somit als ID)

Das Script öffnet über SQL die Datenbank "basisdaten" und holt sich die Kundennummern in eine neue Liste (bzw. ein Array).
Im nächsten Schritt wird diese Liste Eintrag für Eintrag abgearbeitet. Dabei öffnet das Script beide Datenbanken und durchsucht alle Datensätze danach ob die derzeit bearbeitete Kundennummer enthalten ist. Wenn das der Fall ist, werden einige Felder der Datensätze (wieder über SQL) ausgelesen und in weitere Listen geschrieben.
Die Vorgehensweise über die Kundennummer verhindert, daß bei unterschiedlichsortierten Datenbanken die Daten verwurstet exportiert werden.

Die nun vorhandenen Listen für "Vornamen", "Nachnamen", "Kundennummer", "Geburtsdaten" sowie die "Kundennummer" werden dann wie gehabt in eine CSV-Datei geschrieben.

Beide Scripte habe ich in einer neuen Datei zum Download und ausprobieren bereitsgestellt: http://smartsuitefaq.vol4u.de/download/Approach_Export_CSV+SQL.zip

Hier nun das Script:
Code:
Sub SQLCSVExport
   '
   ' Exportiert Felder/Werte aus zwei dBase-Datenbanken
   ' unter Verwendung von SQL in eine CSV-Datei
   ' (c) 2005, Martin Holz <martin@martinholz.de>
   '
   
   ' ============================================
   ' Variablen für die Dateipfade und Tabellennamen   
   ' ============================================
   Dim dateipfad As String
   Dim basisdatenTabelle As String
   Dim persoenlichesTabelle As String
   Dim csv As String
   
   dateipfad = CurrentDocument.Path
   basisdatenTabelle = "basisdaten"         ' Name der ersten .dbf-Datei
   persoenlichesTabelle = "persoenliches"   ' Name der zweiten .dbf-Datei
   csv = dateipfad & "Exportdatei_aus_" & CurrentDocument.Filename & ".csv"   ' Name der Ausgabedatei
   
   ' .. willst DU das wirklich?   
   Dim machen As Integer
   machen = 7
   machen% = Messagebox ("Dies exportiert Ihre Daten in die Datei " & Chr$(13) & csv & Chr$(13) & "Wollen Sie den Export starten?", 4 + 32 + 0 + 0, "Dateiexport nach CSV")
   
   If machen = 7 Then
      Goto ende
   Else
      Goto start
   End If
   
start:
   ' ============================================
   ' Arrays/Listen für die Zusammenstellung in der CSV-Datei
   ' ============================================
   ' Felder der ersten .dbf
   Dim nachnamen List As String
   Dim vornamen List As String
   Dim kundennummer List As String      
   ' Felder der zweiten .dbf
   Dim geburtsdaten List As String
   Dim telefon List As String
   
   ' ============================================
   ' Datenbankverbindung zu den .dbf-Dateien herstellen,
   ' damit diese über SQL abgefragt werden können
   ' ============================================
   Set basisdatenVerbindung = New Connection ()
   Set persoenlichesVerbindung = New Connection ()
   
   Dim basisdatenSuche As New Query
   Dim persoenlichesSuche As New Query
   
   Dim basisdatenErgebnis As New ResultSet
   Dim persoenlichesErgebnis As New ResultSet
   
   ' 1. Verbindung zu Basisdaten
   ' SQL-Query sucht nur die Kundennummer (als eindeutiges Feld für beide Tabellen)
   ' hierbei werden zunächst alle Datensätze in "basisdaten.dbf" durchsucht und die Kundennummern
   ' in einer Liste gespeichert
   If (basisdatenVerbindung.ConnectTo("dBASE IV")) Then
      Set basisdatenSuche.Connection = basisdatenVerbindung
      basisdatenSuche.SQL = "SELECT kundennummer FROM """ &  dateipfad & basisdatenTabelle & """ " & basisdatenTabelle
   End If
   
   Set basisdatenErgebnis.Query = basisdatenSuche
   If basisdatenErgebnis.Execute Then
      If basisdatenErgebnis.NumRows Then
         basisdatenErgebnis.FirstRow
         Do
            kundennummer(basisdatenErgebnis.CurrentRow) = basisdatenErgebnis.getvalue(1)
         Loop While basisdatenErgebnis.NextRow
      End If
   End If
   
   Dim zaehler As Integer
   zaehler = 1
   Forall id In kundennummer
      ' SQL durchsucht nun die Datensätze nach der Kundennummer
      
      ' für Basisdaten muss die Abfrage nur angepasst werden, da die Verbindung noch besteht
      basisdatenSuche.SQL = "SELECT nachname,vorname FROM """ &  dateipfad & basisdatenTabelle & """ " & basisdatenTabelle & " WHERE(kundennummer) =" & id
      
      Set basisdatenErgebnis.Query = basisdatenSuche
      If basisdatenErgebnis.Execute Then
         nachnamen(zaehler) = basisdatenErgebnis.getvalue(1)
         vornamen(zaehler) = basisdatenErgebnis.getvalue(2)
      End If
      
      ' Verbindung zu Persoenliches
      If (persoenlichesVerbindung.ConnectTo("dBASE IV")) Then
         Set persoenlichesSuche.Connection = persoenlichesVerbindung
         persoenlichesSuche.SQL = "SELECT geburtsdatum,telefon FROM """ &  dateipfad & persoenlichesTabelle & """ " & persoenlichesTabelle & " WHERE(kundennummer) =" & id
      End If
      
      Set persoenlichesErgebnis.Query = persoenlichesSuche
      If persoenlichesErgebnis.Execute Then
         geburtsdaten(zaehler) = persoenlichesErgebnis.getvalue(1)
         telefon(zaehler) = persoenlichesErgebnis.getvalue(2)
      End If
      zaehler = zaehler +1
   End Forall
   
   Call basisdatenVerbindung.Disconnect ()
   Call persoenlichesVerbindung.Disconnect ()
   
   ' ============================================
   ' Ausgabe der Daten aus beiden Datenbanken
   ' ============================================
   
   ' Definition der Feldnamen
   Dim feldnamen As String
   feldnamen = "kundennummer" & """,""" & "vorname" & """,""" & "nachname" & """,""" & "geburtsdatum" & """,""" & "telefon"
   
   '
   ' CSV-Datei-Operationen
   '
   
   ' CSV-Datei anlegen
   Dim csv_dateinr As Integer
   csv_dateinr% = Freefile()
   Open csv For Output As csv_dateinr
   
   ' Feldnamen in eine neue CSV-Datei schreiben und CSV-Datei schließen
   Write #csv_dateinr, feldnamen
   Close #csv_dateinr
   
   ' CSV-Datei wieder öffnen um die Datensätze anzuhängen
   csv_dateinr% = Freefile()
   Open csv For Append As csv_dateinr
   
   ' Datensätze an die CSV-Datei anhängen
   Dim cnt As Integer
   cnt = 1   
   Forall data In kundennummer
      Print #csv_dateinr,  data &  ",""" & vornamen(cnt) & """,""" & nachnamen(cnt) &  """," & geburtsdaten(cnt) &  ",""" & telefon(cnt) & """"
      cnt = cnt +1
   End Forall
   
   ' CSV-Datei schließen   
   Close #csv_dateinr
   Messagebox "Die Datei wurde gespeichert", 0 + 64 + 0 + 0, "Dateixport nach CSV"
ende:
End Sub

_________________
FAQ gelesen?
=> http://smartsuitefaq.martinholz.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    smartsuitefaq.martinholz.de Foren-Übersicht -> Approach-Scripte Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Protected by Anti-Spam ACP