帮忙解答,急死了,这么用adostoreprecedure存取image字段?????
with PacsDataMO.adspPACS do
begin
if Active then close;
ProcedureName := 'SP_DIA_UPDATE_IMG_HZX';//HZX
Parameters.Clear;
Parameters.CreateParameter('NODE_ID',ftinteger,pdInput,20,NodeID); Parameters.CreateParameter('NODE_IMG',ftBlob,pdInput,65535,Image1.Picture.Bitmap);
这里的长度我不知道这么设置,而且Image1.Picture.Bitmap也报错,通不过,
只能用这种带参数的adosp,不好办阿.
Parameters.CreateParameter('NODE_NAME',ftstring,pdInput,20,'');
Parameters.CreateParameter('ACTION',ftinteger,pdInput,20,2);
Parameters.CreateParameter('OP_TAG',ftinteger,pdInput,20,OP_TAG);
-------------
'SP_DIA_UPDATE_IMG_HZX'如下
CREATE PROCEDURE SP_DIA_UPDATE_IMG_HZX
@NODE_ID INT,@NODE_IMG image,@NODE_NAME NVARCHAR(100) ='',@ACTION int,
@OP_TAG int
AS
if @OP_TAG = 1
begin
IF @ACTION = 1
UPDATE BCZSK.dbo.个人资料库 SET 结点名称 = Rtrim(Ltrim(@NODE_NAME)) WHERE 结点标识 =@NODE_ID
ELSE IF @ACTION =2
UPDATE BCZSK.dbo.个人资料库 SET 照片 =@NODE_IMG WHERE 结点标识 =@NODE_ID
return
end
GO
with PacsDataMO.adspPACS do
begin
if Active then close;
ProcedureName := 'SP_DIA_UPDATE_IMG_HZX';//HZX
Parameters.Clear;
Parameters.CreateParameter('NODE_ID',ftinteger,pdInput,20,NodeID); Parameters.CreateParameter('NODE_IMG',ftBlob,pdInput,65535,Image1.Picture.Bitmap);
这里的长度我不知道这么设置,而且Image1.Picture.Bitmap也报错,通不过,
只能用这种带参数的adosp,不好办阿.
Parameters.CreateParameter('NODE_NAME',ftstring,pdInput,20,'');
Parameters.CreateParameter('ACTION',ftinteger,pdInput,20,2);
Parameters.CreateParameter('OP_TAG',ftinteger,pdInput,20,OP_TAG);
-------------
'SP_DIA_UPDATE_IMG_HZX'如下
CREATE PROCEDURE SP_DIA_UPDATE_IMG_HZX
@NODE_ID INT,@NODE_IMG image,@NODE_NAME NVARCHAR(100) ='',@ACTION int,
@OP_TAG int
AS
if @OP_TAG = 1
begin
IF @ACTION = 1
UPDATE BCZSK.dbo.个人资料库 SET 结点名称 = Rtrim(Ltrim(@NODE_NAME)) WHERE 结点标识 =@NODE_ID
ELSE IF @ACTION =2
UPDATE BCZSK.dbo.个人资料库 SET 照片 =@NODE_IMG WHERE 结点标识 =@NODE_ID
return
end
GO
function BitmapToOLE( var img :TImage;; var ole:OLEVariant ):Integer;
var i:integer;
stm:TStream;
p:pchar;
begin
stm := TStream.Create;
try
img.Picture.Bitmap.SaveToStream( stm );
stm.Postion := 0;
i := stm.Size;
ole := vararrayCreate([0,i-1],varbyte);
p := vararrayLock( ole );
stm.Position := 0;
stm.Read(p^, i);
vararrayunlock(ole); Result := stm.Size;
finally
stm.Free;
end;
end;调用方法如下:
var ole:OLEVariant;
iSize :Integer;
....
begin
...
iSize := BitmapToOLE( Image1, ole ); ... Parameters.CreateParameter( 'NODE_IMG', ftBlob, pdInput, iSize, ole );当然最后最好要把ole 占用的空间给释放掉。