TBlob = packed record
sText : String[14];
nNum : Integer;
end;
//保存
procedure TForm1.Button1Click(Sender: TObject);
var
Stream : TMemoryStream;
Blob : TBlob;
begin
Stream := TMemoryStream.Create; Blob.sText := Edit2.Text;
Blob.nNum := SpinEdit1.Value; Stream.Write(Blob, SizeOf(TBlob));
try
with ADOQuery do begin
Close;
SQL.clear;
SQL.text:= 'select * from test where Acc=:nm';
Parameters.ParamByName('nm').Value:= Edit1.Text;
Open;
if RecordCount > 0 then begin
Edit;
FieldByName(Acc).Value := Edit1.Text;
TBlobField(FieldByName('TestBlob')).LoadFromStream(Stream); end else begin
Append;
FieldByName(Acc).Value := Edit1.Text;
TBlobField(FieldByName('TestBlob')).LoadFromStream(Stream);
end;
Post;
Close;
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
Stream.Free;
end;
//读取
procedure TForm1.Button2Click(Sender: TObject);
var
Stream : TMemoryStream;
Blob : TBlob;
nSize : Integer;
begin
Stream := TMemoryStream.Create;
try
with ADOQuery do begin
Close;
SQL.Clear;
SQL.text := 'select * from test where Acc=:nm;
Parameters.ParamByName(nm).Value := Edit1.Text;
Open;
if RecordCount > 0 then begin
TBlobField(FieldByName('TestBlob')).SaveToStream(Stream); //直接这样,读不到数据
//下面先保存到文件,再读进来,就正常,这是为什么呢?总不能总是先保存文件啊?
//TBlobField(FieldByName('TestBlob')).SaveToFile('D:\ffff.txt');
//Stream.LoadFromFile('D:\ffff.txt');
nSize := Stream.Read(Blob, SizeOf(TBlob));
Memo1.Lines.Add('nSize:' + IntToStr(nSize));
Memo1.Lines.Add('Text:' + Blob.sText);
Memo1.Lines.Add('nNum:' + IntToStr(Blob.nNum));
end;
Close;
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
Stream.Free;
end;求大神指点一下,有什么方法可以直接将BLOB读到流中不???
sText : String[14];
nNum : Integer;
end;
//保存
procedure TForm1.Button1Click(Sender: TObject);
var
Stream : TMemoryStream;
Blob : TBlob;
begin
Stream := TMemoryStream.Create; Blob.sText := Edit2.Text;
Blob.nNum := SpinEdit1.Value; Stream.Write(Blob, SizeOf(TBlob));
try
with ADOQuery do begin
Close;
SQL.clear;
SQL.text:= 'select * from test where Acc=:nm';
Parameters.ParamByName('nm').Value:= Edit1.Text;
Open;
if RecordCount > 0 then begin
Edit;
FieldByName(Acc).Value := Edit1.Text;
TBlobField(FieldByName('TestBlob')).LoadFromStream(Stream); end else begin
Append;
FieldByName(Acc).Value := Edit1.Text;
TBlobField(FieldByName('TestBlob')).LoadFromStream(Stream);
end;
Post;
Close;
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
Stream.Free;
end;
//读取
procedure TForm1.Button2Click(Sender: TObject);
var
Stream : TMemoryStream;
Blob : TBlob;
nSize : Integer;
begin
Stream := TMemoryStream.Create;
try
with ADOQuery do begin
Close;
SQL.Clear;
SQL.text := 'select * from test where Acc=:nm;
Parameters.ParamByName(nm).Value := Edit1.Text;
Open;
if RecordCount > 0 then begin
TBlobField(FieldByName('TestBlob')).SaveToStream(Stream); //直接这样,读不到数据
//下面先保存到文件,再读进来,就正常,这是为什么呢?总不能总是先保存文件啊?
//TBlobField(FieldByName('TestBlob')).SaveToFile('D:\ffff.txt');
//Stream.LoadFromFile('D:\ffff.txt');
nSize := Stream.Read(Blob, SizeOf(TBlob));
Memo1.Lines.Add('nSize:' + IntToStr(nSize));
Memo1.Lines.Add('Text:' + Blob.sText);
Memo1.Lines.Add('nNum:' + IntToStr(Blob.nNum));
end;
Close;
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
Stream.Free;
end;求大神指点一下,有什么方法可以直接将BLOB读到流中不???
解决方案 »
- 关于fastreport4报表的问题
- 请教个问题:ondestroy事件中如果自己写了代码,最后一行一定要加上inherit destroy吗?
- IDHTTP实现登录QQ网站
- 为什么mail.body.text 值是"This is a multipart message in MIME format." 而不是邮件正文内容? 如何取得邮件正文?
- 郁闷!!只想散分!!!!!!!!!!!!!!!
- 如何直接将word文档存储到sql数据库,使用ole能不能办到?如何处理?急!!
- 放血了,郁闷到自杀啊!!各位ggjj来看看,给一点思路啊!明天在给100
- 通过delphi的aes加密之后的数据这样是对的吗?
- 我想在mdi应用程序的主框架显示之后弹出系统登陆的对话框
- 用delphi操作word文件
- 内存映像文件能在局域网内共享么
- delphi调用webservice的超时处理(HTTPWebNode timeout)
sText : String[14];
nNum : Integer;
end;
//保存
procedure TForm1.Button1Click(Sender: TObject);
var
Stream : TMemoryStream;
Blob : TBlob;
begin
Stream := TMemoryStream.Create; Blob.sText := Edit2.Text;
Blob.nNum := SpinEdit1.Value; Stream.Write(Blob, SizeOf(TBlob));
try
with ADOQuery do begin
Close;
SQL.clear;
SQL.text:= 'select * from test where Acc=:nm';
Parameters.ParamByName('nm').Value:= Edit1.Text;
Open;
if RecordCount > 0 then begin
Edit;
FieldByName(Acc).Value := Edit1.Text;
TBlobField(FieldByName('TestBlob')).LoadFromStream(Stream); end else begin
Append;
FieldByName(Acc).Value := Edit1.Text;
TBlobField(FieldByName('TestBlob')).LoadFromStream(Stream);
end;
Post;
Close;
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
Stream.Free;
end;
//读取
procedure TForm1.Button2Click(Sender: TObject);
var
Stream : TMemoryStream;
Blob : TBlob;
nSize : Integer;
begin
Stream := TMemoryStream.Create;
try
with ADOQuery do begin
Close;
SQL.Clear;
SQL.text := 'select * from test where Acc=:nm;
Parameters.ParamByName(nm).Value := Edit1.Text;
Open;
if RecordCount > 0 then begin
TBlobField(FieldByName('TestBlob')).SaveToStream(Stream);
Stream.Position := 0; //加上这一句后,就正常了。
nSize := Stream.Read(Blob, SizeOf(TBlob));
Memo1.Lines.Add('nSize:' + IntToStr(nSize));
Memo1.Lines.Add('Text:' + Blob.sText);
Memo1.Lines.Add('nNum:' + IntToStr(Blob.nNum));
end;
Close;
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
Stream.Free;
end;问题已经解决好了。把解决方法也同时回复在这,希望对其他的新手朋友们有些许的帮助。
CSDN的朋友们让我学习到了不少的东西,谢谢大家。