Autor Thema: LotusScript: ODBC-Import von Kontakten  (Gelesen 6890 mal)

Offline lndsbrgr

  • Frischling
  • *
  • Beiträge: 10
LotusScript: ODBC-Import von Kontakten
« am: 16.09.09 - 10:42:46 »
Hallo!

Ich möchte unsere Kundenstammdaten aus der AS400 zwecks E-Mail-Marketing in ein Adressbuch importieren. Prinzipiell funktioniert es auch, allerdings werden nie mehr als 1542 Datensätze ausgelesen und da liegt das Problem: Unsere Kundendatenbank hat mehrere tausend Einträge.

Der ODBC-Treiber stammt aus dem ClientAccess von IBM. Meines Wissen gibt es hier keine Begrenzung (wurde schon mehrfach in anderen Applikationen genutzt, um derartige Datenmengen aus unserer AS400 zu bekommen...).

Hat jemand hier schon einmal eine ähnliche Erfahrung gemacht??

Das Skript:

Option Public
Uselsx "*LSXODBC"

Sub Initialize
   Dim Session As New NotesSession
   Dim db As NotesDatabase 
   Set db = Session.currentdatabase 
   
   Dim Con As New ODBCConnection 
   Dim Qry As New ODBCQuery 
   Dim res As New ODBCResultSet
   
   
   
   RetCode% = Con.ConnectTo("AS400", "","")
   

   Set Qry.Connection = Con
   Qry.SQL = "SELECT * FROM kd.yku"
   Set Res.Query = Qry
   
   Res.Execute   
   
   Res.CacheLastRowNum = 5000
   Res.LastRow
   
   Rows% = Res.NumRows
   
   columns = res.NumColumns
   rows% = res.NumRows
   
   
   RetCode% = Res.FirstRow   
   
   
   Do While RetCode% =True
      Dim kunde As String
      Dim ansprechp As String
      Dim straße As String
      Dim plz As String
      Dim ort As String
      Dim telefon As String
      Dim bemerkung As String
      
      kunde = Cstr(Res.GetValue("kdnr") )
      'ansprechp = Cstr(Res.GetValue("ansprechp") )
      'straße = Cstr(Res.GetValue("straße") )
      'plz = Cstr(Res.GetValue("plz") )
      'ort = Cstr(Res.GetValue("ort") )
      'telefon = Cstr(Res.GetValue("telefon") )
      'bemerkung = Cstr(Res.GetValue("ort") )
      
      Dim Doc As New NotesDocument(db)   
      
      doc.form = "Person"
      doc.type = "Person"
      doc.view = "People"
      'doc.fullname = kunde
      doc.companyname = kunde
      'doc.lastname = ansprechp
      'doc.businessaddress = straße
      'doc.officezip = plz
      'doc.location = ort
      'doc.officephonenumber = telefon
      'doc.comment = bemerkung
      
      
      'Call doc.ComposeWithForms (True, False)
      Call doc.save (True, True)
      Print "datensatz",res.currentrow  , "von", rows%
      RetCode% = Res.NextRow
   Loop
   
   
   RetCode% = Res.Close(DB_CLOSE)
   RetCode% = Con.Disconnect     
   
End Sub

Cube

  • Gast
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #1 am: 16.09.09 - 10:58:52 »


Servus,

evtl. Workaround:
Versuch mal mittels dem Client-Access ODBC Treiber die Daten nach Exel oder Access auszugeben,
kommen dann alle bzw. mehr Datensätze als 1542?

Wenn ja, evtl. kannst Dir ein Skript schrieben, das ne XLS- oder TXT-Datei ausliest.


Grüße Tim

Offline lndsbrgr

  • Frischling
  • *
  • Beiträge: 10
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #2 am: 16.09.09 - 11:17:31 »
Das wäre denkbar. Ist aber von hinten durch die Brust ins Auge, oder?! ; )

Ich würde es lieber wie geplant abbilden, als zusätzlich einen Umweg über eine weitere Datei zu gehen.

Ja, es kommen in anderen Anwendung mehr als die besagten 1542 Datensätze...

Gruß, Thies

Driri

  • Gast
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #3 am: 16.09.09 - 11:27:51 »
Ist für diese Schnittstelle eine eigene Datenquelle eingerichtet worden ? Wenn ja, vergleich mal die Einstellungen in der Datenquelle mit den anderen, bei denen es funktioniert.

Cube

  • Gast
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #4 am: 16.09.09 - 11:33:59 »


@Thies:

Wenn es nur ne einmalige Sache wäre, würde ich den Workaround versuchen, sollte die
Aktion periodisch öfter ausgeführt werden, dann richtig, ist es nur die "zweitbeste" Lösung  ;)

Kommt ne Fehlermeldung? Oder wie äußert sich das Problem?


Grüße Tim

Offline lndsbrgr

  • Frischling
  • *
  • Beiträge: 10
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #5 am: 16.09.09 - 16:25:32 »
@Driri
Ich nutze meinen lokalen PC und eine mehrfach erfolgreich getestete System DSN.

@Tim
Leider kommt keine Fehlermeldung.

Ich habe nun testweise die Daten komplett in Access importiert (...mit der gleichen System DSN). Die neue Access mdb-Datei habe ich dann ebenfalls per ODBC angezapft und erneut lediglich 1542 Sätze herausbekommen...

Auf einer anderen Seite wurde die "CacheLimit"-Eigenschaft verantwortlich gemacht, damit habe ich aber auch keinen Erfolg. Vielleicht ist irgendwo anders der Cache limitiert.

botschi

  • Gast
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #6 am: 16.09.09 - 17:14:06 »
Wir hatten mal ähnliche Probleme und konnten das dadurch ändern, dass eine Cachevariable auf irgendeinen krummen Wert gesetzt wurde.

Hast Du mal mit deinem Wert 5000 experimentiert?
Das ist doch die Abbruchbedingung oder? Setz den Wert mal auf 10042 oder sowas oder ändere die Abbruchbedingung.


Matthias

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #7 am: 17.09.09 - 09:25:16 »
Hi,

also ich programmiere selten mal was, und auch ganz wenig im LN.

Aber wenn ich mir das so ansehe, ist da nicht die Abbruchbedingung falsch... also wenn ich z.B eine Datei einlese geh ich Zeile für Zeile bis EOF.

Würde man das hier nicht so ähnlich machen?

Mit Access 2007 und V6R1 ging das öffnen der Daten, wobei wir auf unserer Maschine nicht so viele Datensätze hat und auch nur Testdaten. Bei einem Kunden hatte ich vor kurzem mit 2003 und V5R4 (glaub ich) den Zugriff per ODBC eingerichtet.
Das waren über 2000 Datensätze und scheint zu funtkionieren, sonst hätte sich der Kunde ja nochmal gemeldet ;).

MFG Michael

samWare

  • Gast
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #8 am: 17.09.09 - 09:39:30 »
Hallo, ich habe einmal ein paar ganz blöde Fragen. Der Code oben scheint ziemlich Fehlerhaft zu sein.

Frage:

1 - Warum deklarierst du deine Variablen in jedem Loop Durchlauf neu?! (Funktioniert das überhaupt? Ich dachte das giebt ne dicke Fehlermeldung dass diese Variable bereits Deklariert ist).

2 - Warum nutzt du überhaupt Variablen? Sowas wär doch gescheiter: doc.fullname = Cstr(Res.GetValue("kdnr"))

3 - Was würde folgender Code machen: Call doc.ComposeWithForms (True, False) ? Ich wüsste nicht dasses eine solche Methode für das NotesDocument giebt. Ich kenne nur notesDocument.ComputeWithForm( doDataTypes, raiseError )...

Ich hoffe irgendjemand beantwortet mir diese Fragen. Ich will ja schließlich dazulernen :)

mfg Samuel

Offline lndsbrgr

  • Frischling
  • *
  • Beiträge: 10
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #9 am: 17.09.09 - 10:10:21 »
Nochmal allgemein vorweg: Das Skript ist aus dem Forum. Speziell mit LotusScript habe ich bisher noch keine Prgrammiererfahrung.

@Matthias

Der Wert mit der 5000 (Res.CacheLastRowNum = 5000) ist anscheinend nur eine interne Variable (leider hab ich keine Doku dazu gefunden). Hatte ich zum Testen verändern wollen, weil diese laut Debugger auf 1542 gesetzt wird nach dem "res.lastrow". Irrelevant. Ansich sollte hierfür die CacheLimit-Eigenschaft verantwortlich sein. Veränderungen bringen hier aber nichts (außer auf Werte unter 1542...).

@Michael
Mit dem EOF hast Du wohl recht. Die Abbruchbedingung wird in diesem Skript durch den Returncode von "Res.NextRow" vor dem Ende des Loops definiert. Wenn keine weitere Zeile gelifert wird, ist kommt false... allerdings könnte es natürlich sein, dass es hier mit einem EOF auch ginge. Dazu fehlt mir die Erfahrung. Also...

Frage: Gibt es in LotusScript auch eine EOF-Eigenschaft, die für die Schleife genutzt werden könnten??? Vielleicht wäre das die Lösung...

@Samuel
1 - Du hast Recht: eigentlich ergibt das gar keinen Sinn! Bin ich bisher gar nicht drüber gestolpert...wie gesagt: das Skript stammt aus dem Forum.

2 - s. 1. - Es wäre wohl überischtlicher, falls die Variablen mehrfach verwendet würden... zur Performance kann ich leider ncihts sagen

3 - Stimmt: Diese Methode gibt's nicht. War ebenfalls schon im beispielskript auskommentiert...


Vielen Dank schon mal für eure Mithilfe!

Gruß, Thies

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #10 am: 17.09.09 - 10:34:35 »
@Samuel

1- Variablen werden zur Compile-Zeit angelegt und nicht zur Laufzeit. Es ist daher vollkommen egal, wo die in Code stehen, haupsache sie sind im Quelltext vor der erstmaligen Benutzung deklariert. Es gibt sogar Programmier-Philosphien, die sagen, dass Variablen nicht im Kopf des Quellcodes Deklariert werden sollen, siondern in unmittelbarer Nähe ihrer Verwendung.

2 - das erleichtert das Debugging ungemein.


Thomas

samWare

  • Gast
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #11 am: 17.09.09 - 12:07:08 »
@ Thomas

2 - Zum Debuggen geb ich dir recht, sonst isses einfach nur überflüssig

1 - Mir geht es nicht darum dass er die Deklaration in nähe der Variablen getätigt hat, das mache ich genauso. Mir geht es um den ständigen redeclair den er da durchführt. So wie ich das sehe stehen die Deklarationen in ner Schleife.

Und das war ja auch meine Frage. Ich dachte immer Notes mag sowas garnicht.

Mfg Samuel
« Letzte Änderung: 17.09.09 - 12:11:43 von samWare »

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #12 am: 17.09.09 - 12:14:58 »
@ Thomas

1 - Mir geht es nicht darum dass er die Deklaration in nähe der Variablen getätigt hat, das mache ich genauso. Mir geht es um den ständigen redeclair den er da durchführt. So wie ich das sehe stehen die Deklarationen in ner Schleife.

Mfg Samuel

???
Es gibt kein "Redeclare"!
Deklarationen finden zur Compile-Zeit statt, Schleifen werden zur Laufzeit ausgeführt. Da überschneidet sich nichts.

(Was anderes ist es allerdings, wenn Du mit ReDim arbeitest... das wird zur Laufzeit ausgeführt).

Thomas

samWare

  • Gast
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #13 am: 17.09.09 - 13:11:37 »
@ Thomas

Danke dir! Wieder was neues gelernt ;) Ich liebe dieses Forum...

mfg Samuel

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #14 am: 17.09.09 - 17:28:11 »

???
Es gibt kein "Redeclare"!
Deklarationen finden zur Compile-Zeit statt, Schleifen werden zur Laufzeit ausgeführt. Da überschneidet sich nichts.

Thomas

AFAIK hat Samuel aber recht, dass dir der Code in früheren Notes-Versionen "um die Ohren geflogen" wäre  ;)

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #15 am: 17.09.09 - 19:45:12 »


AFAIK hat Samuel aber recht, dass dir der Code in früheren Notes-Versionen "um die Ohren geflogen" wäre  ;)

Gruß
Roland

also ich hab gerade nochmal die 5.0.8 angeworfen: kein Problem
auf meiner "normalen" 6.5-Umgebung: auch kein Problem.

Da müsste man schon in die Urzeiten von LotusScript zurückgehen (Script-Version 2.0?).

Thomas

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #16 am: 18.09.09 - 07:36:54 »
Etwas Offtopic

@TRO
Zitat
Da müsste man schon in die Urzeiten von LotusScript zurückgehen (Script-Version 2.0?).
???

Welche Version 2.0?

Lotus Script gibt es doch erst seit Version 4 von Lotus.


Andreas

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: LotusScript: ODBC-Import von Kontakten
« Antwort #17 am: 18.09.09 - 07:58:06 »
Etwas Offtopic

@TRO
Zitat
Da müsste man schon in die Urzeiten von LotusScript zurückgehen (Script-Version 2.0?).
???

Welche Version 2.0?

Lotus Script gibt es doch erst seit Version 4 von Lotus.


Andreas

Auch die in Notes und den anderen Lotus-Produkten (1-2-3, WordPro, Freelance,...) eingebauten Core-Script-Maschinen haben Versionsnummern. Seit Notes 5.x ist meines Wissens die Version 4 die aktuelle.
Natürlich wurde LotusScript erstmalig in Notes4 eingeführt. Die dort verwendete Script-Maschine hatte die Versionsnummer 3.

Thomas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz