こんにちは、bobです。
基本的にソースのコメント欄に書いてありますが、
Recordset を XML 形式で Stream に保存したく、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdmscstreamspersistence.asp
を参照し、上記URLのコードはVB6で動作するのを確認しているのですが、
それをDelphiで行おうとすると
---
プロジェクト Project1.exe が EAccessViolation クラスの例外を生成しました。
'アドレス B60F0010 でアドレス B60F0010 に対する読み込み違反が起きました。'
---
と言う、エラーが発生してしまいXML出力が出来ません。
最小プロジェクトを作成しましたが、再現するので
どこがいけないのか、教えて頂けないでしょうか?
[環境]W2k Pro SP4+Delphi7 Entです。
[DB]SQL Server 2000 Develop Edition
---以下再現する最小プロジェクトソース(MSDNライブラリVBソース参照)
//
//Recordset を XML 形式で Stream に保存します
// 前提条件:ADO2.6以上(2.7のADODB_TLB)
//
//[注意]
// Delphi7 EntのADOIntとADODBは、Streamに未対応!!
//
//[参照]
//http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdmscstreamspersistence.asp
//
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB_TLB;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
rs: _Recordset;
stm: _Stream;
begin
rs := CoRecordset.Create;
stm := CoStream.Create;
try
rs.Open('SELECT * FROM Customers', 'Provider=sqloledb;' +
'Data Source=localhost;Initial Catalog=Northwind;' +
'User Id=sa;Password=;',
adOpenUnspecified, adLockUnspecified, -1);
rs.Save(stm, adPersistXML);
stm.Position := 0;
Memo1.Text := stm.ReadText(stm.Size)
finally
rs.Close;
rs := nil;
end;
end;
end.
ツイート | ![]() |