Recordset を XML 形式で Stream に保存したい


bob  2004-07-31 00:22:54  No: 10164

こんにちは、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.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加