数学建模社区-数学中国
标题:
在 C++Builder 中,如何自定义属性 [properties] ?
[打印本页]
作者:
韩冰
时间:
2005-1-26 12:32
标题:
在 C++Builder 中,如何自定义属性 [properties] ?
[摘自 水木清华站]
# V: `' ]1 Z% C4 w
: ^/ p9 k7 d2 W, O b
+ M: b7 \* ^9 I5 y: {- r8 g
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
+ W3 G2 \/ b( C ?# k# b0 R
BLOB字段的读取:
h* `: S2 t2 I% z: _: a7 Z
TBlobSTream* TemplateStream;
' y+ ^6 f- ?3 D# W
char* TempPlatePtr;
% C2 T3 D" T8 r+ t1 C
: Y. x- p, c) E. \" A4 j
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
2 |! O. d2 \. y# Z7 w
("SearchTem"),bmReadWrite);
. T" W. y7 t" `& C+ V
TemplatePtr= new char[TemplateStream->Size];
9 P1 ^- A* a4 Y9 [
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
8 H' b# ]( `/ S8 {4 a& _
) \( U, z/ h$ b U$ [. I/ }% S
BLOB字段的写入:
' p/ C i: `$ Y
TBlobSTream* TemplateStream;
; J8 R. I8 l/ ]" a5 H( n6 x+ s
char* TempPlatePtr;
+ E+ |; Z- ~ Q6 s1 O
[2 }- B3 O: T2 {" h+ K$ q
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
, E% W) \- N; \+ P% Y, [
("SearchTem"),bmReadWrite);
3 K* E5 k& K( g' _9 v: a! B8 _, [) [
TemplatePtr= new char[TemplateStream->Size];
& Z0 w1 s' S) z! M
TemplateStream->Write(TemplatePtr, TemplateStream->Size);
( B Y. O5 X f9 V& G
1 Y/ o% D, |& i) f2 F m
________________________________________________________________
" X: g# `! ?7 @! q3 K& X" d
补充:
: S0 P; m/ m: B, N7 X
获得字段的大小用函数datalength
4 \/ n" o1 C2 V
! J# y9 _1 u) F L# M$ w& x' r3 r
SQL Server端要作一点设置:
; g* f) u8 _& `, L
By default, WRITETEXT is a nonlogged operation. This means that
' ~/ o4 Q1 B) _5 z
text or image data is not logged when it is written into the database.
) \$ k0 _0 {" ~2 _! r3 Y4 H. a+ J
To use WRITETEXT in its default, nonlogged state,
8 i, t" c; v* a0 U
//注意!!
2 v \; a& a& L: N% J% a6 C
the system administrator must use the sp_dboption system stored
8 |6 E8 m8 x3 T- }( }/ @
procedure to set select into/bulkcopy,
% N5 W# Y% u5 \1 o% h" B
//
: |$ M) E( o7 k/ c. _* d
which allows nonlogged data to be inserted.
, Y" D/ D4 w% V+ I8 @ B% \, h
7 |# p" u C7 l* H' a. G5 X z( {
做了试验,直接写SQL语句好象不行.
# e% T1 A& u) D8 A) S
____________________________________________________________________
9 _4 V/ a. j" ?
一些注意事项和一个例子
0 ?6 L# W. L$ S- y3 Q0 ~
在写入时:
6 F; y$ X2 Q' n8 h# U' `6 B
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
0 p/ k, F/ Q; |4 G0 F+ z) g
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
) m3 i3 U" M4 d
使得TTable(TQuery)是可写的.
+ J7 F r% e& L% Y
0 b$ I M, v& e0 \' a
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
; M. P; l; g- w( {# E
script为一个BLOB字段:
+ Z+ a1 W5 J# I" d+ t
TBlobStream *pScriptStream;
- z+ R" Q7 B* B+ `
//插入一条记录
V* G8 U+ l" K3 y% H
strSQL1="insert into content(file_id,script,key_image) values('";
) D- B6 `- I0 D3 y: P* @* Q
strSQL1=strSQL1+m_szFileID+"',null,null)";
0 i6 w8 h) I* K) W# c; a
dmStoryEditor->qryExec->SQL->Clear();
! y: E' Y$ H3 d. [, M% J2 e# l- @% d* r
dmStoryEditor->qryExec->SQL->Add(strSQL1);
9 q, H9 l* K( w, U$ l: y! F
dmStoryEditor->qryExec->ExecSQL();
: ^; n2 G( ^/ K" y
dmStoryEditor->qryExec->Close();
( e$ U/ F/ t9 {! e: ~+ Q
//整理要写入的Blob数据
8 X* X9 n+ p; H0 ~. A" m( {4 b
LockMemories(NewsScript);
" b$ t3 Z! D5 r, u
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
5 a/ I- Y) e* i9 ?" v% U: e3 S, ^
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
7 m, V0 w: @+ D" G6 A2 _
if(NewsScript.m_pScript!=NULL)
9 i/ b7 \. h6 a* E+ ^1 x1 [. ?" M
{
# T% ^" t; `% q2 e' i
//再将刚插入的记录读出来,使该Query与该条记录关联
( c0 w" R2 T# \+ a/ {/ S* t
strSQL1="select file_id,script from content where file_id='"+
% U% u6 R, l# I9 o( i
m_szFileID+"'";
& Q; J3 W) y; F3 l2 `5 r
//允许该Query写
% j6 `. A; E H1 \$ _
dmStoryEditor->qryExec->RequestLive=true;
8 H- o5 ^( c" E- p: E2 ^7 b
dmStoryEditor->qryExec->SQL->Clear();
2 [ c9 }% z/ @7 R
dmStoryEditor->qryExec->SQL->Add(strSQL1);
F3 s. J' g: X) M6 }
dmStoryEditor->qryExec->Open();
( H2 P$ N. F+ }8 F, l6 e
dmStoryEditor->qryExec->First();
: v) r) x+ f' y6 K: c* Z1 d( V2 m
//将该Query置为可写
8 j6 M/ X# @0 }; {( a+ H7 O
dmStoryEditor->qryExec->Edit();
3 u* [1 m8 \2 J. F
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
! D% q, d/ N" A8 v i* f
qryExec->FieldByName("script"),bmReadWrite);
) ^! [0 X6 W( j0 z+ u
pScriptStream->Write(NewsScript.m_pScript,
% V6 e( h; M; |9 o- ^) k
NewsScript.m_lScriptRealSize);
9 P/ m; A% X3 \8 u. H
dmStoryEditor->qryExec->
ost();
K: E3 b& m* ?! C
dmStoryEditor->qryExec->RequestLive=false;
+ Q* S: u k, |
delete pScriptStream;
: S$ X4 _ `' U' A9 v' r3 w
}
) F( F( A4 c/ v& K
GlobalUnlock(NewsScript.m_hScript);
- P* Q: i8 R6 j, |- K
UnLockMemories(NewsScript);
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5