variant类型转换成string 类型的问题??? ( 积分: 200 )

  • 主题发起人 主题发起人 delphi123123
  • 开始时间 开始时间
D

delphi123123

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在Memo中输出一个邮件地址可是系统老是提示说是"could not convert variant of type (dispatch) into type (string)" 我应该怎么把一个邮件地址转换成string型的???
 
我想在Memo中输出一个邮件地址可是系统老是提示说是"could not convert variant of type (dispatch) into type (string)" 我应该怎么把一个邮件地址转换成string型的???
 
var
v:variant;

if not varisnull(v) then
memo1.lines.text := vartostr(v);
 
你的代码?类型不匹配啊
 
memo1.text:=vartostr(v);
 
同意樓上
怎麼將variant类型转换成 record 类型?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3200290
 
不行啊这种方法我已经试过了,还是出现那个提示信息,我要输出的是一个email地址!
 
email地址不就是字附串嗎? 應該沒問題!!
 
把代码贴出来看下
 
procedure TForm1.cxButton1Click(Sender: TObject);
var mail,outlookapp,mapi,myitem:variant;
i:integer;
begin
outlookapp := createoleobject('outlook.application');
mapi := outlookapp.getnamespace('MAPI');
mail := mapi.Folders('个人文件夹').Folders('已发送的邮件');
for i :=1 to mail.Items.count do
begin
myitem := mail.items;
if datetostr(myitem.CreationTime) = cxDateEdit1.Text then
begin

Memo1.Lines.Text:=vartostr(myitem.Recipients);//Recipients为'收件人'

end;
end;

end;
 
不是什么类型都能转换的!
比如:
[gold]memo1.Lines.Text:=varToStr(clientdataset1.Data)[/gold],虽然clientdataset1.Data是
Variant类型,但转换不了!
[green]var dsp:IDispatch;
begin
dsp:=createOLEObject('Excel.application');
memo1.Lines.Text:=varToStr(dsp);[/green]也不行!
但是,上面例子虽然不能正确转换,不过没有报错!
 
http://www.delphibbs.com/delphibbs/dispq.asp?LID=2486744
请教高手,在Delphi中怎么访问OutLook,请举个例题?

我猜测那个Recipients可能是个数组,所以不能直接转过来,检查一下是不是,然后查看一下OutLook的VBA帮助是不是需要单独转换里面的人名,没outlook,楼主自己测一下
 
看看这个有没有用吧:
{***************************************************************
* Unit Name: 获取 Outlook 联系人项目
* Purpose :
* Author : Programme by 七贤工作室 版权所有 www.51google.net
* History :
****************************************************************}

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Outlook8, OleServer;

type
TForm1 = class(TForm)
Button1: TButton;
OutlookApplication1: TOutlookApplication;
ContactItem1: TContactItem;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
NmSpace:NameSpace;
ContactsFolder:MAPIFolder;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
OutlookApplication1.Connect;
NmSpace := OutlookApplication1.GetNamespace('MAPI');
NmSpace.Logon('', '', False, False);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
sname,smail:string;
begin
ContactsFolder := NmSpace.GetDefaultFolder(olFolderContacts);

for i:=1 to ContactsFolder.Items.Count do // 显示找到的联系人
begin
sname:=(ContactsFolder.Items.Item(i) as ContactItem).FullName;
smail:=(ContactsFolder.Items.Item(i) as ContactItem).Email1Address;
MessageBox(0,PChar(sname+smail),'找到联系人:',mb_Ok);
end;

if MessageBox(0,'需要打开 Outlook 吗 ?','操作咨询',mb_YesNo) = IDYES then
ContactsFolder.Display; // 打开 Outlook 联系人项目
end;

end.
 
不是啊,'收件人'怎么会是个数组呢,他应该是个字符串啊, 他其实就是个email地址!
现在地问题是就是这个地址没法子memo中显示出来!!
[?]
 
Memo1.Lines.Text:=vartostr(myitem.Recipients);//Recipients为'收件人'
改成:
Memo1.Lines.Text:=vartostr(myitem.Recipients[1].address);//Recipients为'收件人'
 
搞定,谢谢yeskert1,也谢谢大家!!每人都有奖啊!
 
楼主还不承认呢
 
修改了你的代码:
procedure TForm1.Button3Click(Sender: TObject);
var mail,outlookapp,mapi,myitem,addObj:variant;
i,j:integer;
begin
outlookapp := createoleobject('outlook.application');
mapi := outlookapp.getnamespace('MAPI');
mail := mapi.Folders('个人文件夹').Folders('已发送的邮件');
for i :=1 to mail.Items.count do
begin
myitem := mail.items;
try
addObj:=myitem.Recipients;
except
continue;
end;
for j:=1 to addObj.count do
Memo1.Lines.Add(IntToStr(i)+':'+vartostr(addObj.item[j].Address));//Recipients为'收件人'
end;
end;
 
后退
顶部