主要是两个函数的用法:getmem和getdata()
var
t1:array[0..10] of pchar;
i,s1,s2:integer;
str1,str2,sSql:string;
begin
i:=0;
while adotable1.Eof=false do begin
str1:=adotable1.FieldValues['userid'];
sSql:='insert into p2(userid) select userid from p1 where '+str1+' not in (select userid from p2)';
adoconnection1.Execute(sSql);
if adotable1.FieldByName('pic').IsBlob then
begin
getmem(t1[i],s1);
if adotable1.FieldByName('pic').GetData(t1[i]) then
adotable2.Fields[1].GetData(t1[i])
else
showmessage('图像 is null');
freemem(t1[i]);
end;
i:=i+1;
adotable1.Next;
end;
假设query1连接的是SQL SERVER , Query2连接的是oracle相同的表。
以下是从sql server批量导入oracle中,不管字段是什么类型都行(包括Blob)
var
lp: integer;
begin
Query1.Open;
Query2.Open;
Query1.first;
while not Query1.eof do
begin
query2.Append;
for lp := 0 to Query1.Fields.Count - 1 do
query2.fieldbyname(Query1.Fields[lp].FieldName).AsVariant :=
query1.fieldbyname(Query1.Fields[lp].FieldName).AsVariant;
query2.Post;
Query1.Next;
end;
end;
用内存流吧,oracle我不熟,blob是二进制类型吧,
var
ms: TStringStream;
File_Type: string;
begin
if not (Shy_qry.eof and Shy_qry.bof) then
begin
ms := TStringStream.Create('');
OpenPictureDialog1.InitialDir := sm_directory;
if (OpenPictureDialog1.Execute) and (trim(OpenPictureDialog1.filename) <> '') then
begin
File_Type := ExtractFileExt(OpenPictureDialog1.filename);
if UpperCase(File_Type) <> '.JPG' then
begin
OpenPictureDialog1.Filename := BmpToJpg(OpenPictureDialog1.filename);
end;
Image1.picture.loadfromfile(OpenPictureDialog1.filename);
Image1.Picture.Graphic.SaveToStream(ms);
if not (Shy_qry.State in [dsedit, dsinsert]) then
begin
Shy_qry.Edit;
end;
Shy_qry.Fieldbyname('photo_type').AsString := Copy(OpenPictureDialog1.filename, length(OpenPictureDialog1.filename) - 2, 3);
Ms.Position := 0;
(Shy_Qry.Fieldbyname('photo') as Tblobfield).LoadFromStream(ms);
if Shy_Qry.State in [dsedit] then
begin
Shy_qry.Post;
end;
end;
ms.Free;
end