数学建模社区-数学中国
标题:
在 C++Builder 中,如何自定义属性 [properties] ?
[打印本页]
作者:
韩冰
时间:
2005-1-26 12:32
标题:
在 C++Builder 中,如何自定义属性 [properties] ?
[摘自 水木清华站]
$ ?* `$ }$ @' Z0 L
# E1 d' X8 g2 G
2 o, g( F; s: ?3 s- \
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
! {9 A2 \- Z2 q$ l( y
BLOB字段的读取:
0 j, [9 I ^0 c2 c, A8 g
TBlobSTream* TemplateStream;
/ F l" l0 h. x+ h' V* ~8 @
char* TempPlatePtr;
' {% W4 G& H `% v( K
# l+ N, l/ h! J
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
0 O2 J$ e! n1 X1 v- r7 I8 B
("SearchTem"),bmReadWrite);
2 F; r0 u1 n1 l0 T
TemplatePtr= new char[TemplateStream->Size];
1 q! T3 x: C7 b% E( j1 E
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
! i2 F) @4 x. X% t
) M) u" y5 K) \" s7 N
BLOB字段的写入:
/ Q3 @- Q! u4 R4 x
TBlobSTream* TemplateStream;
A8 w' K3 j6 S
char* TempPlatePtr;
; w# [- r6 z/ P: P+ s2 {( j
+ g$ F& I" W# _
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
8 C$ t0 F/ [' ^- D @7 \' @& X
("SearchTem"),bmReadWrite);
# e, N$ ]7 d- B' x
TemplatePtr= new char[TemplateStream->Size];
+ P$ w* v3 F( b9 n) d/ H
TemplateStream->Write(TemplatePtr, TemplateStream->Size);
+ D) U6 E8 M& h, @1 @0 J$ ]) P. Z
) m$ Q2 G7 l. J. G9 j. T( l
________________________________________________________________
+ F J; J3 ~7 i
补充:
4 q" S* Q4 b, ^) O. P# c! m* B
获得字段的大小用函数datalength
L9 C3 K2 W" P3 s. w Z
- Z' E/ m9 p7 c Q) x
SQL Server端要作一点设置:
/ K" e5 K7 T+ h, _5 ~9 w8 j% X
By default, WRITETEXT is a nonlogged operation. This means that
. ~0 K y6 s$ k# Z! K+ f2 t8 ~
text or image data is not logged when it is written into the database.
8 A) j) X C8 m
To use WRITETEXT in its default, nonlogged state,
6 |- U: S( M* L& u: ^
//注意!!
; T7 J) B7 D3 p
the system administrator must use the sp_dboption system stored
8 }3 S. X% m% Y) M8 ~
procedure to set select into/bulkcopy,
7 T& F7 c' Z% Q$ H6 g" V' y
//
' T s' k0 E# ]# W
which allows nonlogged data to be inserted.
. A0 y# X ]& `) A
u3 r7 F; M& ~0 `3 i
做了试验,直接写SQL语句好象不行.
1 s) t, R& X* } [% g* n
____________________________________________________________________
3 P1 d. N3 s, c* j0 X
一些注意事项和一个例子
! U' q9 \! _% l) {* C/ G; @
在写入时:
' R6 M' R0 S- s! F
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
, Y' P H! B2 m, S
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
7 [3 y" e# L. L( q" a1 A
使得TTable(TQuery)是可写的.
; I6 \. G' R8 v% z: W/ b# U. k
9 l! y8 ?% i- q7 V$ H+ i
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
3 q8 [' m) l8 X3 {
script为一个BLOB字段:
- E2 } x/ r# m/ y
TBlobStream *pScriptStream;
6 M- {/ L7 F% {% N% X
//插入一条记录
9 N) ~) [/ U$ q% @' [
strSQL1="insert into content(file_id,script,key_image) values('";
# @& G( i; f- ^3 R. L1 E3 M$ y
strSQL1=strSQL1+m_szFileID+"',null,null)";
$ h- U' R5 I; a w: k2 a
dmStoryEditor->qryExec->SQL->Clear();
; X( w+ G7 Q" R+ p% ?% c! n- s: c' Q
dmStoryEditor->qryExec->SQL->Add(strSQL1);
. w7 _7 K' s! ?- J6 P$ P4 U/ h: P
dmStoryEditor->qryExec->ExecSQL();
' U$ C# \2 B) s; Y l; l
dmStoryEditor->qryExec->Close();
4 m0 y+ g% K8 y/ p; F# _
//整理要写入的Blob数据
& j" R0 X# r0 S* V1 b" p j
LockMemories(NewsScript);
l& v; J4 v% o
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
7 m( ?1 k& ?' R6 n4 X+ ]8 |
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
& T1 a: G" m7 z8 L9 Q+ m7 j9 c0 |6 ?3 K7 A
if(NewsScript.m_pScript!=NULL)
6 i6 {4 Z. }& j* F \
{
) _( V8 {2 @% }- E' l7 G/ i. P, A! U
//再将刚插入的记录读出来,使该Query与该条记录关联
3 ~3 O5 G/ p* S8 w9 [( {7 w
strSQL1="select file_id,script from content where file_id='"+
' U. r$ J* M; d2 \ j8 d K
m_szFileID+"'";
1 X+ a/ j- M9 N
//允许该Query写
4 d4 J x P4 ]3 c' T E
dmStoryEditor->qryExec->RequestLive=true;
* w/ J- q( n; a2 k8 I
dmStoryEditor->qryExec->SQL->Clear();
, }8 a; m3 x, d. _- \
dmStoryEditor->qryExec->SQL->Add(strSQL1);
2 j& Y3 R1 B' v9 Q& {7 l `
dmStoryEditor->qryExec->Open();
2 h) F2 t q6 y! h
dmStoryEditor->qryExec->First();
$ [6 c) L( q( d
//将该Query置为可写
) B7 ]* i j" a0 b1 J
dmStoryEditor->qryExec->Edit();
; x# V9 O( ^6 A$ t& ]
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
1 B' T/ L# A, p
qryExec->FieldByName("script"),bmReadWrite);
# k) h, [# t/ q4 N% W
pScriptStream->Write(NewsScript.m_pScript,
V! V5 M* T8 ~
NewsScript.m_lScriptRealSize);
7 d' C, b# [ L ?$ z, [
dmStoryEditor->qryExec->
ost();
" I: [' {" O: J S( q
dmStoryEditor->qryExec->RequestLive=false;
* @1 K1 O3 c, N
delete pScriptStream;
- H. h, `) d3 r) e E3 d
}
7 n# S1 o; I1 z& [, F+ \$ B
GlobalUnlock(NewsScript.m_hScript);
' @/ K4 O+ f3 C8 C
UnLockMemories(NewsScript);
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5