2010-06-29 12 views
0

OleVariant Je suis convertissaient le code exemple suivant pour Delphi:Comment passer les index de chaîne pour

http://msdn.microsoft.com/en-us/library/bb176406%28v=office.12%29.aspx

Mon code est quelque chose comme:

 
var 
    vTable, vRow: OleVariant; 
begin 
.... 

    while vTable.EndOfTable = False do 
    begin 
    vRow := vTable.GetNextRow; 
    sEmail := vRow['Email1Address']; 
    ShowMessage(sEmail); 
    end; 
end; 

Le problème est que je dois passez un index de chaîne, 'Email1Address', mais Delphi donne l'erreur: Types incompatibles: Entier et chaîne.

Devrais-je utiliser un autre type de variante?

TIA

Répondre

3

J'ai pris un coup d'œil à l'unité d'Outlook généré à partir d'un fichier TLB et il ressemble à ceci:

_Row = interface(IDispatch) 
    ['{000630D3-0000-0000-C000-000000000046}'] 
    //snip 
    function Item(Index: OleVariant): OleVariant; safecall; 
    //snip 
    end; 

L'interface de ligne a une méthode Item, qui prend un OleVariant. Il faut donc utiliser ceci:

sEmail := vRow.Item('Email1Address'); 

Jetez aussi un coup d'oeil à la MSDN help.

+0

Merci The_Fox. FTR, j'ai vérifié la source Outlook, mais j'ai seulement jusqu'à Outlook XP, et GetTable n'a pas été introduit jusqu'à Outlook 2007. – Xanyx

+0

Vous pouvez générer ces fichiers vous-même (je l'ai fait). Démarrez Delphi, choisissez Projet \ Import Type Library, recherchez la bibliothèque d'objets Microsoft Outlook 12.0, si ce n'est pas le cas, vous pouvez ajouter% programfiles% \ Microsoft Office \ Office12 \ msoutl.olb. Cochez la case "Generate Component Wrapper" et spécifiez un répertoire d'unité. Maintenant, cliquez sur "Créer une unité". Un Office_TLB.pas et un Outlook_TLB.pas sont générés. –

+0

Excellent, merci – Xanyx