- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]: U2 X% `9 I5 ]
% \, Q4 G- Y+ N$ Z( U+ @9 e" z4 a) b / U# @( ~" g9 y7 G: v5 e: W& W; j
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
5 E) x0 N- @- p% y$ `BLOB字段的读取: 3 [. j) f, S# x' X
TBlobSTream* TemplateStream; 1 `# @* k; W) t2 a; u
char* TempPlatePtr;
" a7 @# D( P+ P1 a- V
' g6 e9 z3 y/ P' p4 \3 B, K TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName 4 v0 a6 |2 k9 k0 R& B" `/ A$ p
("SearchTem"),bmReadWrite);
( U2 n C2 @5 x# P7 v TemplatePtr= new char[TemplateStream->Size];
5 d" Z4 n+ Y6 s2 P7 k m: o# u TemplateStream->Read(TemplatePtr, TemplateStream->Size);
9 ]8 s! S* M: z ]% V& f. U
1 a% I* j$ s% w8 @BLOB字段的写入: ' G4 d$ H; j' z2 @$ \3 }
TBlobSTream* TemplateStream; % s, c8 `9 n! s4 j
char* TempPlatePtr; 7 O5 n6 O( y& G% B% b: b+ x( c5 }
1 a0 R9 A" K# u# L
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
) d$ x5 w1 \3 W$ P9 A ("SearchTem"),bmReadWrite); 2 g" Y5 o1 c$ y) i9 P
TemplatePtr= new char[TemplateStream->Size];
) a# x" n8 V1 B5 J! G TemplateStream->Write(TemplatePtr, TemplateStream->Size);
% q# w- y- f6 m- S& v
1 i* Y+ x$ ^( E- {, }" S8 e8 I, m- h ?________________________________________________________________ d( ^- z0 V2 f. a9 R+ z
补充: 7 R: {; N* a% { d9 C$ t) r- d
获得字段的大小用函数datalength 3 O) F+ d& R9 P* p" H6 w
# J8 @) h' N( \" p# {SQL Server端要作一点设置:
; {& k! r6 X7 C6 g( o B0 \, |1 l& BBy default, WRITETEXT is a nonlogged operation. This means that
, T$ ^* Q5 Z+ B4 m% gtext or image data is not logged when it is written into the database.
2 `9 g! G K; V3 _4 A2 F$ QTo use WRITETEXT in its default, nonlogged state,
1 h2 b7 U9 W; c0 s5 x//注意!! ) X, Y& w* [2 D' h! H
the system administrator must use the sp_dboption system stored / ]( C- x% e8 y" D) t% C- q# Z1 `
procedure to set select into/bulkcopy,
( N" S( S' X* |% ]- y9 G( a( W0 }// $ E9 O" E, e2 l" Q. j& ?
which allows nonlogged data to be inserted.
/ E5 H7 f H3 x# @9 T( m# y2 o ; @8 j- I& g- T+ W
做了试验,直接写SQL语句好象不行. ! C7 r! n8 z" i+ s
____________________________________________________________________ 4 ?) a6 z! p3 C) _1 U0 K
一些注意事项和一个例子
8 q+ j6 c. @" H在写入时:
2 A* x- e* t- J; [* l$ F# q% J(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
: x* i. s3 e( o) v(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
+ L/ E; {) l# c% L. ^) f使得TTable(TQuery)是可写的.
& M( d3 [# g9 j: l D% D 1 {5 I6 F# o8 R; O- B, K
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
; K3 ]$ V( i* O: j( cscript为一个BLOB字段: + a( F% m+ ?: H# d2 _& C
TBlobStream *pScriptStream; # H- F% S' N1 I7 G$ }3 u, {
//插入一条记录
g. I( g* V# K1 Q& Q- L strSQL1="insert into content(file_id,script,key_image) values('"; 6 \, r3 f6 I' [* \" \. [0 \$ b
strSQL1=strSQL1+m_szFileID+"',null,null)"; 0 a% \4 @* {0 L0 f+ d2 @, |
dmStoryEditor->qryExec->SQL->Clear(); ' l# }1 @" _3 o2 Z5 J U
dmStoryEditor->qryExec->SQL->Add(strSQL1);
" ~- c5 p* c B; {8 u! H dmStoryEditor->qryExec->ExecSQL();
" @; k8 ?& T% y8 E7 e dmStoryEditor->qryExec->Close(); # Q; W4 G4 _& }1 r7 N4 n# D7 v8 b o
//整理要写入的Blob数据
$ |8 E3 I5 X# ] LockMemories(NewsScript);
$ O$ e, Q, g1 `7 Y6 |1 P7 |8 |2 Q NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
: b6 R: m+ |, W NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
- L3 v; R5 M# \- Z; [4 s if(NewsScript.m_pScript!=NULL) 6 h; Q) n. X, G8 `. N+ g, W
{
) T( C" U. I! [7 m" J* r //再将刚插入的记录读出来,使该Query与该条记录关联
2 \0 y+ g+ l% Z4 Y strSQL1="select file_id,script from content where file_id='"+ ( d u! V6 P( X' u/ i
m_szFileID+"'";
0 B1 \+ A0 ]9 T- d% m //允许该Query写 - p2 B5 z' y( Z9 a
dmStoryEditor->qryExec->RequestLive=true;
1 P; W. W! v, a- x) v dmStoryEditor->qryExec->SQL->Clear(); & M4 ~; y; f N2 o- p2 n( v
dmStoryEditor->qryExec->SQL->Add(strSQL1); 4 Q) O5 Q. h& `* Q* H6 q
dmStoryEditor->qryExec->Open();
/ ?$ s% m# s& @- u2 {, O dmStoryEditor->qryExec->First(); f M7 g1 @0 ~7 u0 k' q
//将该Query置为可写
' ]% t) W/ Q8 W' J6 y' i n dmStoryEditor->qryExec->Edit(); # w2 E. L6 I7 E' `8 W
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
7 g' E7 o0 k4 T: l9 m qryExec->FieldByName("script"),bmReadWrite); F) P( Z* t% O9 H/ k
pScriptStream->Write(NewsScript.m_pScript,
1 u6 B5 K6 \8 J) a, @/ ~! ` E NewsScript.m_lScriptRealSize); ( I( J" C( p5 I F3 F' s2 p+ {
dmStoryEditor->qryExec-> ost();
$ j+ Z; v+ f) ^ dmStoryEditor->qryExec->RequestLive=false; 5 Q" s# l* c% ^# V; w6 c
delete pScriptStream; 0 l, i1 b- W1 H2 S3 k. _3 ?
}
5 f3 J9 s. X" C6 P7 ? GlobalUnlock(NewsScript.m_hScript);
' {2 {# }9 P4 r/ f D/ N, p. k UnLockMemories(NewsScript); |
zan
|