困扰了本人一天的问题(100分)

  • 主题发起人 主题发起人 monkeyboys
  • 开始时间 开始时间
M

monkeyboys

Unregistered / Unconfirmed
GUEST, unregistred user!
其实昨天提出过这样的问题,最后因为其他
原因终止了讨论。今天只好再次提问了。


本人用oracle8i,delphi5.0通过BDE连接数据库。
其中有一个表如下结构:
create table icon_bmp
(
code varchar2(2),
name varchar2(20),
memo blob
)

我在MEMO字段中放入了BMP格式的图片,
现在想根据code的变化,查询memo的图片内容
但是用query1.open 的时候就报错:
invalid field type

用table查询也是如此。

var
aa : tblobfield;
ss:string;
begin
aa:=tblobfield.create(self);
aa.fieldname:='memo';
aa.dataset:=query1;

query1.close;
query1.sql.clear;
ss:='select * from icon_bmp where code=''%s'' ';
ss:=format(ss,['0']);
query1.sql.add(ss);
query1.open;

aa.savetofile('d:/tmp.bmp');
.....
......
end;

不打开表怎么完成查询呢?都困扰我一天了,
急于解决,大家帮帮忙吧。
 
不会啊,很正常嘛,我试过了,可以的阿

原来我以为是Memo字段的字段名起的不行,但是是可以的,
也没有出现上面你说的问题,只是在Query.Active=True的情况下,执行Aa.DataSet:=Query1会出错
 
不是已经open了吗?
 
不,在query1.close后时open,
或者在调试时在query1的sql中写上以上sql语句,将query1.active设为true 时
也报同样的错,
是不是我的机器的设置上哪的问题呀?
或者我的delphi有问题?
 
先把query close掉
然后将blobfield的数据集指向query
然后再open ,这样应该没错啊!
跟踪一下看看是在哪一步报错
 
var
ss:string;
begin
query1.close;
query1.sql.clear;
ss:='select * from icon_bmp where code=''%s'' ';
ss:=format(ss,['0']);
query1.sql.add(ss);
query1.open;

TBlobField(Query1.FieldByName('blob')).savetofile('d:/tmp.bmp');
.....
......
end;
 
在前面OPEN也不行,还是会报错。
 
问题出在SQL语句,在条件表达式中如何正确表示字符(串)数据是问题所在,
通常字符(串)应有引号括起来。但表达方式有不同的写法。
比如可以写成如下形式:
var
ss:string;
begin
query1.close;
query1.sql.clear;
[red]ss:='select * from icon_bmp where code='+''''+s+'''';[/red]
.......
其中的引号用“''''”表示。
 
多人接受答案了。
 
后退
顶部