German Eine Person aus bestehenden Daten in Outlook heraussuchen

Discussion in 'German Forum' started by JOTHA, Nov 13, 2008.

  1. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo Forum,

    ich möchte aus meinen Outlook-Kontakten eine Person heraussuchen und dann in einen neuen Datensatz in meiner B4P-Applikation einfügen.

    Doch schon beim Heraussuchen gibt es ein Problem.
    Ich habe das Beispiel aus der Online-Hilfe verwendet und mit meinen Begriffen abgewandelt.
    Code:
    '------------------------------------------------------
    ' Eine Person aus  bestehenden Daten in Outlook heraussuchen
    '------------------------------------------------------
    Sub ButtonAusOutlookHeraussuchen_Click

          KontaktPersonA.New1
          PimCollectionPersonA.New1(
    "Contacts")
          PimCollectionPersonA.SortItems(
    "FirstName",False'sorts the contacts using the first name field.
          For i = 0 To PimCollectionPersonA.Count - 1
                KontaktPersonA.Value = PimCollectionPersonA.GetItem(i)
                KontaktListe.Add(KontaktPersonA.FirstName & 
    " " & KontaktPersonA.LastName) 'Add the contact's first and last name to ListBox1.
          Next
    End Sub
    Leider kann man die Ausführung nur auf dem Pocket-PC testen, auf dem Desktop sieht alles so aus als ob es funktionieren würde, da die Outlook-Funktion dort ja anscheinend nur als "Dummy" ausgeführt wird.

    Auf dem Pocket-PC erscheint die folgende Meldung (ist als BildDatei angehängt).

    Kann das auch daran liegen, daß das Programm über 3.800 Kontakte durchsuchen muß und sich dann dabei aufhängt? Ich glaube das eher nicht, oder?
     

    Attached Files:

  2. specci48

    specci48 Well-Known Member Licensed User

    Hallo JOTHA,

    die Outlook.dll auf dem Desktop ist tatsächlich "nur " eine Dummy Dll.
    Da ich die Fehlermeldung in Deinem Anhang leider nicht eindeutig entziffern kann (das Bild ist einfach zu sehr komprimiert) habe ich momentan auch keine Lösung dafür.
    Durchsuchen tut er ja nicht direkt, sondern er füllt im Beispiel der Reihe nach eine Combobox. Ein OutOfMemory Error ist dann abhängig vom vorhandenen Speicherplatz.
    Was passiert denn, wenn Du z.B. nur die ersten 100 Kontakte einliest? Klappt es dann, oder hängt sich der Ppc hierbei auch schon auf? Falls ja, liegt es jedenfalls nicht an der Menge.


    Gruß
    specci48
     
  3. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo specci48,

    entschuldige, daß Du die angehängte Datei nicht lesen konntest, aber die Einschränkung bei upload war max. 19,5k, da mußte ich so stark komprimieren.

    Der Text war folgender:

    Den "Hollmann" gibt es 100% in meinen Kontakten (das bin ich selber), also müßte der auch gefunden werden.

    ... wenn ich nur wüßte, wie ich nur die ersten 100 Kontakte einlesen kann, dann würde ich es ja mal ausprobieren. ;)
     
    Last edited: Nov 13, 2008
  4. klaus

    klaus Expert Licensed User

    Hallo JOTHA,

    In deiner Programmlinie hast Du scheinbar ein Leerzeichen zwischen Last und name name ?
    Code:
    i = PimCollectionPersonA.FindItem("KontaktPersonA.Last name","Hollmann")
    Sollte die nicht so aussehen ?
    Code:
    i = PimCollectionPersonA.FindItem("KontaktPersonA.LastName","Hollmann")
    Grüsse.
     
  5. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo Klaus,

    danke für deinen Hinweis:

    Das ist mir auch schon aufgefallen, aber im Code ist es korrekt geschrieben worden.

    Das Witzige ist: Sobald ich es hier im Posting in die "Code-Schweifen" setze, trennt das Posting die zwei Worte automatisch. Deswegen habe ich 2 mal versucht, das Posting zu editieren, aber jedesmal ist es so wie oben beschrieben. Komisch, oder?

    Jetzt aber das Wichtigste (auch an specci48): Es funktioniert plötzlich!

    Ich weiß auch nicht warum. :confused:

    Leider ist das nicht die Lösung, die ich eigentlich haben wollte. Jetzt habe ich eine Kontaktliste mit allen Kontakten drin.

    Ich möchte aber folgendes machen:

    Es gibt 2 Felder: Vorname und Nachname. Das sind die Suchkriterien.

    Wenn ich dann auf einen Button drücke, soll das Programm alle Kontakte nach diesen 2 Kriterien durchsuchen und mir dann in einer Liste das Gefundene zur Auswahl anbieten.

    Wenn ich dann auf die Auswahl klicke, sollen alle Felder (auch die anderen wie z.B. Telefon, Handy, E-Mail, Straße, etc.) automatisch mit Daten gefüllt werden.

    So etwas habe ich schon mit XSForms programmiert, aber hier bei B4P ist das ganz anders.

    Ich knie mich da mal rein, wenn jemand einen Tipp hat bis ich sehr dankbar.

    Entschuldigt nochmal die "Irreführung"! :(
     
  6. JOTHA

    JOTHA Well-Known Member Licensed User

    Nur zur Information!

    In VBScript sieht das so aus:
    Code:
    '----------------------------------------------------------------------------
    ' Funktion: imgOutlookVerknuepfung_OnClick 
    '----------------------------------------------------------------------------
    Sub imgOutlookVerknuepfung_OnClick()
        
       Meldung = 
    msgbox("Daten aus Pocket-Outlook übertragen und aktualisieren ? ------------------------------------- Wenn hier bereits Daten eingetragen sind, werden diese überschrieben !", MBStyle.YesNo + MBStyle.Question, "Pocket-Outlook-Daten")
       
    If Meldung = vbYes Then

       
    Dim outlook
       
    Dim contact
       
       Set outlook = CreateObject(
    "PocketOutlook.Application")
          outlook.logon
       
       Set 
    contact = outlook.GetDefaultFolder(10).Items.Find _
          (
    "[FileAs] = " & """" & eingabeNachname11.Value & ", " & eingabeVorname11.Value & """")
       
       
    If contact Is Nothing Then
          App.PlaySound(
    "\Windows\Notify.wav")
          
    MsgBox("Achtung: Kein Kontakt mit diesem Vornamen und Nachnamen gefunden oder die Felder sind nicht richtig ausgefüllt ! ------------------------------------------------ Bitte Vorname und/oder Nachname korrigieren.")
          App.PlaySound(
    "\Windows\Clipboard.wav")
          
       
    Else
          App.PlaySound(
    "\Windows\Notify.wav")
          
    Contact.Display
          App.PlaySound(
    "\Windows\Clipboard.wav")
          
       Set 
    contact = outlook.GetItemFromOid(contact.oid)
          eingabeNachname11.Value = 
    contact.LastName
          eingabeVorname11.Value = 
    contact.FirstName
          auswahlAnredeTitel11.Value = 
    contact.Title
          ...
                    ...
          
    'Hochzeitstag.Value = contact.anniversary
       
       
    End If
             
       
    Else
         App.PlaySound(
    "\Windows\Clipboard.wav")'Code für "Nein"
       
       
    End If 
       
       outlook.logoff

    End Sub
    :)
     
  7. specci48

    specci48 Well-Known Member Licensed User

    Ich habe hierfür mal ein Beispielprogramm angehangen.
    Die Kontaktliste wird nach Nachname sortiert und dann wird der erste Kontakt zum eingegebenen Nachnamen gesucht. Weil man immer nur nach einem Kriterium sortieren bzw. suchen kann geht es dann in einer Schleife weiter. Ab der ersten Fundstelle wird jeweils der Vorname verglichen und bei Übereinstimmung erhält die Beispieltabelle einen entsprechenden Zeileneintrag. Dann wird die Kontaktposition um 1 erhöht und, sofern man nicht das Ende der Kontake erreicht hat, der nächste Kontakt eingelesen.

    Ich hoffe Dir ist damit ein wenig geholfen.


    Gruß
    specci48
     

    Attached Files:

  8. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo specci48,

    Sorry, das ich mich jetzt erst wieder melde, um Dir zu danken.

    "Ein wenig geholfen" ist gut! Du hast mir SEHR GEHOLFEN !

    Eine Frage habe ich aber noch:
    Wenn man die Suche ein 2. Mal ausführt, kommt eine Fehlermeldung.

    Wie kann man diese verhindern (allerdings ohne das "abfangen" mit ErrorLabel)?

    Danke nochmals im Voraus!
     
  9. specci48

    specci48 Well-Known Member Licensed User

    Hi JOTHA,

    ... um so besser ... ;)

    In meinem Beispiel funktioniert die mehrfache Suche ja problemlos. Hast Du vielleicht bei der Übernahme in Dein Programm etwas übersehen? Welche Abbruchmeldung bekommst Du denn (ohne Errorlabel)?


    Gruß
    specci48
     
  10. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo specci48,

    Ich habe dein Beispielprogramm nochmals getestet, was ja leider immer nur auf dem PPC geht, und es ist tatsächlich so, daß man damit mehrfache Suchen durchführen kann.

    Also liegt der Fehler bei mir.

    Ich dachte, es geht nur einmal, deshalb habe ich eine ErrorLabel-Schleife bei mir eingebaut.

    Ich teste jetzt mal mein Programm und hoffe, den Fehler zu finden. In jedem Fall poste ich dann das Ganze (egal ob es dann funzt oder nicht), denn aus Fehlern lernt man ja auch was ...
     
  11. JOTHA

    JOTHA Well-Known Member Licensed User

    Hier ist der Code ...

    Hier ist der (abgeänderte) Code:
    Code:
    '------------------------------------------------------
    ' Eine Person aus  bestehenden Daten in Outlook heraussuchen
    '------------------------------------------------------
    Sub ButtonAusOutlookHeraussuchen_Click
        
    Sip (False)
       WaitCursor (
    True)
    '   ErrorLabel(ErrorLabelZweimalSuchenGehtNicht)
       KontaktPersonA.New1
        PimCollectionPersonA.New1(
    "Contacts")
       PimCollectionPersonA.SortItems(
    "LastName",False)
       KontaktSucheTabelle.AddCol(cString, 
    "Nachname"80)
       KontaktSucheTabelle.AddCol(cString, 
    "Vorname"70)
       KontaktSucheTabelle.AddCol(cString, 
    "Geburtstag"75)
       KontaktSucheTabelle.AddCol(cString, 
    "Notizen"230)
       KontaktSucheTabelle.AddCol(cString, 
    "Telefon"70)
       KontaktSucheTabelle.Clear
       pos = PimCollectionPersonA.FindItem(
    "LastName", Nachname.Text)
       
    If pos = -1 Then
           
    Msgbox("Dieser Kunde ist in Pocket-Outlook noch nicht vorhanden."" Suchergebnis", cMsgboxOK, cMsgboxHand)
          WaitCursor (
    False)
          
    Return
        
    End If   
       KontaktPersonA.Value = PimCollectionPersonA.GetItem(pos)   
       
    Do While (pos < PimCollectionPersonA.Count)   AND (KontaktPersonA.LastName = Nachname.Text)
          
    If  KontaktPersonA.FirstName = Vorname.Text Then
             KontaktSucheTabelle.AddRow(KontaktPersonA.LastName, KontaktPersonA.FirstName, KontaktPersonA.Birthday, KontaktPersonA.Body, KontaktPersonA.HomeTelephoneNumber)
          
    'die Daten aus der "KontaktSucheTabelle" in die Felder übernehmen:
          mPersonA.Anrede.Text = KontaktPersonA.Title
    '      mPersonA.Geburtstag.Text = KontaktPersonA.Birthday
          mAdresseTelefon.Straße.Text = KontaktPersonA.HomeAddressStreet
          mAdresseTelefon.PLZ.Text = KontaktPersonA.HomeAddressPostalCode
          mAdresseTelefon.Ort.Text = KontaktPersonA.HomeAddressCity
          mAdresseTelefon.Telefon.Text = KontaktPersonA.HomeTelephoneNumber
          mAdresseTelefon.Handy.Text = KontaktPersonA.MobileTelephoneNumber
          mAdresseTelefon.EMail.Text = KontaktPersonA.Email1Address
          
    'wählt automatisch aus "Die Person ist bekannt."
          mPersonA.AusweisArt.SelectedIndex = 1
          
    'Focus: Geht dann automatisch mit dem Cursor zum Feld "Geburtsort"
          mPersonA.Geburtsort.Focus
          
    End If
          pos = pos + 
    1
          
    If pos < PimCollectionPersonA.Count Then
             KontaktPersonA.Value = PimCollectionPersonA.GetItem(pos)
          
    End If
       
    Loop
       
    If KontaktSucheTabelle.RowCount = 0 Then
          
    Msgbox("Dieser Kunde ist in Pocket-Outlook noch nicht vorhanden."" Suchergebnis", cMsgboxOK, cMsgboxHand)
       
    End If
       WaitCursor (
    False)
    '   ErrorLabelZweimalSuchenGehtNicht:
    '   Msgbox("Mehr als einmal SUCHEN geht NICHT. Für eine neue Suche muß das Programm neu gestartet werden.", " Hinweis", cMsgboxOK, cMsgboxHand)
    End Sub
    Nach der zweiten Suche erscheint die angehängte Fehlermeldung, wobei die betreffende "Zeile 170" diese ist:
    Code:
    KontaktSucheTabelle.AddCol(cString, "Nachname"80)
    P.S.: Bei dieser Gelegenheit - ich habe ein Problem bei der Datenübernahme des Geburtstages (Birthday), deshalb ist ist diese Zeile deaktiviert.
     
    Last edited: Nov 19, 2008
  12. JOTHA

    JOTHA Well-Known Member Licensed User

    ... Fehler gefunden ...

    Hallo specci48,

    ich habe (glaube ich) den Fehler gefunden.

    Diese Zeilen waren in der selben Sub zusammen, während Du diese Zeilen in "App_Start" hattest:

    Code:
    KontaktPersonA.New1
    PimCollectionPersonA.New1(
    "Contacts")
       PimCollectionPersonA.SortItems(
    "LastName",False)
       KontaktSucheTabelle.AddCol(cString, 
    "Nachname"80)
       KontaktSucheTabelle.AddCol(cString, 
    "Vorname"70)
       KontaktSucheTabelle.AddCol(cString, 
    "Geburtstag"75)
       KontaktSucheTabelle.AddCol(cString, 
    "Notizen"230)
       KontaktSucheTabelle.AddCol(cString, 
    "Telefon"70)
    Das Ganze habe ich jetzt in einen anderen Bereich (beim Anzeigen des Modules mit XXX_Show) geschoben, und schon funktioniert es wieder (zumindest auf dem Desktop)!

    Ich melde mich, wenn es auch auf dem PPC klappt.
     
    Last edited: Nov 19, 2008
  13. JOTHA

    JOTHA Well-Known Member Licensed User

    Ergänzung: Diese Zeilen haben auch bei der Sub "XXX_Show" eine Fehlermeldung verursacht.

    Jetzt habe ich es in die "Globals" verschoben und es scheint jetzt 100% zu funktionieren (auf dem Desktop).
     
  14. JOTHA

    JOTHA Well-Known Member Licensed User

    ... funktioniert jetzt auch auf dem Pocket-PC

    Also, es klappt jetzt auch auf dem Pocket-PC.

    Danke nochmals für den Code, specci48! :)
     
  15. specci48

    specci48 Well-Known Member Licensed User

    Gern geschehen... :)
     
  16. JOTHA

    JOTHA Well-Known Member Licensed User

    ... wenn die Suche dann 2 Ergebnisse liefert?

    Hallo specci48,

    wenn die Suche dann 2 Ergebnisse liefert, weil z.B. zweimal ein "Hans Maier" vorkommt, dann kann es zwei Gründe geben, warum das so ist:

    a) Die Person ist irrtümlich 2 x in Outlook eingetragen.
    b) Die Person gibt es tatsächlich 2 mal, es handelt sich aber um 2 verschiedene Personen (in der Regel mit verschiedenen Geburtstagen.

    Die Frage daraus:

    Wie kann ich eine Person durch "anklicken" in der Tabelle auswählen?


    Brauche ich dazu die "ListView" von Filippo (mit CheckBoxen in der Tabelle) oder reicht da die "normale Tabelle" und dazu etwas Code? :confused:
     
  17. specci48

    specci48 Well-Known Member Licensed User

    Letzteres reicht! Im Anhang findest Du hierzu ein erweitertes Beispiel.

    Die Tabelle hat eine zusätzliche (erste) Spalte bekommen, welche durch die Breite 0 aber unsichtbar bleibt. Hier merkt sich das Programm die tatsächliche Kontaktposition in der PimCollection.
    Die Auswahl wird über das SelectionChanged Event der Tabelle abgefangen. Je nach Auswahl wird dann über die tatsächliche (gemerkte) Position zum Tabelleneintrag der zugehörige Kontakt bestimmt. Anschließend kann man dazu dann wie gewohnt beliebige Daten zu diesem Kontakt anzeigen oder ggf. auch ändern.


    Gruß
    specci48
     

    Attached Files:

  18. JOTHA

    JOTHA Well-Known Member Licensed User

    Super !!!

    Hallo specci48,

    vielen Dank für deine Hilfe.

    Der Code funktioniert hervorragend !!!

    :sign0188:
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice