1、先通过SQL语句,在对方服务器上创建一临时表,
下面是创建临时表的过程:
procedure Create_temptable;
begin
try
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[temptable]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)');
query1.SQL.Add('drop table [dbo].[temptable]');
query1.SQL.Add('CREATE TABLE [dbo].[temptable] (');
query1.SQL.Add('[filename] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,');
query1.SQL.Add('[ny] [image] NULL');
query1.SQL.Add(') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]');
query1.ExecSQL;
except
on e:exception do
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));
end;
end;
在创建表时,我创建了两个字段,filename字段存储文件的文件名,ny字段存储文件的二进制数据。
2、往临时表内插入文件
procedure insert_file(filename:string);
var
openfile:tfilestream;
begin
try
openfile:=tfilestream.Create(filename,FmOpenRead); //创建文件流
query1.Close;
query1.SQL.Clear;
query1.sql.Add('insert into temptable (filename,ny) values(:x,:y)');
query1.Parameters.ParamByName('x').Value:=ExtractFileName(filename);
query1.Parameters.ParamByName('y').LoadFromStream(openfile,ftBlob);
query1.ExecSQL;
finally
freeandnil(openfile);
end;
end;
3、插入文件之后,就应该让服务器,自动去读取临时表内的内容,并把表内的二进制数据转储为文件,
这样就达到了将文件上传到服务器的目的。
procedure Create_temptable;
begin
try
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[temptable]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)');
query1.SQL.Add('drop table [dbo].[temptable]');
query1.SQL.Add('CREATE TABLE [dbo].[temptable] (');
query1.SQL.Add('[filename] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,');
query1.SQL.Add('[ny] [image] NULL');
query1.SQL.Add(') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]');
query1.ExecSQL;
except
on e:exception do
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));
end;
end;