专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Delphi教程 » delphi计算字段:在delphi中处理sql server中的image、text字段 »正文

delphi计算字段:在delphi中处理sql server中的image、text字段

来源: 发布时间:星期四, 2009年2月12日 浏览:112次 评论:0


下面通过详细例子来讲述如何在delphi中处理sqlserver中image、text字段实际开发需要我们需要处理是text类型字段包括读和写网上很多相关文章都是讲述对image读写操作www. 下面首先介绍如何将图象存储在sqlserverimage字段
其中DataMConn为个针对数据库操作单元放置个ADOConnection,个ADOQuery

//imagetodatabase
procedureTfrmText.Button1Click(Sender:TObject);
var
bm:tbitmap;
ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;

bm:=TBitmap.Create;
bm.Assign(image1.Picture.Bitmap);
bm.SaveToStream(ms);
withDataMConn.ADOQHistorydo
begin
Close;
SQL.Clear;
SQL.Add(’INSERTINTOPackage(PackageID,TempPackage)VALUES(:x,:y)’);
Parameters.ParamByName(’y’).LoadFromStream(ms,ftBlob);
Parameters.ParamByName(’x’).Value:=’aaaaa’;
ExecSQL;
end;
end;

//showimage
procedureTfrmText.Button2Click(Sender:TObject);
var
Stream:TStream;
bm:tbitmap;
begin
withDataMConn.ADOQHistorydo
begin
Close;
SQL.Clear;
SQL.Add(’SELECT*FROMPackageWHEREpackageID=’’aaaaa’’’);
Try
Open;
stream:=DataMConn.ADOQHistory.CreateBlobStream(FieldByName(’TempPackage’),bmRead);
bm:=TBitmap.Create;
bm.LoadFromStream(stream);
image2.Picture.bitmap.Assign(bm);
stream.Free;
except
begin
ShowMessage(’Error!’); [Page]
Exit;
end;
end;//try
end;
end;

下面两个例子是如何处理text类型字段其中读取时候利用了个TDBMemoControl控件来加载读取流数据然后赋值给个WideString类型变量str
//texttostream
procedureTfrmText.Button3Click(Sender:TObject);
var
str:WideString;
ss:TStringStream;
i:eger;
begin
str:=’sstrstrststrstrststrstrstrsttrstrstrrstrstr’;
fori:=1to10000do
begin
str:=str+’sstrstrststrstrststrstrstrsttrstrstrrstrstr’;//43万多个字节
end;
str:=str+’E’;
ss:=TStringStream.Create(str);
//bm:=TBitmap.Create;
//bm.Assign(image1.Picture.Bitmap);
//bm.SaveToStream(ms);
withDataMConn.ADOQHistorydo
begin
Close;
SQL.Clear;
SQL.Add(’INSERTINTOtPackage(PackageID,TempPackage)VALUES(:x,:y)’);
Parameters.ParamByName(’y’).LoadFromStream(ss,ftMemo);
Parameters.ParamByName(’x’).Value:=’aaaaa’;
ExecSQL;
end;
end;


//readtexttoaTDBMemo



procedureTfrmText.Button4Click(Sender:TObject);
var
stream:TStream;
str:WideString;
begin
withDataMConn.ADOQHistorydo
begin
Close;
SQL.Clear;
SQL.Add(’SELECTTempPackageFROMtPackageWHEREpackageID=’’aaaaa’’’);
Open;
notIsEmptythen
begin [Page]
Stream:=DataMConn.ADOQHistory.CreateBlobStream(FieldByName(’TempPackage’),bmRead);
stream.Position:=0;
AMemo.Lines.LoadFromStream(stream);
stream.Free;
end;
end;
end;

//下面是把text字段数据内容直接读到个WideString中而不通过TDBMemo在实际中不知道何种原因线程读到数据后只能在第次处理时正常然后再用鼠标点应用就停了……whoknowsthereason,plstellme&3ks

procedureTfrmText.Button5Click(Sender:TObject);
var
Buffer:PChar;
MemSize:Integer;
Stream:TStream;
str:WideString;
begin
withDataMConn.ADOQHistorydo
begin
Close;
SQL.Clear;
SQL.Add(’SELECTTempPackageFROMtPackageWHEREpackageID=’’aaaaa’’’);
Open;
notIsEmptythen
begin
Stream:=DataMConn.ADOQHistory.CreateBlobStream(FieldByName(’TempPackage’),bmRead);
try
MemSize:=Stream.Size;
Inc(MemSize);//Makeroomforthebuffer’snullterminator.
Buffer:=AllocMem(MemSize);//Allocatethememory.
try
Stream.Read(Buffer^,MemSize);//ReadTempPackagefieldobuffer.
str:=Buffer;
finally
FreeMem(Buffer,MemSize);
end;
finally [Page]
Stream.Free;
end;
end;
end;
end;
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: