var
mystream : TMemoryStream;
mydialog : TOpenDialog;
begin
mystream := TMemoryStream.create;
mydialog := TOpenDialog;
if mydialog.Execute then mydialog.Files.SaveToStream(mystream);
mystream.Position := 0; with query do
begin
close;
sql.clear;
sql.add('insert into tmptab(tmp) values(:tmp)');
★ query.paramByName('tmp').LoadFromStream(tmpstream,ftBlob);
execsql;
end;
mydialog.free;
mystream.free;
end;
如果把上面★行改成
TBlobField(query.paramyname('tmp')).loadfromstream(mystream);
运行时就出现错误!
为什么会这样呢?
mystream : TMemoryStream;
mydialog : TOpenDialog;
begin
mystream := TMemoryStream.create;
mydialog := TOpenDialog;
if mydialog.Execute then mydialog.Files.SaveToStream(mystream);
mystream.Position := 0; with query do
begin
close;
sql.clear;
sql.add('insert into tmptab(tmp) values(:tmp)');
★ query.paramByName('tmp').LoadFromStream(tmpstream,ftBlob);
execsql;
end;
mydialog.free;
mystream.free;
end;
如果把上面★行改成
TBlobField(query.paramyname('tmp')).loadfromstream(mystream);
运行时就出现错误!
为什么会这样呢?
var
myrs : variant;
sql : string;
mystream : TMemoryStream;
mydialog : TOpenDialog;
begin
mystream := TMemoryStream.create;
mydialog := TOpenDialog;
if mydialog.Execute then mydialog.Files.SaveToStream(mystream);
mystream.Position := 0; myrs := CreateOleObject('AdoDb.recordSet');
myrs.cursorlocation := 3;
sql := 这里要实现上面的功能怎么写呢?';
myconn.execsql;
mydialog.free;
mystream.free;
end;
你说的我看不懂~
我脑子笨~
TBlobField(query.FieldByName('tmp')).loadfromstream(mystream);
用原来的是对的。对: Query1.ParamByName('tmp').LoadFromStream(tmpstream,ftBlob);
错: TBlobField(query1.FieldByName('tmp')).loadfromstream(tmpstream);提示
query1 : field 'tmp' not found还有我在二楼写的那中文的部门怎么写呢?
以tblob为主题查看一下帮助你就明白了。
另一个问题你可以使用insert into形式,利用参数进行录入!
你说的不明白。
★ query.paramByName('tmp').LoadFromStream(tmpstream,ftBlob);
是可以通过的。
但是如果把上面的换成
TBlobField(query1.FieldByName('tmp')).loadfromstream(tmpstream);还有这里还不怎么回写,我脑子笨~
sql := 这里要实现上面的功能怎么写呢?';
帮我一下。
都研究了一个下午了,
sql.add('insert into tmptab(tmp) values(:tmp)');
决定该query打开前必须赋值:tmp的参数,否则打不开
你在query尚未打开的情况下给它的字段赋值,当然会出错的
tmp是query的一个参数,它的类型是参数类型TParam;
而TBlobField()的返回值是字段类型,query 中并无字段'tmp',所以提示
"query1 : field 'tmp' not found"
用原来的是对的。对: Query1.ParamByName('tmp').LoadFromStream(tmpstream,ftBlob);
错: TBlobField(query1.FieldByName('tmp')).loadfromstream(tmpstream);提示
query1 : field 'tmp' not found
-------------------------------------------------数据集没有打开,怎么能找到字段 ?这样试试 :Open ;
Edit ;
TBlobField(query1.FieldByName('tmp')).loadfromstream(tmpstream);
Post ; //update Field 'tmp' on First Record
query1.SQL.Clear;
query1.SQL.add('select * from tmptab');
query1.open;
query1.Edit;
TBlobField(query1.fieldbyname('tmp')).loadfromstream(tmpstream);
query1.Post;这样就可以通过,但是好象很烦。
如果用SQL怎么写呢?