Objektverbindung trennen

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Objektverbindung trennen

    Hallo,

    benötige mal eure Hilfe... komm da nicht weiter...


    Verbinde mein Programm mit Outlook, hole mir über DragDrop ein Kontakte in mein Programm - funktioniert soweit.

    Jedoch habe ich das Problem, dass die Verbindung mit Outlook nach der Übernahme meines Kontaktes nicht geschlossen wird.

    So öffne ich die Verbindung:

    VB.NET-Quellcode

    1. Imports Outlook = Microsoft.Office.Interop.Outlook
    2. ...
    3. Private Sub DragDrop__Personen_Funtkion_2(ByVal e As System.Windows.Forms.DragEventArgs, ByVal REF_Fa As Double)
    4. Dim myobj As Object
    5. ...
    6. If e.Data.GetDataPresent("FileGroupDescriptor") Then
    7. For i As Integer = 1 To objOL.ActiveExplorer.Selection.Count
    8. myobj = objOL.ActiveExplorer.Selection.Item(i)
    9. 'MsgBox(myobj.LastName & " " & myobj.FirstName & " " & myobj.CompanyName)
    10. Dim Geburtstag As String = myobj.Birthday
    11. .....
    12. End If
    13. myobj = Nothing


    myobj = Nothing scheint nicht auszureichen...

    Könnt Ihr mir vielleicht sagen wie ich die Verbindung schließe bzw. wo ich was darüber finden könnte ?
    Oder nen Anhaltspunkt nach was für Infos ich suchen könnte...

    Lg lris
    Hi, danke für die schnelle Antwort...

    das gibts gleich als Fehlermeldung:

    Für den Parameter "o" von "Public Shared Function ReleaseComObject(o As Object) As Integer"


    oder habe ich den falsch eingefügt `?


    VB.NET-Quellcode

    1. End Try
    2. Next
    3. End If
    4. System.Runtime.InteropServices.Marshal.ReleaseComObject
    5. con.Close()
    6. Schlussarbeiten()
    7. Datensaetze_laden()
    8. End Sub



    EDIT:

    Könnte es sein, dass ich nur irgendwie das hier leeren muß, bevor ich einen neuen markiere...

    VB.NET-Quellcode

    1. objOL.ActiveExplorer.Selection.Item(i)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    ok...

    also so...

    VB.NET-Quellcode

    1. System.Runtime.InteropServices.Marshal.ReleaseComObject(objOL)


    hat nur leider keinen Erfolg gebracht


    Muß ich den die Verbindung wirklich trennen, erreichen will ich eigentlich folgendes...

    Wenn ich in Outlook Kontakte einen Kontakt makiere, ihn dann in mein Form ziehe - soll er übernommen werden. Der erste Kontakt den ich rüberziehe per DragDrop funktioniert, aber wenn ich einen weiteren markiere und rüberziehe wird immer noch der erste verwendet...
    Und was ich gerade entdeckt habe, wenn ich den zweiten Kontakt öffnen will in Outlook bekomme ich die Fehlermdeldung... siehe Bild.
    Dann makiert er die Ganze Gruppe (Kategorie in Outlook) auf einmal...

    Daher kam auch meine Frage vorhin unter EDIT, ob ich nicht einfach (nur wie?) das select leeren muß ??

    VB.NET-Quellcode

    1. objOL.ActiveExplorer.Selection.Item(i)


    Lg lris
    Bilder
    • Gruppe.jpg

      27,21 kB, 298×180, 126 mal angesehen
    Also ich habe mich vor ein paar Tage auch mit der Outlook Kommunikation beschäftigt. Wenn du den nächsten Kontakt haben möchtest, musst du über Item den nächsten Eintrag holen. Bei Item musst du dann auch den Index erhöhen, aber Achtung bei Outlook wird bei 1 angefangen zu zählen. Das Kontakte Objekt holst du über ".GetNamespace("MAPI").GetDefaultFolder(10)"
    ok... jetzt blick ich nicht mehr durch...

    so versuche ich den Kontakt zu übernehmen... Wie gesagt, dass funktioniet immer nur beim ersten makieren des Kontaktes, wird ein weiterer markiert und zu übernehmen versucht, wird immer noch der erte verwendet - und wenn ich einen Kontakt in Outlook öffen will kommt die Fehlermeldung... wie unten das Bild...

    VB.NET-Quellcode

    1. Private Sub DragDrop__Personen_Funtkion(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DGV_Personen.DragDrop
    2. Dim myobj As Object
    3. Dim REF_Fa As Double
    4. Dim Result1 As DialogResult
    5. Dim Result2 As DialogResult
    6. Result1 = MessageBox.Show("Soll der neue Kontakt der oben ausgewählten Firma zugeordnet werden ?" & vbCrLf & vbCrLf & _
    7. "Wenn nein wird Kontakt ohne Firmenzugehörigkeit angelegt !", " DIMS Info...", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)
    8. If Result1 = DialogResult.Yes Then
    9. REF_Fa = CDbl(DGV_Kundenliste.Rows(DGV_Kundenliste.CurrentRow.Index).Cells(0).Value)
    10. DragDrop__Personen_Funtkion_2(e, REF_Fa, 1)
    11. Else
    12. REF_Fa = 0
    13. Dim Ref_Firma_Name As String = Nothing
    14. Dim con1 As New OleDb.OleDbConnection
    15. Dim cmd1 As New OleDb.OleDbCommand
    16. Dim reader1 As OleDb.OleDbDataReader
    17. con1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Form1.Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    18. cmd1.Connection = con1
    19. If e.Data.GetDataPresent("FileGroupDescriptor") Then
    20. For i As Integer = 1 To objOL.ActiveExplorer.Selection.Count
    21. myobj = objOL.ActiveExplorer.Selection.Item(i)
    22. Try
    23. cmd1.CommandText = "SELECT * FROM WW_Firmen WHERE FA_Name1 LIKE '%" & myobj.CompanyName & "%'"
    24. con1.Open()
    25. reader1 = cmd1.ExecuteReader()
    26. Do While reader1.Read()
    27. REF_Fa = CDbl(reader1("ID"))
    28. Ref_Firma_Name = reader1("FA_Name1").ToString
    29. Loop
    30. con1.Close()
    31. Catch ex As Exception
    32. MessageBox.Show(ex.Message & vbCrLf & "Fehler DragDrop Personen - Zeile 633")
    33. con1.Close()
    34. End Try
    35. If REF_Fa = 0 Then
    36. MessageBox.Show("Keine Firma passende Firma gefunden" & vbCrLf & "Person kann nicht angelegt werden...", "DIMS Info", MessageBoxButtons.OK, MessageBoxIcon.Error)
    37. Exit Sub
    38. Else
    39. Result2 = MessageBox.Show("Es wurde eine passende Firma gefunden... " & vbCrLf & vbCrLf & _
    40. "Firma: " & Ref_Firma_Name & vbCrLf & vbCrLf & _
    41. "Soll die Person dieser Firma zugeordnet werden ?", "DIMS Info...", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
    42. If Result2 = DialogResult.Yes Then
    43. DragDrop__Personen_Funtkion_2(e, REF_Fa, i)
    44. Else
    45. MessageBox.Show("Abbruch, keine passende Firma gefunden...", "DIMS Info...", MessageBoxButtons.OK, MessageBoxIcon.Information)
    46. Exit Sub
    47. End If
    48. End If
    49. Next
    50. objOL.ActiveExplorer.ClearSelection()
    51. End If
    52. End If
    53. End Sub
    54. Private Sub DragDrop__Personen_Funtkion_2(ByVal e As System.Windows.Forms.DragEventArgs, ByVal REF_Fa As Double, ByVal Makiert As Integer)
    55. Dim myobj As Object
    56. Dim con As New OleDb.OleDbConnection
    57. Dim cmd As New OleDb.OleDbCommand
    58. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Form1.Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    59. con.Open()
    60. cmd.Connection = con
    61. If e.Data.GetDataPresent("FileGroupDescriptor") Then
    62. myobj = objOL.ActiveExplorer.Selection.Item(Makiert)
    63. Dim Geburtstag As String = myobj.Birthday
    64. If Geburtstag = "" Or Geburtstag = "01.01.4501" Then
    65. Geburtstag = ""
    66. Else
    67. Geburtstag = myobj.Birthday
    68. End If
    69. cmd.CommandText = "INSERT into WW_Personen (P_RefFirma, " & _
    70. "P_Anrede, " & _
    71. "P_Titel, " & _
    72. "P_Vorname, " & _
    73. "P_Nachname, " & _
    74. "P_Position, " & _
    75. "P_Tel1, " & _
    76. "P_Tel2, " & _
    77. "P_Mobil, " & _
    78. "P_Fax, " & _
    79. "P_Mail1, " & _
    80. "P_Mail2, " & _
    81. "P_TelPrv, " & _
    82. "P_MobilPrv, " & _
    83. "P_StrPrv, " & _
    84. "P_PlzPrv, " & _
    85. "P_OrtPrv, " & _
    86. "P_Geburtstag, " & _
    87. "P_Partner, " & _
    88. "P_Du, " & _
    89. "P_StrFir, " & _
    90. "P_PlzFir, " & _
    91. "P_OrtFir, " & _
    92. "P_Firma, " & _
    93. "P_PersNewLetter, " & _
    94. "P_PersNewLOK, " & _
    95. "P_Hauptkontakt) " & _
    96. "VALUES (" & _
    97. "" & REF_Fa & ", " & _
    98. "'" & myobj.Title & "', " & _
    99. "'', " & _
    100. "'" & myobj.FirstName & "', " & _
    101. "'" & myobj.LastName & "', " & _
    102. "'" & myobj.JobTitle & "', " & _
    103. "'" & myobj.BusinessTelephoneNumber & "', " & _
    104. "'', " & _
    105. "'" & myobj.MobileTelephoneNumber & "', " & _
    106. "'" & myobj.BusinessFaxNumber & "', " & _
    107. "'" & myobj.Email1Address & "', " & _
    108. "'', " & _
    109. "'" & myobj.HomeTelephoneNumber & "', " & _
    110. "'', " & _
    111. "'" & myobj.HomeAddressStreet & "', " & _
    112. "'" & myobj.HomeAddressPostalCode & "', " & _
    113. "'" & myobj.HomeAddressCity & "', " & _
    114. "'" & myobj.Birthday & "', " & _
    115. "'" & myobj.Spouse & "', " & _
    116. "'False', " & _
    117. "'" & myobj.BusinessAddressStreet & "', " & _
    118. "'" & myobj.BusinessAddressPostalCode & "', " & _
    119. "'" & myobj.BusinessAddressCity & "', " & _
    120. "'" & myobj.CompanyName & "', " & _
    121. "'False', " & _
    122. "'False', " & _
    123. "'False')"
    124. Try
    125. cmd.ExecuteNonQuery()
    126. Catch ex As Exception
    127. con.Close()
    128. Fehlermeldung = ex.Message & " - Fehler: Kunde_1, DragDrop__Personen_Funtkion" & vbCrLf & vbCrLf & cmd.CommandText
    129. Fehler_Instance.Ausgabe(Fehlermeldung)
    130. End Try
    131. End If
    132. con.Close()
    133. Schlussarbeiten()
    134. Datensaetze_laden()
    135. End Sub
    -hier

    VB.NET-Quellcode

    1. Dim outlookApplication = New ApplicationClass()


    Gibt er mir ne Meldung aus, die ich nicht verstehe... Könntest du mir da weiterhelfen ?

    Der Interoptyp "ApplicationClass" kann nicht eingebettet werden. Verwenden Sie stattdessen die entsprechende Schnittstelle.
    Probier mal folgendes.

    VB.NET-Quellcode

    1. Dim OutlookApplication As Outlook.Application = Nothing
    2. Dim MapiNamespace As Outlook.NameSpace = Nothing
    3. Dim Contacts As Outlook.MAPIFolder = Nothing
    4. OutlookApplication = New Outlook.Application()
    5. MapiNamespace = OutlookApplication.GetNamespace("MAPI")
    6. Contacts = MapiNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
    ok... bin schon dabei meinen Code umzuschreiben...


    Hast du vielleicht noch eine Idee zum Select bei diesem Abschnitt vom neuen Code:

    VB.NET-Quellcode

    1. For i As Integer = 1 To contacts.Items.Count


    also so was in der Art wie:

    VB.NET-Quellcode

    1. For i As Integer = 1 To contacts.Items.Selection.count


    ?
    Das ist nun mein Versuch mit MAPI zu arbeiten.

    Jedoch habe ich hier das Problem noch, dass er einfach immer alle Kontakte durchläuft.
    Er soll mir aber nur den makierten Kontakt ausgeben... also markiert in Outlook.

    Ist der Code total falsch, oder bin ich auf dem richtigen Weg?

    VB.NET-Quellcode

    1. Sub test()
    2. On Error Resume Next
    3. Dim app As New Microsoft.Office.Interop.Outlook.Application
    4. Dim ns As Microsoft.Office.Interop.Outlook.NameSpace
    5. Dim myContacts As Microsoft.Office.Interop.Outlook.MAPIFolder
    6. Dim myContact As Microsoft.Office.Interop.Outlook.ContactItem
    7. ns = app.GetNamespace("MAPI")
    8. myContacts = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
    9. For i = 1 To myContacts.Items.Count
    10. MsgBox(myContacts.Items(i).LastName)
    11. Next
    12. End Sub
    Hallo Singu,

    deine Frage bzgl. warum ich nur die markierten Kontakte auslesen will hat mich zum nachdenken gebracht.
    Ich habe daher meinen Plan alle Kontakte einzeln hin und her zu schieben (Outlook <> meine Datenbank und umgedreht) verworfen. Deine Frage hat mir gezeigt, dass dies viel zum umständlich wäre. ... danke das du mich zum grübeln gebracht hast :)

    Nach einiger Überlegungen habe ich mich nun dazu entschlossen, meine eigene Datenbank mit den Kontakten ähnlich wie eine Syncronisation mit Outlook abgleichen zu lassen.
    Jedoch mit der Bedingung, diese Kontakte werden ausschließlich in meiner Datenbank verwaltet - weil da viele weitere Informationen (Felder) vorhanden sind, für die es im Outlook nicht mal ein Feld gibt... und so tief möchte ich dann auch nicht einsteigen.

    Nun stelle ich es mir so vor...
    Kontakte werden in meine Datenbank / meinem Programm verwaltet. User kann einen Button drücken "syncronisieren mit Outlook" und dann sollen die Kontakte die in meiner Datenbank vorhanden sind erstmal alle gelöscht werden und anschließend neu angelegt werden - der einfachste weg ! ?? oder ??

    Unterscheiden tu ich zwei Datenbanktabellen: Firmen und Personen. Beide werden mir einer Kategorie versehen (OUTLOOK [Categories]) und nur die sollen bearbeitet werden in Verbindung mit einer Suchabfrage halt...

    Hier erstmal mein Code, so wie ich mir das bisher gedacht habe:

    VB.NET-Quellcode

    1. Private Sub Kunde_Person_Outl_SYNC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Firmen_durchlaufen()
    3. End Sub
    4. Private Sub Firmen_durchlaufen()
    5. Dim con As New OleDb.OleDbConnection
    6. Dim cmd As New OleDb.OleDbCommand
    7. Dim reader As OleDb.OleDbDataReader
    8. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Form1.Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    9. cmd.Connection = con
    10. cmd.CommandText = "SELECT * FROM WW_Firmen WHERE FA_Status = 'aktiv' AND ID = 1"
    11. Try
    12. con.Open()
    13. reader = cmd.ExecuteReader()
    14. Do While reader.Read()
    15. FindContact__Firmen(reader("FA_Name1").ToString, reader("FA_Plz").ToString, reader("FA_Ort").ToString)
    16. Loop
    17. con.Close()
    18. Catch ex As Exception
    19. MessageBox.Show("Fehler beim Abrufen der Firmen", "DIMS Info", MessageBoxButtons.OK, MessageBoxIcon.Error)
    20. Finally
    21. con.Close()
    22. End Try
    23. End Sub
    24. Sub FindContact__Firmen(ByVal Firma As String, ByVal Plz As String, ByVal Ort As String)
    25. Try
    26. Dim olApp As Outlook.Application
    27. Dim objContact As Outlook.ContactItem
    28. Dim objContacts As Outlook.MAPIFolder
    29. Dim objNameSpace As Outlook.NameSpace
    30. Dim Kategorie As String = "DIMS Firmen"
    31. olApp = CreateObject("Outlook.Application")
    32. objNameSpace = olApp.GetNamespace("MAPI")
    33. objContacts = objNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
    34. Dim suchen As String = "[CompanyName]='" & Firma & "' AND [Categories]='" & Kategorie & "'"
    35. ' and [BusinessAddressPostalCode] ='" & Plz & "' and [BusinessAddressCity] ='" & Ort & "'
    36. objContact = objContacts.Items.Find(suchen)
    37. Do While TypeName(objContact) IsNot Nothing
    38. objContact = objContacts.Items.Find(suchen)
    39. If Not TypeName(objContact) = "Nothing" Then
    40. objContact.Delete()
    41. Else
    42. MsgBox("nicht gefunden...")
    43. End If
    44. Loop
    45. Catch ex As Exception
    46. MessageBox.Show("Fehler... " & ex.Message, "DIMS Info...", MessageBoxButtons.OK, MessageBoxIcon.Error)
    47. End Try
    48. End Sub


    Testen konnte ich es derzeit noch nicht, da ich beim Ausführen eine Fehlermeldung erhalte: "Die Bedingung ist falsch..." mehr Informaiton erhalte ich leider nicht....

    Kannst du Dir vielleicht vorstellen was diese Fehlermeldung bedeuten könnte ???


    Hast du schon mal so eine "syncronisation" versucht umzusetzen ?

    Viele Grüße lris
    Hallo Singu,

    also ich habe dieses Projekt mir Übernahme kompl. umgeshmissen und habe auch eine Art syncronisierung gemacht.
    Allerdings funktioniert diese auf der Basis, alter Kontakt in Outlook löschen und neuen anlegen... klappt bis jetzt sehr sehr gut... nur aufpassen mit dem Postkopf (gelöschte Objekte) der kann schnell sehr voll werden und wenn du an einem Exchange hängst, könnte es sein, dass irgendwann dein Postfach zu voll ist - also leeren...

    hier mal mein Kompl. Code von meiner "syncronisierung" :)


    Vielleicht bringts Dich ja auch gute Idee'n :)


    VB.NET-Quellcode

    1. Imports System.Data.SqlClient
    2. Imports Microsoft.Office.Interop
    3. Imports System.Data.OleDb
    4. Imports System.IO
    5. Public Class Kunde_Person_Outl_SYNC
    6. Private DBPass As String = "IRGENDEINKENNWORT"
    7. Private Fehlerliste As List(Of String)
    8. ' Firmen
    9. Private dt1 As New DataTable
    10. Private da1 As OleDbDataAdapter
    11. Private ds1 As New DataSet
    12. Private bs1 As New BindingSource
    13. ' Personen
    14. Private dt2 As New DataTable
    15. Private da2 As OleDbDataAdapter
    16. Private ds2 As New DataSet
    17. Private bs2 As New BindingSource
    18. 'Bearbeiter
    19. Private dt3 As New DataTable
    20. Private da3 As OleDbDataAdapter
    21. Private ds3 As New DataSet
    22. Private bs3 As New BindingSource
    23. Dim Progress As Double
    24. Private Sub Kunde_Person_Outl_SYNC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    25. ComboBox1.SelectedIndex = 0
    26. Kundenliste_laden()
    27. Personen_laden()
    28. Bearbeiter_laden()
    29. End Sub
    30. Private Sub WW_Kunde_Close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosed
    31. ds1.Tables.Clear()
    32. dt1.Clear()
    33. ds2.Tables.Clear()
    34. dt2.Clear()
    35. ds3.Tables.Clear()
    36. dt3.Clear()
    37. End Sub
    38. Private Sub Form_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    39. If (e.KeyCode = Keys.Escape) Then
    40. Me.Close()
    41. End If
    42. End Sub
    43. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    44. Progress = 0
    45. ProgressBar1.Value = 0
    46. ProgressBar2.Value = 0
    47. If ComboBox1.Text = "alles" Then
    48. Firmen_erstellen(dt1)
    49. Person_erstellen(dt2)
    50. Bearbeiter_erstellen(dt3)
    51. ElseIf ComboBox1.Text = "nur Firmen" Then
    52. Firmen_erstellen(dt1)
    53. ElseIf ComboBox1.Text = "nur Personen" Then
    54. Person_erstellen(dt2)
    55. Else
    56. Bearbeiter_erstellen(dt3)
    57. End If
    58. End Sub
    59. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    60. Progress = 0
    61. ProgressBar1.Value = 0
    62. ProgressBar2.Value = 0
    63. End Sub
    64. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    65. Progress = 0
    66. ProgressBar1.Value = 0
    67. ProgressBar2.Value = 0
    68. Me.Close()
    69. End Sub
    70. Private Sub Kundenliste_laden()
    71. Dim Filter As String = "SELECT * FROM WW_Firmen WHERE FA_Status = 'aktiv';" ' WHERE ID=1
    72. Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Form1.Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    73. Dim Con As New OleDbConnection(ConStr)
    74. da1 = New OleDbDataAdapter(Filter, Con)
    75. ds1.Tables.Add(dt1)
    76. da1.Fill(dt1)
    77. Label7.Text = dt1.Rows.Count & " Stk."
    78. End Sub
    79. Private Sub Personen_laden()
    80. Dim Filter As String = "SELECT * FROM WW_Personen;" ' WHERE P_ID=178
    81. Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Form1.Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    82. Dim Con As New OleDbConnection(ConStr)
    83. da2 = New OleDbDataAdapter(Filter, Con)
    84. ds2.Tables.Add(dt2)
    85. da2.Fill(dt2)
    86. Label8.Text = dt2.Rows.Count & " Stk."
    87. End Sub
    88. Private Sub Bearbeiter_laden()
    89. Dim Filter As String = "SELECT * FROM Bearbeiter;" ' WHERE P_ID=178
    90. Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Form1.Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    91. Dim Con As New OleDbConnection(ConStr)
    92. da3 = New OleDbDataAdapter(Filter, Con)
    93. ds3.Tables.Add(dt3)
    94. da3.Fill(dt3)
    95. Label12.Text = dt3.Rows.Count & " Stk."
    96. End Sub
    97. Public Sub Firmen_erstellen(ByVal dt_Ma As DataTable)
    98. Button3.Enabled = False
    99. Dim count As Integer = dt_Ma.Rows.Count
    100. Try
    101. For Each r As DataRow In dt_Ma.Rows
    102. Dim olApp As Outlook.Application
    103. olApp = CreateObject("Outlook.Application")
    104. Dim olNs As Outlook.NameSpace
    105. olNs = olApp.GetNamespace("MAPI")
    106. olNs.Logon()
    107. Try
    108. Firmen__loeschen(r("ID").ToString)
    109. Catch ex As Exception
    110. End Try
    111. Dim olItem As Outlook.ContactItem
    112. olItem = olApp.CreateItem(Outlook.OlItemType.olContactItem)
    113. ' Zusammenfassung Body
    114. Dim BodyInfo As String = "ABC Kz. " & r("FA_abc").ToString & vbCrLf & _
    115. "Kategorie: " & r("FA_Kategorie").ToString & vbCrLf & _
    116. "Liefersperre HA: " & r("FA_Liefersperre").ToString & vbCrLf & _
    117. "Rückfrage HA: " & r("FA_Rueckfrage").ToString
    118. With olItem
    119. .TelexNumber = "DIMS_Firma"
    120. .CustomerID = r("ID").ToString
    121. .Categories = "DIMS Firmen"
    122. .CompanyName = r("FA_Name1").ToString
    123. .LastName = r("FA_Matchcode").ToString
    124. .BusinessAddressStreet = r("FA_Strasse").ToString
    125. .BusinessAddressPostalCode = r("FA_Plz").ToString
    126. .BusinessAddressCity = r("FA_Ort").ToString
    127. .BusinessTelephoneNumber = r("FA_Tel1").ToString
    128. .BusinessFaxNumber = r("FA_Fax").ToString
    129. .Email1Address = r("FA_Email").ToString
    130. .BusinessHomePage = r("FA_www").ToString
    131. .Body = BodyInfo
    132. End With
    133. olItem.Save()
    134. olNs.Logoff()
    135. olNs = Nothing
    136. olItem = Nothing
    137. olApp = Nothing
    138. Progress = Progress + (100 / count) '- 1
    139. If Progress >= 100 Then
    140. Progress = 100
    141. End If
    142. ProgressBar1.Value = Progress
    143. Next
    144. Catch ex As System.Exception
    145. MsgBox("Fehler, nicht alle Kontakte an Outlook übergeben" & _
    146. vbLf & vbLf & ex.ToString())
    147. Button3.Enabled = True
    148. End Try
    149. Button3.Enabled = True
    150. End Sub
    151. Private Sub Firmen__loeschen(ByVal FID As String)
    152. Dim suchen As String = "[CustomerID]='" & FID & " AND [TelexNumber]='DIMS_Firma'"
    153. Dim olApp As Outlook.Application
    154. Dim objContact As Outlook.ContactItem
    155. Dim objContacts As Outlook.MAPIFolder
    156. Dim objNameSpace As Outlook.NameSpace
    157. Try
    158. olApp = CreateObject("Outlook.Application")
    159. objNameSpace = olApp.GetNamespace("MAPI")
    160. objContacts = objNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
    161. objContact = objContacts.Items.Find(suchen)
    162. If Not TypeName(objContact) = "Nothing" Then
    163. objContact.Delete()
    164. End If
    165. Catch ex As System.Exception
    166. Fehlerliste.Add("Not found, Firma: " & suchen)
    167. End Try
    168. End Sub
    169. Public Sub Person_erstellen(ByVal dt_Ma2 As DataTable)
    170. Button3.Enabled = False
    171. Dim count2 As Integer = dt_Ma2.Rows.Count
    172. Try
    173. For Each r As DataRow In dt_Ma2.Rows
    174. Dim olApp As Outlook.Application
    175. olApp = CreateObject("Outlook.Application")
    176. Dim olNs As Outlook.NameSpace
    177. olNs = olApp.GetNamespace("MAPI")
    178. olNs.Logon()
    179. Try
    180. Personen__Loeschen(r("P_ID").ToString)
    181. Catch ex As Exception
    182. End Try
    183. Dim olItem As Outlook.ContactItem
    184. olItem = olApp.CreateItem(Outlook.OlItemType.olContactItem)
    185. Dim BodyInfo As String = "persönl. Ansprache mit du: " & r("P_Du").ToString & vbCrLf & _
    186. "Prv. Mobiltel.: " & r("P_MobilPrv").ToString & vbCrLf & _
    187. "Geb.tag Partner: " & r("P_PartnerinGebTag").ToString
    188. With olItem
    189. .TelexNumber = "DIMS_Person"
    190. .CustomerID = r("P_ID").ToString
    191. .Categories = "DIMS Personen"
    192. .Title = r("P_Anrede").ToString
    193. .Suffix = r("P_Titel").ToString
    194. .FirstName = r("P_Vorname").ToString
    195. .LastName = r("P_Nachname").ToString
    196. .JobTitle = r("P_Position").ToString
    197. .BusinessTelephoneNumber = r("P_Tel1").ToString
    198. .MobileTelephoneNumber = r("P_Mobil").ToString
    199. .BusinessFaxNumber = r("P_Fax").ToString
    200. .Email1Address = r("P_Mail1").ToString
    201. .HomeTelephoneNumber = r("P_TelPrv").ToString
    202. .HomeAddressStreet = r("P_StrPrv").ToString
    203. .HomeAddressPostalCode = r("P_PlzPrv").ToString
    204. .HomeAddressCity = r("P_OrtPrv").ToString
    205. If r("P_Geburtstag").ToString = "" Then
    206. Else
    207. .Birthday = CDate(r("P_Geburtstag").ToString)
    208. End If
    209. .Spouse = r("P_Partner").ToString
    210. .BusinessAddressStreet = r("P_StrFir").ToString
    211. .BusinessAddressPostalCode = r("P_PlzFir").ToString
    212. .BusinessAddressCity = r("P_OrtFir").ToString
    213. .CompanyName = r("P_Firma").ToString
    214. .Body = BodyInfo
    215. Try
    216. If r("P_BildDateiName").ToString <> "" Then
    217. .AddPicture(Form1.Archiv_Pfad & _
    218. "\FILES_" & Form1.Archiv_Name & _
    219. "\FILES\Pers_SECRET\" & _
    220. r("P_BildDateiName").ToString & ".jpg")
    221. End If
    222. Catch ex As System.Exception
    223. 'keine Fehlermeldung- weitermachen...
    224. End Try
    225. End With
    226. olItem.Save()
    227. olNs.Logoff()
    228. olNs = Nothing
    229. olItem = Nothing
    230. olApp = Nothing
    231. Progress = Progress + (100 / count2) '- 1
    232. If Progress >= 100 Then
    233. Progress = 100
    234. End If
    235. ProgressBar2.Value = Progress
    236. Next
    237. Catch ex As System.Exception
    238. MsgBox("Fehler bei Personen" & _
    239. vbLf & vbLf & ex.ToString())
    240. End Try
    241. Button3.Enabled = True
    242. End Sub
    243. Private Sub Personen__Loeschen(ByVal PID As String)
    244. Dim suchen As String = "[CustomerID] =" & PID & " AND [TelexNumber]='DIMS_Person'"
    245. Try
    246. Dim olApp As Outlook.Application
    247. Dim objContact As Outlook.ContactItem
    248. Dim objContacts As Outlook.MAPIFolder
    249. Dim objNameSpace As Outlook.NameSpace
    250. olApp = CreateObject("Outlook.Application")
    251. objNameSpace = olApp.GetNamespace("MAPI")
    252. objContacts = objNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
    253. objContact = objContacts.Items.Find(suchen)
    254. If Not TypeName(objContact) = "Nothing" Then
    255. objContact.Delete()
    256. End If
    257. Catch ex As System.Exception
    258. Fehlerliste.Add("Not found, Person: " & suchen)
    259. End Try
    260. End Sub
    261. Private Sub Bearbeiter_erstellen(ByVal dt_Ma2 As DataTable)
    262. ' noch keine Funktion, da die Maske für Bearbeiter erst umgestellt werden muß. Es muß auf Basis einer Formerfassung mit Bild umgestellt werden.
    263. End Sub
    264. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    Der Fehler ist aufgetaucht, weil ich versucht habe auf "Categories" zuzugreifen - jedoch funktioniert das nicht, weil lt. MSDN Beschreibung Categories nur als Read möglich ist...
    Hab das Umgangen und mit ein Feld gesucht, dass heute nicht mehr verwendet wird.. z.B. Telex, verwendet keiner mehr... und habe da nun einen Wert eingesetzt.

    Damit ist der Fehler nicht mehr existent :)

    Danke aber !! :)


    EDIT: Wie findest meine Lösung zum "syncronisieren" ?? :)