[急]SQLDMO带进度条恢复数据库的问题

zjh527 2006-11-23 12:39:16
为了实现恢复数据库带进度条,我在我的程序里声明实现SQLDMO的RestoreSink接口。我在SQLDMO_TLB.pas单元里也找到了这个接口的描述:

SQLDMO_TLB.pas
// *********************************************************************//
// Interface: RestoreSink
// Flags: (256) OleAutomation
// GUID: {10023206-E260-11CF-AE68-00AA004A34D5}
// *********************************************************************//
RestoreSink = interface(IUnknown)
['{10023206-E260-11CF-AE68-00AA004A34D5}']
function PercentComplete(const Message: WideString; Percent: Integer): HResult; stdcall;
function NextMedia(const Message: WideString): HResult; stdcall;
function Complete(const Message: WideString): HResult; stdcall;
end;



我在自己的程序里声明此接口如下:
type
TResoreSink=class(TInterfacedobject,RestoreSink)
function PercentComplete(const Message: WideString; Percent: Integer): HResult; stdcall;
function NextMedia(const Message: WideString): HResult; stdcall;
function Complete(const Message: WideString): HResult; stdcall;
end;

但在编译程序的时候提示:
[Error] Unit1.pas(15): Unsatisfied forward or external declaration: 'TResoreSink.PercentComplete'
[Error] Unit1.pas(16): Unsatisfied forward or external declaration: 'TResoreSink.NextMedia'
[Error] Unit1.pas(17): Unsatisfied forward or external declaration: 'TResoreSink.Complete'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'


注:我的程序里已经实现了backupsink接口,在没有加RestoreSink接口时测试没有问题。
type
TBackupSink=class(TInterfacedobject,backupsink)//实现接口
function PercentComplete(const Message: WideString; Percent: Integer): HResult; stdcall;
function NextMedia(const Message: WideString): HResult; stdcall;
function Complete(const Message: WideString): HResult; stdcall;
end;


有谁遇到过这个问题?哪位大侠帮帮忙。谢谢了!!!
...全文
151 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
老冯 2006-11-23
  • 打赏
  • 举报
回复
我建议用EventSinkImp来析出COM的Event接口类库,我一直这样做的。

SQLDMO析出为2个文件: SQLDMO_TLB.pas, SQLDMOEvents.pas

我的实际应用例子:

......Backup

function TBackupForm.BackupSinkPercentComplete(Sender: TObject;
const Message: WideString; Percent: Integer): HRESULT;
begin
ProgressBar.Percent := Percent;
Result := S_OK;
end;

function TBackupForm.BackupSinkComplete(Sender: TObject;
const Message: WideString): HRESULT;
begin
Forms.Application.MessageBox(PChar('备份数据库完毕!'),'系统信息', 64);
ModalResult := mrCancel;
Result := S_OK;
end;

......Restore

function TRestoreForm.RestoreSinkPercentComplete(Sender: TObject;
const Message: WideString; Percent: Integer): HRESULT;
begin
ProgressBar.Percent := Percent;
Result := S_OK;
end;

function TRestoreForm.RestoreSinkComplete(Sender: TObject;
const Message: WideString): HRESULT;
begin
Forms.Application.MessageBox(PChar('还原数据库完毕!'),'系统信息', 64);
ModalResult := mrCancel;
Result := S_OK;
end;

........
才子鸣 2006-11-23
  • 打赏
  • 举报
回复
自己解決的就是好
zjh527 2006-11-23
  • 打赏
  • 举报
回复
问题已解决,重新加载了一遍SQLDMO就好了。
顺便问题一下我在恢复数据时提示“EXCEPTION_ACCESS_VIOLATION”错误,但是我看到数据库已经恢复了。而且可用这是怎么回事?

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧