如何处理 MEMO 字段数据(12分)

  • 主题发起人 主题发起人 question
  • 开始时间 开始时间
Q

question

Unregistered / Unconfirmed
GUEST, unregistred user!
使用 InterBase 建立了一个数据表 aa01 ,其中有两个字段
a01 字符型,a02 备注型
现在想使用 update 命令更新数据,需要对 MEMO 中的数据进行追加。
如:
query1.sql.add('update aa01 set a02=:cs01 where a01=:cs02');
query1.Params[0].AsMemo:='1234567';
Query1.Params[1].AsMemo:='1';
Query1.ExecSql;

连续执行后得到的 MEMO 是:
1234567
如何得到(如执行三次)
1234567
1234567
1234567
的效果,急!
PS:请不要建议我先将数据取回后加了在发。谢谢!
 
'update aa01 set a02=:cs01 where a01= a01 +:cs02'
不就完了!
 
好象不对,至少在 InterBase 中 + 号是用 || 表示。
 
'update aa01 set a02=a02+:cs01 where a01=:cs02'
是这样!
 
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
query1.SQL.Clear;
query1.SQL.Add('update a1 set a02=:a02');
query1.Prepare;
query1.Params[0].asmemo:=table1['a02']+#13+'1234567';
query1.ExecSQL;
end;

这个没问题,我已经试过了,加分吧。
 
请注意我的问题
PS:请不要建议我先将数据取回后加了在发。

不知道你的过程中:query1.Params[0].asmemo:=table1['a02']+#13+'1234567';
Table1 是什么东东,如果是 TTable 那就没用,那等于取回了以前的数据,
我不要这样实现。
 
var 一二三四...:string;

一二三四...:='1234567';
query1.Prepare;
for i:=1 to 3 do
begin
query1.SQL.Clear;
query1.SQL.Add('update a1 set a02=:a02');
query1.Params[0].asmemo:=一二三四...;
query1.ExecSQL;
一二三四...:=一二三四...+#13+'1234567';
end;

这个没问题,我已经试过了,加分吧。

copy from yaojiaqing;
 
我昏倒!
那个 1234567 是动态的 ,我需要的 目的是:
如果a02中已经有了
1234567
222222
432425
6465464
...
我现在如何在他后面加制定的字符,如 1234567
我需要通过 Update 语句的 形式,但不要先
用类似 select a02 from a1 的形式取回数据再加上需要
增加到其尾部的 1234567.
这下问题够清楚了吧! :)
 
其实道理都一样,无论是用什么方法,您总要取得原来的memo字段的内容,
table是直接得到和query没什么不同。关键是memo字段内容是string型,
当你取得该字段的内容后,用字符串函数比如pos,copy,+,delete等肯定会
计算出您需要的结果,把这个结果作为update sql的params,然后运行
sql,这不就是您需要的吗?
 
好好看看SQL语法!
update aa01 set a02=a02+:cs01 where a01=:cs02'
可以完成A02字段得数据追加!
 
用TBlobStream试试
 
delphi fan2
在 InterBase 上,当 A02 是备注字段的时候,你的这个语句不出现错误。
update aa01 set a02=a02+:cs01 where a01=:cs02'
麻烦,以后没错误在 POST. OK?
 
由于这个数据库的备注字段是记录日志的,所以会不断的变大,如果每次都要取回到本地来在 Update 会严重影响效率的。
我想得到的解决方法就和 delphi fan2 提到的
update aa01 set a02=a02+:cs01 where a01=:cs02' 类似,即将这个加的动作
交给服务器端去完成。可这个语法有错误,我问问题前就试了。
我的是
update aa01 set a02=a02||:cs01 where a01=:cs02'
在 InterBase 中,服务器端对于字符相加的符号是 || 非 +
谢谢!
 
update aa01 set a02=a02||:cs01 where a01=:cs02
这样应该在Interbase里没问题吧!
 
就是有问题呀,这样回提示操作 二进制 类型出错
我的备注型是 TEXT 类型的,是否有错误。
 
Sql不支持Blob型数据!如果数据量不大,还是用varchar.
 
难道就真的没有办法了吗???
我的 备注字段数据量很大的,有什么好的解决方案吗?
 
其实你为何非要在一个表中这样做; 从数据结构下手;
你的一个那个MEMO改做成一个附表(一个外键字段, 一个添加条目).
例如
主表 A01
---
A
B
C
附表(在A01上做索引)
A01(char) A02(varchar)
--- ---
A 1111111
A 2222222
A 33445566
B 7777777
B 8888888
B 9999999

实际上数据库中备注字段的存储也是利用这样的一对多的关系将
大数据分隔成若干单元块, 各个单元与它所在记录的联系就是一种
一对多关系.
 
接受答案了.
 
后退
顶部