Nano Hash - криптовалюты, майнинг, программирование

Внешнее приложение: проверьте, существует ли папка Outlook

РЕШЕНИЕ НИЖЕ

Я искал по всей сети, чтобы найти решение для этого, но мне кажется довольно сложно получить ответ на этот вопрос в Delphi...

Пропустите это, если вы знакомы с Outlook

Некоторое объяснение перед: Папка контактов в Outlook организована как дерево папок в Windows. Контакты хранятся в самой папке контактов или во вложенных папках.

Мой код добавляет контакты из внешней базы данных в базу данных контактов Outlook. Чтобы предотвратить двойные записи, программа должна проверять все контакты и смотреть, может ли она найти «более старую» версию записи контакта и обновить ее, или, если нет, создать новую.
Поэтому я написал рекурсию, которая зацикливается. по папкам и проверяет контакты.

В папке вы можете получить подпапку (помимо следующей, предыдущей и последней)

Contacts:= Contacts.Folders.Getfirst

//Теперь выбранная папка является первой подпапкой в ​​предыдущей выбранной папке

Если я пытаюсь получить какое-либо свойство этой подпапки, например «Items.Count» или что-то еще, возникает ошибка, потому что эта папка не существует.
Поэтому я хочу проверить, существует ли папка или нет, и перейти к зациклить эту подпапку, потому что в противном случае цикл прервется здесь и программа остановится.

Пропустите до этого места, если вы знакомы с работой Outlook
ПРОБЛЕМА:

В отладчике эта переменная контактов/папки (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)

var
val:TVarRec;
code:
val:=Contacts;
string(Contacts.VWideChar) = '$00000000'

var
vntNothing: OLEVariant;
code:
TVarData(vntNothing).VType := varDispatch;
TVarData(vntNothing).VDispatch := Nil;
Contacts = vntNothing

Контакты = не назначены
...
...

В VBA эта проблема имеет простое решение

если контакты = ничего

Но в Delphi нет "Ничего"...

Идеи?


Ответы:


1

Вы можете сначала проверить количество в коллекции Folders:

if Contacts.Folders.Count = 0 then

or

Contacts := Contacts.Folders.GetFirst;
if VarIsClear(Contacts) then
17.09.2010

2

Вы можете попробовать это:

if IUnknown(Contacts) = nil then
  //
17.09.2010

3
var  
x: string;  

в коде:

x:= format('%p%',[Pointer(TVarData(contacts).VDispatch)]);
if x = '00000000' then  
   'New Contact'  
else  
   'open folder and search within this one'

У коллеги было решение. Спасибо за ваше время :)

17.09.2010
  • Почему форматирование в строку? Если это работает, почему бы просто не использовать Pointer(TVarData(Contacts).VDispatch) = nil? 17.09.2010
  • Думаю, это остатки моих предыдущих попыток найти решение, ваше решение немного короче, но тоже работает, спасибо :) 17.09.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..