| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB, DB, DBTables, ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
function ConnectToADODB(var Query: TADOQuery; ConnectStr: string) : boolean;
overload;
function UpdateBlob(Connection: TADOConnection; Spalte: string; Tabelle: string;
Where: string; var ms: TMemoryStream) : boolean;
procedure ShowEOleException(AExc: EOleException; Query: string);
var
Form1: TForm1;
implementation
procedure TForm1.Button1Click(Sender: TObject);
var
Query: TADOQuery;
ms: TMemoryStream;
ConnectStr: String;
begin
ms := TMemoryStream.Create;
ms.LoadFromFile('d:\a.txt');
Query := TADOQuery.Create(nil);
ConnectStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+ 'Data Source=C:\db1.mdb;'+ 'Mode=ReadWrite|Share Deny None;'+ 'Persist Security Info=False';
if not ConnectToADODB(Query, ConnectStr) then
ShowMessage('Connecting to DB failed.');
UpdateBlob(Query.Connection, 'blobfieldname', 'Tabelle1',
'id=1', ms);
ms.Free;
Query.Connection.Close;
Query.Free;
end;
function ConnectToADODB(var Query: TADOQuery; ConnectStr: string) : boolean;
overload;
begin
Query.Connection := TADOConnection.Create(nil);
Query.Connection.LoginPrompt := true;
Query.Connection.ConnectionString := ConnectStr;
Query.Connection.Open;
Result := Query.Connection.Connected;
end;
function UpdateBlob(Connection: TADOConnection; Spalte: string; Tabelle: string;
Where: string; var ms: TMemoryStream) : boolean;
var
BlobField: TBlobField;
Table: TADOTable;
begin
Result := true;
try
ms.Seek(0, soFromBeginning);
Table := TADOTable.Create(nil);
Table.Connection := Connection;
Table.TableName := Tabelle;
Table.Filtered := false;
Table.Filter := Where;
Table.Filtered := true;
Table.Open;
Table.First;
if not Table.FieldByName(Spalte).IsBlob then
raise EOleException.Create('The field '+Spalte+' is not a blob-field.',
S_FALSE, 'ITSQL.UpdateBlob',
'', 0);
BlobField := TBlobField(Table.FieldByName(Spalte));
Table.Edit;
BlobField.LoadFromStream(ms);
Table.Post;
Table.Free;
except
on E : EOleException do
begin
ShowEOleException(E, 'UPDATE BLOB FROM: SELECT '+Spalte+
' FROM '+Tabelle+' WHERE '+Where);
Result := false;
end;
end;
end;
procedure ShowEOleException(AExc: EOleException; Query: string);
var
ErrShowFrm: TForm;
Memo: TMemo;
begin
ErrShowFrm := TForm.Create(nil);
ErrShowFrm.Position := poScreenCenter;
ErrShowFrm.Width := 640;
ErrShowFrm.Height := 480;
Memo := TMemo.Create(ErrShowFrm);
Memo.Parent := ErrShowFrm;
Memo.Align := alClient;
Memo.Lines.Clear;
Memo.Lines.Add('Message: '+AExc.Message);
Memo.Lines.Add(' Source: '+AExc.Source);
Memo.Lines.Add(' ClassName: '+AExc.ClassName);
Memo.Lines.Add(' Error Code: '+IntToStr(AExc.ErrorCode));
Memo.Lines.Add(' Query: '+Query);
ErrShowFrm.ShowModal;
Memo.Free;
ErrShowFrm.Free;
end;
end. | |