Announcement

Collapse
No announcement yet.

Outlookkontakte befüllen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Outlookkontakte befüllen.

    Hi,

    Ich übertrage mittels COM Kontaktinformationen aus einer Datenbank nach Outlook. Dabei wird auch das Geburtstagsfeld (.Birthday ) mit ausgefüllt. Dieses veranlasst Outlook dazu, vollautomatisch einen ganztägigen Kalendereintrag anzulegen. Soweit ja ganz nett. Nur wenn ich jetzt meine Daten ein zweites Mal exportiere, dann lösche ich vorher alle existierenden Kontakte in der Outlookdatei.

    <pre>
    .
    .
    .
    while ItemColl.Count > 0 do
    Begin
    TContactItem( ItemColl.Item( 1 ) ).Delete;
    FormMain.ProgressBar1.Stepit;
    end;
    OutlookApplication1.DisConnect;
    .
    .
    .
    </pre>

    Leider werden die ehemals automatisch angelegten Kalendereinträge nicht mit gelöscht.
    Wie werde ich diese ( und auch nur diese, keine evtl. anderen Einträge ) wieder los ??

    Gruß
    Gesine

  • #2
    Hi Gesine,
    <br>
    <br>den Export mache ich auch so (Outlook Daten löschen und export).
    Bei mir wird jedoch beim Löschen der Adresse auch automatisch der Kalendereintrag gelöscht.
    <br>Was habe ich gemacht:
    <br>(D5E Update1, Outlook 97 ohne SP's)
    <br>Da ich in meiner Export Funktion kein Geburtsdatum exportiere habe ich zu Testzwecken bei einem Kontakt von Hand ein Geburtsdatum eingetragen (via Outlook). Und siehe da der Kalendereintrag wurde automatisch erzeugt.
    <br>Nun wird der Export gemacht (die Daten gelöscht):
    <pre>
    procedure TfrmExportOutlook.btnStartClick(Sender: TObject);
    Var
    DefNamespace : NameSpace;
    Folder : MAPIFolder;
    ItemColl : Items;
    MyContact : OleVariant;
    MyNewContact : _DContactItem;
    i : Integer;
    MyBody : String;
    begin
    If TdxfColorButton(Sender).Caption.Strings[0] = 'start' Then
    Begin
    lblInfo.Caption := 'Bitte warten ...';
    Application.ProcessMessages;
    Try
    OutlookApplication1.Connect;
    Try
    DefNameSpace := OutlookApplication1.GetNamespace('MAPI');
    Folder := DefNameSpace.GetDefaultFolder(olFolderContacts);
    ItemColl := Folder.Items;
    While ItemColl.Count > 0 do
    Begin
    MyContact := ItemColl.Item(1);
    MyContact.Delete;
    ItemColl := Folder.Items;
    End;
    .
    .
    .
    EXPORT
    .
    .
    .
    </pre>
    <br>Die Kontakte inkl. Termin wurden gelöscht.
    <br>
    <br>Ich hoffe das hilft dir weiter.
    <br>
    <br>mfg
    <br>P

    Comment


    • #3
      Hi Patrick,

      1)
      Bis auf den Umstand, dass ich das Phänomen mit OL2000 gesammelt habe unterscheidet sich dein 'Lösungsansatz' ja nun nicht von meinem. Trotzdem Danke.

      2)
      Wenn selbiges Vorgehen in deiner OL (97) Version funktioniert, dann muss ich den schwarzen Peter wohl mal wieder in Richtung M$ schieben.

      3)
      Vielleicht fällt aber einem alten MS-Kämpen wie A. Kosch ein Lösungsansatz aus dem Ärmel ( allein um die Burg zu verteidigen... ) ;-) ;-) ??

      Gruß
      Gesin

      Comment


      • #4
        Hi Gesine,
        <br>
        <br>1)
        <br>Habe es gerade noch mal mit OL2000 getestet (wie oben beschrieben).
        <br>Es funktioniert.
        <br>Verwende mal nicht TContactItem sondern OLEVariant. Vorteil ist, das man dann auch direkt mit verschiedenen Outlook Versionen klar kommt. TContactItem ist zwar auch auf meinem Form drauf, wird jedoch lediglich benutzt um wärend der Entwicklung schnell die Methoden und Eigenschaften zu durchforsten damit man diese dann auf den OLEVariant anwenden kann. Sonst wird nix damit gemacht.
        <br>
        <br>2) Wer weiß???
        Wenn es mit OLEVariant nun klappt, dann ist die Farge wer hat da was bei TContactItem vermurkst.
        <br>
        <br>Mehr dazu (wenn nicht schon vorhanden):
        <br>http://entwickler.com/buecher/2/teaser.html
        <br>
        <br>mfg
        <br>P

        Comment


        • #5
          Hi Patrick,

          1)
          Danke für deine Hilfe aufs Pferd. Es funktioniert tatsächlich mit OLEVariant. Wobei sich die Frage stellt, warum in der Late-Bind-Version ItemColl immer neu belegt werden muss, damit es nicht kracht.

          <pre>
          while ItemColl.Count > 0 do
          Begin
          CurrContact := ItemColl.Item( 1 );
          OleVariant( ItemColl.Item( 1 ) ).Delete;
          ItemColl := Contacts.Items;
          FormMain.ProgressBar1.Stepit;
          end;

          </pre>

          2)
          Tatsächlich ne' gute Frage

          Frohen Gruß

          Gesin

          Comment

          Working...
          X