Data.Win.ADODB.TADOBlobStream.Write

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

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::TMemoryStream::Write(Buffer, Offset, Count); }
inline int __fastcall  Write(const System::DynamicArray<System::Byte> Buffer, int Count){ return System::Classes::TStream::Write(Buffer, Count); }

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
function public
Data.Win.ADODB.pas
Data.Win.ADODB.hpp
Data.Win.ADODB TADOBlobStream

Beschreibung

Schreibt Daten aus einem Speicherpuffer in ein BLOB-Feldobjekt.

Mit Write können Sie Daten aus einem nullterminierten String (oder einem vergleichbaren Puffer) in ein BLOB-Feldobjekt kopieren. Write kopiert Daten aus dem Puffer an die aktuelle Position im BLOB-Feldobjekt (die aktuelle Position ist über die Eigenschaft Position abrufbar). Dabei werden entweder die in Count angegebene Anzahl von Bytes oder die sich noch im Speicherpuffer befindenden Bytes kopiert (wobei ab der aktuellen Position bis zum Ende gezählt wird), je nachdem welcher Wert kleiner ist. Write kann mehrmals während des Bestehens einer TADOBlobStream-Komponente aufgerufen werden, wobei bei jedem Aufruf weniger als die gesamte Anzahl der zu kopierenden Bytes kopiert werden.

Count gibt die maximale Anzahl von Bytes an, die bei einem einzigen Aufruf an Write kopiert werden können. Count kann kleiner, gleich oder größer als die Anzahl der augenblicklich im Speicherpuffer enthaltenen Anzahl von Bytes sein. Ist Count größer als die im Speicherpuffer bzw. noch im Speicherpuffer enthaltene Anzahl von Bytes, wird der Kopiervorgang beim letzten Byte gestoppt. Es wird weder ein Fehler noch eine Exception generiert, wenn die Anzahl in Count größer ist als die aktuelle Größe des Inhalts.

Write aktualisiert die Eigenschaft Size mit dem Wert Position + Count, und die Eigenschaft Position erhält den neuen Wert von Size. Somit gehen bei einem Aufruf von Write alle Daten verloren, die im Speicher-Stream nach der aktuellen Position gespeichert waren.

Nach erfolgreicher Ausführung gibt Write die Anzahl der in das BLOB-Feld kopierten Bytes zurück. Wenn der Rückgabewert kleiner als Count ist, ist der häufigste Grund, dass das Ende des Puffers erreicht wurde, bevor die gewünschte Anzahl von Bytes kopiert werden konnte.



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;
}



Siehe auch