РЕШЕНИЕ НИЖЕ
Я искал всю сеть, чтобы найти решение для этого, но мне кажется, довольно сложно получить ответ на этот вопрос в Delphi ...
Пропустите это, если вы знакомы с Outlook
Некоторое объяснение раньше:
Папка контактов в Outlook организована как дерево папок в Windows. Контакты хранятся в самой папке контактов или в подпапках.
Мой код добавляет контакты из внешней базы данных в базу данных контактов Outlook. Для предотвращения двойных записей программа должна проверить все контакты и посмотреть, сможет ли она найти «старую» версию записи контакта и обновить ее, или, если нет, создать новую.
Поэтому я написал рекурсию, которая просматривает папки и проверяет контакты.
Внутри папки вы можете получить подпапку (кроме Next, Previous и Last)
Contacts:= Contacts.Folders.Getfirst
// Выбранная папка является первой подпапкой в предыдущей выбранной папке
Если я пытаюсь получить какое-либо свойство этой подпапки, например «Items.Count» или что-то еще, возникает ошибка, поскольку эта папка не существует.
Поэтому я хочу проверить, существует папка или нет, и пропустить, чтобы перебрать эту подпапку, потому что в противном случае цикл прервется и программа остановится.
Пропустите здесь, если вы знакомы с работой Outlook
ПРОБЛЕМА:
В отладчике эта переменная Contacts / Folder (OleVariant, указатель на выбранную папку) содержит значения, подобные этому: '$ 0074974C'.
Если подпапка отсутствует, это значение возвращает «$ 00000000». Это похоже на указатель.
Как проверить, существует папка или нет?
const
olFolderContacts = $0000000A;
var
outlook, NameSpace, Contact, ContactsRoot, Contacts: OleVariant;
begin
Outlook := CreateOleObject('Outlook.Application');
NameSpace := Outlook.GetNameSpace('MAPI');
ContactsRoot := NameSpace.GetDefaultFolder(olFolderContacts);
Contacts:= ContactsRoot;
//We're now in the Contacts Folder
Contacts:= Contacts.folders.getfirst;
//First Subfolder
Что не сработало:
Проверьте, если
Контакты = '$ 00000000' (в виде строки)
Контакты = '$ 00000000' (как OleVariant)
вар
Вал: TVarRec;
код:
Вал: = Контакты;
string (Contacts.VWideChar) = '$ 00000000'
вар * * тысяча пятьдесят один
vntNothing: OLEVariant;
код:
TVarData (vntNothing) .VType: = varDispatch;
TVarData (vntNothing) .VDispatch: = ноль;
Контакты = vntNothing
Контакты = неназначенные
...
...
В VBA эта проблема имеет простое решение
если Контакты = Ничего
Но в Delphi нет «Ничего» ...
Идеи