这样的SQL语句该如何些?(200分)

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

meckyhan

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有一个Informix 数据库,其中包含上百万条记录, 该数据库中有一个表,表中包含一个BLOB字段.现在所要做的事情是向这个表添加记录, TTable component 因为众所周知的原因不能在大型数据库应用中应用, 所以只好选择TQuery Component 了,但是TQuery只有对数据库查询过一遍以后才可以向数据库中添加记录, 我向知道是否可以写一条SQL语句可以把该条记录加入到数据库中(关键是数据库中有BLOB字段),如果可以请问各位大虾该如何写? 如果有更好的办法添加BLOB字段的内容,请不啻吝教 ! 谢谢!
 
请问BLOB字段中放的何种类型数据。
 
Blob中放的是一个二进制文件
 
"TQuery只有对数据库查询过一遍以后才可以向数据库中添加记录"
我不敢苟同.
可以试试先INSERT其他字段.
Then 在query中加

UPDATE table
set col='0x10389...'
where ...

的语句执行.
 
这样, 你先insert除blob字段外的其他字段, 然后
query1.sql.clear;
query1.sql:='select * from table1 where field1='+field1+' and field2='+field2.....
//把其他字段的内容输入条件中
query1.active:=true;
query1.last; //确定是最后添加的那条记录
query1.edit;
tblobfield(query1.fieldbyname('blob1')).loadfromfile('xxx');
//或者tblobfield(query1.fieldbyname('blob1')).loadfrommemory(tmemorysteam);
query1.post;


搞定!
 
cytown:
对于query1.last,不太保险把?
我觉得还是用主关键字定位比较好
meckyhan:
> TQuery只有对数据库查询过一遍以后才可以向数据库中添加记录
老兄这句话什么意思?是说查询过一遍确保没有重复记录吗?

 
:CYTOWN,你的回答不就是要先查询一次,而且必须将QUERY1的REQUESTLIVE属性
设置为TRUE;
好象没有什么好办法,看看你使用的数据库软件支持的SQL中有没有直接的
INSERT BLOB语句,将BDE引擎中PASSTHOUGH设置为TRUE,直接使用数据库的
SQL语句
 
先插入非BLOB 字段内容,然后可以利用Stream 将 BLOB 流装入,然后利用
TABLE 定位给BOLB字段赋值,入彀需要示范,可在通知我
 
meckyhan:
> TQuery只有对数据库查询过一遍以后才可以向数据库中添加记录

如果数据库定义有簇式的唯一索引, 对于使用sQl语句
select f1,f2 from Table1的Tquery并不需要查询一遍, 系统
会自动先根据索引顺序查出少量记录送到客户端的,
所以对于有唯一索引的数据查询select f1,f2 from Table1,
server会做的飞快, 你是难以察觉.
-----------------------------------------------

你也可以使用
使用 SQL 语言 Insert 参数方式传送Blob字段.

下为例子.
SQl语句
Insert into Table (FBlob) value ( :FBlob)
其中将参数 FBlob 定义为 Blob 参数类型,
//
query1.Sql.text := 'Insert into Table (FBlob) value ( :FBlob) ';

with Query1.Parambyname('Fblob') do begin
DataType := ftBlob; //定义为Blob参数
ParamType := ptInput ; //定义为输入参数
End;

Query1.Parambyname('Fblob').LoadFromFile('C:/Temp.dat'); //取二进制数据.
Query1.ExecSQL ; //传入数据.








 
正规的做法是把Blob字段另放一个表(一分为二),只有主键和Blob两个字段。//可能不太对题
 
LHXU:
> 对于query1.last,不太保险把?
> 我觉得还是用主关键字定位比较好
呵呵, 如果有关键字, 取出的肯定是唯一的, 你说呢? 不保险只在同时更新/添加
完全一样的两条记录的情况下发生, 而且必须在<1SECOND内完成对另外同样记录的
添加/更新.

SEASKY的方法也不错, 只是可行么? 让我试试看.

 
多人接受答案了。
 
后退
顶部