Data.Win.ADODB.TADOBlobStream.Write
Delphi
function Write(const Buffer; Count: Longint): Longint; override;
C++
virtual int __fastcall Write(const void *Buffer, int Count)/* overload */;
inline int __fastcall Write(const System::DynamicArray<System::Byte> Buffer, int Offset, int Count){ return System::Classes::TStream::Write(Buffer, Offset, Count); }
inline int __fastcall Write(const System::DynamicArray<System::Byte> Buffer, int Count){ return System::Classes::TStream::Write(Buffer, Count); }
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | public | Data.Win.ADODB.pas Data.Win.ADODB.hpp |
Data.Win.ADODB | TADOBlobStream |
説明
Write メソッドは,メモリバッファから BLOB 型項目オブジェクトにデータを書き込みます。
Write メソッドを使用すると,メモリ内のヌルで終わる文字列(または同等の)バッファから BLOB 型項目にデータをコピーできます。Write は,バッファから BLOB 型項目オブジェクトの現在の位置にデータをコピーします。現在の位置は,Position プロパティで示されます。Write は,Count で指定されたバイト数か,メモリバッファの残りのバイト数(現在の位置から最後までのバイト数)の小さい方をコピーします。Write は,TADOBlobStream の寿命の間に複数回呼び出すことができ,各呼び出しではコピーされる総バイト数より少ないバイトがコピーされます。
Count は,Write の 1 回の呼び出しでコピーする最大バイト数を表します。Count は,メモリバッファに実際に格納されているバイト数より小さくても,同じでも,大きくてもかまいません。Count がメモリバッファの実際のバイト数を超える場合,コピーは最後のバイトで終了します。内容の実際のサイズを超える値を指定して例外が生成されても罰則はありません。
Write は,Size プロパティを Position + Count に更新し,Position プロパティを Size の新しい値に設定します。そのため,メモリストリームで現在の位置から Count バイトに格納されていたすべてのデータは,Write メソッドの呼び出しで失われます。
正常に実行された後,Write は BLOB 型項目オブジェクトにコピーされたバイト数を返します。戻り値が Count 未満の場合,最も可能性のある理由は,指定されたバイト数をコピーする前にバッファの最後に到達してしまったことです。
var
P: PChar;
S: Integer;
BS:TADOBlobStream;
begin
if not (ADOTable1.State in [dsEdit, dsInsert]) then
ADOTable1.Edit;
BS := TADOBlobStream.Create(TMemoField(ADOTable1.Fields[1]), bmWrite);
try
S := Memo1.GetTextLen;
Inc(S);
P := AllocMem(S);
FillChar(P^, S, #0);
Memo1.GetTextBuf(P, S);
BS.Write(P^, S);
finally
BS.Free;
FreeMem(P, S);
end;
end;
int S;
ADOTable1->Edit();
TADOBlobStream *BS = new TADOBlobStream(ADOTable1->Fields->Fields[1], bmWrite);
try
{
S = Memo1->GetTextLen() + 1;
char *P = new char[S];
Memo1->GetTextBuf(P, S);
BS->Write(P.c_str(), P.Length());
}
__finally
{
delete BS;
}