00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320 #ifndef INC_RVC_DBTABLE_H
00321 #define INC_RVC_DBTABLE_H
00322
00323 #ifndef INC_RVC_DBASE_H
00324 #include <rvc/dbase.h>
00325 #endif
00326
00327 #ifndef INC_RVC_STYLE_H
00328 #include <rvc/style.h>
00329 #endif
00330
00331 #ifndef INC_MI32_UNITCONV_H
00332 #include <mi32/unitconv.h>
00333 #endif
00334
00335 #ifndef INC_MI32_BITSET_H
00336 #include <mi32/bitset.h>
00337 #endif
00338
00339 #ifndef INC_MI32_RANGE_H
00340 #include <mi32/range.h>
00341 #endif
00342
00343 #ifndef INC_MI32_TEXTID_H
00344 #include <mi32/textid.h>
00345 #endif
00346
00347 #ifndef INC_MI32_GREMODE_H
00348 #include <mi32/gremode.h>
00349 #endif
00350
00351 #include <vector>
00352
00353 namespace RVC {
00354
00355 #ifndef GENERATING_DOXYGEN_OUTPUT
00356 class STYLE;
00357 class DBASE_ELEMENT;
00358 #endif // GENERATING_DOXYGEN_OUTPUT
00359
00360 class DBTABLE : public RVC::OBJECT {
00361 public:
00362
00363
00364 enum ATTACHMENT {
00365 ATTACHMENT_Unknown = 0,
00366 ATTACHMENT_OneRecordPerElement,
00367 ATTACHMENT_OneElementPerRecord,
00368 ATTACHMENT_OneToOne,
00369 ATTACHMENT_RelatedOnly,
00370 ATTACHMENT_Identity,
00371 ATTACHMENT_NoRestrictions
00372 };
00373
00374
00375 enum FINDFLAG {
00376 FINDFLAG_AllAttached = 0,
00377 FINDFLAG_OnlyDirect = 2,
00378 FINDFLAG_FirstMatch = 8
00379 };
00380
00381
00382 enum INDEXSEARCH {
00383 INDEXSEARCH_ReturnIndexOffset = 0x00000000,
00384 INDEXSEARCH_CheckExists = 0x00000001,
00385 INDEXSEARCH_ReturnRecordNumber = 0x00000002,
00386 INDEXSEARCH_ReturnInsertOffset = 0x00000004
00387 };
00388
00389 enum ITERATERECORD {
00390 ITERATERECORD_None = 0x0000,
00391 ITERATERECORD_SkipDeleted = 0x0001,
00392 ITERATERECORD_Sort = 0x0002,
00393 ITERATERECORD_UniqueOnly = 0x0004,
00394 ITERATERECORD_SaveIndex = 0x0008,
00395 ITERATERECORD_SingleKey = 0x8000
00396 };
00397
00398
00399 enum LINKTYPE {
00400 LINKTYPE_Internal = 0,
00401 LINKTYPE_MIPS,
00402 LINKTYPE_DBASE3,
00403 LINKTYPE_INFO,
00404 LINKTYPE_DBASE4,
00405 LINKTYPE_RBASE,
00406 LINKTYPE_DBASE2,
00407 LINKTYPE_ODBC,
00408 LINKTYPE_CSV,
00409 LINKTYPE_TAB,
00410 LINKTYPE_ORACLE
00411 };
00412
00413
00414 enum REFELEM {
00415 REFELEM_All = 0x00000000,
00416 REFELEM_Node = 0x00000010,
00417 REFELEM_Edge = 0x00000020,
00418 REFELEM_Triangle = 0x00000040,
00419 REFELEM_Hull = 0x00000080
00420 };
00421
00422
00423 enum STRUCTCOMPARE {
00424 STRUCTCOMPARE_DoNotMatch = 0,
00425 STRUCTCOMPARE_Exact,
00426 STRUCTCOMPARE_Compatible,
00427 STRUCTCOMPARE_SameTable
00428 };
00429
00430
00431 enum TABLECAP {
00432 TABLECAP_None = 0x00000000,
00433 TABLECAP_CanCreate = 0x00000001,
00434 TABLECAP_CanLink = 0x00000002,
00435 TABLECAP_ReadMemo = 0x00000004,
00436 TABLECAP_WriteMemo = 0x00000008,
00437 TABLECAP_WriteRecord = 0x00000010,
00438 TABLECAP_MultiTable = 0x00000020,
00439 TABLECAP_Server = 0x00000040,
00440 TABLECAP_Import = 0x00000080,
00441 TABLECAP_Export = 0x00000100,
00442 TABLECAP_DeleteRecord = 0x00000200,
00443 TABLECAP_UserWritable = 0x00000400,
00444 TABLECAP_CanSetUserWrite = 0x00000800,
00445 TABLECAP_ChangeFields = 0x00001000,
00446 TABLECAP_AddFields = 0x00002000,
00447 TABLECAP_DeleteFields = 0x00004000,
00448 TABLECAP_AddRecord = 0x00008000,
00449 TABLECAP_RandomAccess = 0x00010000,
00450 TABLECAP_ReadBinary = 0x00020000,
00451 TABLECAP_WriteBinary = 0x00040000
00452 };
00453
00454
00455 enum USAGE {
00456 USAGE_UserDefined = 0,
00457 USAGE_StdStats = 2,
00458 USAGE_ElementID = 3,
00459 USAGE_NodeTurn = 4,
00460 USAGE_ScaleSelect = 5,
00461 USAGE_Section = 6,
00462 USAGE_Internal = 7,
00463 USAGE_PointStyle = 8,
00464 USAGE_LineStyle = 9,
00465 USAGE_PolyStyle = 10,
00466 USAGE_MultiStyle = 12,
00467 USAGE_CADStyle = USAGE_MultiStyle,
00468 USAGE_EditLog = 13,
00469 USAGE_Selection = 14,
00470 USAGE_FlightPath = 15,
00471 USAGE_PointOfInterest = 16,
00472 USAGE_LegendElement = 17,
00473 USAGE_StyleParameters = 18,
00474 USAGE_SelectParameters = 19,
00475 USAGE_ExtrudedPoints = 20,
00476 USAGE_InfluenceSphere = 21,
00477 USAGE_Sketch = 22
00478 };
00479
00480 #ifndef GENERATING_DOXYGEN_OUTPUT
00481 class BOOKMARK;
00482 class CURSOR;
00483 class FIELDINFO;
00484 class GETOBJFILTER_ISSELECTABLE;
00485 class GETOBJFILTER_ISUSERDEFINED;
00486 class RECORD;
00487 friend class RECORD;
00488 class RECORD_EXTRUDED_POINTS;
00489 class RECORD_FLIGHTPATH;
00490 class RECORD_ID_ELEMENT;
00491 class RECORD_ID_POINT;
00492 class RECORD_INFLUENCE_SPHERE;
00493 class RECORD_LEGENDELEMENT;
00494 class RECORD_NODETURN;
00495 class RECORD_PARAMETERS_SELECT;
00496 class RECORD_PARAMETERS_STYLE;
00497 class RECORD_POINTOFINTEREST;
00498 class RECORD_SCALESELECT;
00499 class RECORD_SELECTION;
00500 class RECORD_STYLE_CAD;
00501 typedef RECORD_STYLE_CAD RECORD_STYLE_MULTI;
00502 class RECORD_STYLE_ELEMENT;
00503 #endif // GENERATING_DOXYGEN_OUTPUT
00504
00505 typedef SIMPLE_ARRAY<FIELDINFO> FIELDINFOARRAY;
00506 #ifndef GENERATING_DOXYGEN_OUTPUT
00507 class CONSTRAINT;
00508 class LINKPARMS;
00509 class LINKPARM_CSV;
00510 class LINKPARM_DBASE2;
00511 class LINKPARM_DBASE3;
00512 class LINKPARM_DBASE4;
00513 class LINKPARM_INFO;
00514 class LINKPARM_MIPS;
00515 class LINKPARM_ODBC;
00516 class LINKPARM_ORACLE;
00517 class LINKPARM_RBASE;
00518 class MAKEPARMS;
00519 class MAKEPARM_ID_ELEMENT;
00520 class MAKEPARM_ID_POINT;
00521 class MAKEPARM_STYLE_ELEMENT;
00522 class MAKEPARM_STYLE_CAD;
00523 typedef MAKEPARM_STYLE_CAD MAKEPARM_STYLE_MULTI;
00524 class MAKEPARM_STYLE_LINE;
00525 class MAKEPARM_STYLE_POINT;
00526 class MAKEPARM_STYLE_POLYGON;
00527 class MAKEPARM_SCALESELECT;
00528 class MAKEPARM_SELECTION;
00529 class MAKEPARM_FLIGHTPATH;
00530 class MAKEPARM_POINTOFINTEREST;
00531 class MAKEPARM_LEGENDELEMENT;
00532 class MAKEPARM_NODETURN;
00533 class MAKEPARM_PARAMETERS_STYLE;
00534 class MAKEPARM_PARAMETERS_SELECT;
00535 class MAKEPARM_EXTRUDED_POINTS;
00536 class MAKEPARM_INFLUENCE_SPHERE;
00537 class RECORDITERATOR;
00538 class CONST_RECORDITERATOR;
00539 class OBSERVER;
00540 #endif // GENERATING_DOXYGEN_OUTPUT
00541
00542
00543 DBTABLE (
00544 );
00545
00546
00547 DBTABLE (
00548 const RVC::DBTABLE& rhs
00549 );
00550
00551
00552 virtual ~DBTABLE (
00553 );
00554
00555
00556 RVC::DBTABLE& operator= (
00557 const RVC::DBTABLE& rhs
00558 );
00559
00560
00561
00562 INT32 AddRecord (
00563 RECORD& Record
00564 );
00565
00566
00567 ERRVALUE RVC::DBTABLE::Combine (
00568 const RVC::DBTABLE& rhs,
00569 const RVC::DBASE::JOINFLAGS flags,
00570 const RVC::DBASE& dest,
00571 const MISTRING& name,
00572 const MISTRING& desc
00573 );
00574
00575
00576
00577 STRUCTCOMPARE CompareStructures (
00578 const RVC::DBTABLE& rhs
00579 ) const;
00580
00581
00582 ERRVALUE Drop (
00583 bool CleanDBList
00584 );
00585
00586
00587 ERRVALUE DeleteRecord (
00588 INT32 RecordNum
00589 );
00590
00591
00592 ERRVALUE DeleteRecord (
00593 CURSOR& cursor,
00594 const BOOKMARK& bookmark
00595 );
00596
00597
00598
00599 INT32 FindField (
00600 const RVC::OBJECTNAME& name
00601 ) const;
00602
00603
00604
00605 INT32 FindRecords (
00606 INT32 FieldNum,
00607 double value,
00608 SIMPLE_ARRAY<INT32>& FoundRecList
00609 ) const;
00610
00611
00612
00613 INT32 FindRecords (
00614 INT32 FieldNum,
00615 const char* string,
00616 SIMPLE_ARRAY<INT32>& FoundRecList
00617 ) const;
00618
00619
00620
00621 INT32 FindRecords (
00622 INT32 FieldNum,
00623 const MIUNICODE* string,
00624 SIMPLE_ARRAY<INT32>& FoundRecList
00625 ) const;
00626
00627
00628
00629 INT32 FindRecords (
00630 INT32 FieldNum,
00631 const MISTRING& string,
00632 SIMPLE_ARRAY<INT32>& FoundRecList
00633 ) const;
00634
00635
00636
00637 INT32 FindRecords (
00638 INT32 FieldNum,
00639 const RECORD& record,
00640 SIMPLE_ARRAY<INT32>& FoundRecList,
00641 INT32 RecordFieldNum = -1
00642 ) const;
00643
00644
00645
00646 INT32 GetAttachedRecords (
00647 INT32 ElementNum,
00648 ELEMTYPE ElemType,
00649 SIMPLE_ARRAY<INT32>& RecordList,
00650 FINDFLAG FindFlags = FINDFLAG_AllAttached
00651 ) const;
00652
00653
00654
00655 ATTACHMENT GetAttachmentType (
00656 ) const;
00657
00658
00659
00660 TABLECAP GetCapability (
00661 ) const;
00662
00663
00664 ERRVALUE GetComputedFieldQuery (
00665 INT32 FieldNum,
00666 MISTRING& QueryStr
00667 ) const;
00668
00669
00670
00671 CHAR_ENCODING GetEncoding (
00672 ) const;
00673
00674
00675 ERRVALUE GetFieldIndex (
00676 INT32 FieldNum,
00677 SIMPLE_ARRAY<INT32>& Index,
00678 BITSET& DuplicateBits
00679 );
00680
00681
00682 ERRVALUE GetFieldInfo (
00683 INT32 FieldNum,
00684 FIELDINFO& FieldInfo
00685 ) const;
00686
00687
00688 ERRVALUE GetFieldInfo (
00689 FIELDINFOARRAY& FieldArray
00690 ) const;
00691
00692
00693 ERRVALUE GetLinkFields (
00694 INT32 StartFieldNum,
00695 SIMPLE_ARRAY<INT32>& FieldNumArray
00696 ) const;
00697
00698
00699
00700 INT32 GetNumFields (
00701 ) const;
00702
00703
00704
00705 INT32 GetNumRecords (
00706 ) const;
00707
00708
00709
00710 REFELEM GetReferenceElement (
00711 ) const;
00712
00713
00714
00715 INT32 GetRelatedRecords (
00716 INT32 RecordNum,
00717 INT32 BaseTableNum,
00718 SIMPLE_ARRAY<INT32>& RecordList,
00719 FINDFLAG FindFlags = FINDFLAG_AllAttached
00720 ) const;
00721
00722
00723
00724 INT32 GetRelatedRecords (
00725 const RECORD& record,
00726 SIMPLE_ARRAY<INT32>& RecordList,
00727 FINDFLAG FindFlags = FINDFLAG_AllAttached
00728 ) const;
00729
00730
00731
00732 INT32 GetTableNumber (
00733 ) const;
00734
00735
00736
00737 USAGE GetUsage (
00738 ) const;
00739
00740
00741
00742 LRECT2D GetWindowRect (
00743 ) const;
00744
00745
00746
00747 bool IsHidden (
00748 ) const;
00749
00750
00751
00752 bool IsInternal (
00753 ) const;
00754
00755
00756
00757 bool IsMissing (
00758 ) const;
00759
00760
00761
00762 bool IsPrompt (
00763 ) const;
00764
00765
00766
00767 bool IsValid (
00768 ) const;
00769
00770
00771
00772 bool IsWritable (
00773 ) const;
00774
00775
00776
00777 DEPRECATED ERRVALUE Link (
00778 RVC::DBASE& parent,
00779 const RVC::OBJECTNAME& name,
00780 const RVC::OBJECTDESC& desc,
00781 const LINKPARMS& LinkParms,
00782 const char* Source = 0
00783 );
00784
00785
00786 ERRVALUE Link (
00787 RVC::DBASE& parent,
00788 const DESCRIPTOR& Descriptor,
00789 const LINKPARMS& LinkParms
00790 );
00791
00792
00793 ERRVALUE Make (
00794 RVC::DBASE& parent,
00795 const DESCRIPTOR& Descriptor,
00796 MAKEPARMS& MakeParms
00797 );
00798
00799
00800
00801 DEPRECATED ERRVALUE Make (
00802 RVC::DBASE& parent,
00803 const RVC::OBJECTNAME& name,
00804 const RVC::OBJECTDESC& desc,
00805 MAKEPARMS& MakeParms,
00806 const char* Source = 0
00807 );
00808
00809
00810 ERRVALUE Open (
00811 const RVC::DBASE& parent,
00812 const RVC::OBJECTNAME& TableName,
00813 OPENMODE mode = OPENMODE_Read,
00814 MDLGPARENT pwidget = 0
00815 );
00816
00817
00818 DEPRECATED ERRVALUE Open (
00819 int DBaseID,
00820 const RVC::OBJECTNAME& TableName,
00821 OPENMODE mode = OPENMODE_Read,
00822 MDLGPARENT pwidget = 0
00823 );
00824
00825
00826 ERRVALUE Open (
00827 const RVC::DBASE& parent,
00828 INT32 TableNum,
00829 OPENMODE mode = OPENMODE_Read,
00830 MDLGPARENT pwidget = 0
00831 );
00832
00833
00834 DEPRECATED ERRVALUE Open (
00835 int DBaseID,
00836 INT32 TableNum,
00837 OPENMODE mode = OPENMODE_Read,
00838 MDLGPARENT pwidget = 0
00839 );
00840
00841
00842 ERRVALUE Open (
00843 const DBTABLE& twin,
00844 OPENMODE mode = OPENMODE_Read,
00845 MDLGPARENT pwidget = 0
00846 );
00847
00848
00849
00850
00851 ERRVALUE Open (
00852 const RVC::OBJITEM& ObjItem,
00853 OPENMODE OpenMode = OPENMODE_Read,
00854 MDLGPARENT widget = 0
00855 );
00856
00857
00858
00859 ERRVALUE Open (
00860 OPENMODE OpenMode = OPENMODE_Read,
00861 MDLGPARENT widget = 0
00862 );
00863
00864
00865 ERRVALUE Read (
00866 INT32 RecordNum,
00867 RECORD& Record
00868 ) const {return (Read(0, RecordNum, 0, Record, RECACC_RecordNum));}
00869
00870
00871 ERRVALUE Read (
00872 CURSOR& cursor,
00873 RECORD& Record
00874 ) const {return (Read(&cursor, 0, 0, Record, RECACC_Cursor));}
00875
00876
00877 ERRVALUE Read (
00878 CURSOR& cursor,
00879 const BOOKMARK& bookmark,
00880 RECORD& Record
00881 ) const {return (Read(&cursor, 0, &bookmark, Record, RECACC_Bookmark));}
00882
00883
00884 ERRVALUE ReadDefault (
00885 RECORD& Record
00886 ) const {return (Read(0, RECORD_New, 0, Record, RECACC_RecordNum));}
00887
00888 ERRVALUE ReadConstraint (
00889 std::vector<CONSTRAINT>& ConstraintList
00890 ) const;
00891
00892
00893 void RecordBegin (
00894 CONST_RECORDITERATOR& Iterator,
00895 ITERATERECORD IterateRecord = ITERATERECORD_SkipDeleted,
00896 INT32 FieldNum = 0
00897 ) const;
00898
00899
00900 void RecordBegin (
00901 RECORDITERATOR& Iterator,
00902 ITERATERECORD IterateRecord = ITERATERECORD_SkipDeleted,
00903 INT32 FieldNum = 0
00904 );
00905
00906
00907 ERRVALUE RemoveDuplicateRecords (
00908 );
00909
00910
00911 ERRVALUE RemoveUnattachedRecords (
00912 );
00913
00914
00915 ERRVALUE Resize (
00916 INT32 NewNumRecords,
00917 bool CleanDBList
00918 );
00919
00920
00921
00922 template <class _CT>
00923 INT32 SearchIndex (
00924 INT32 FieldNum,
00925 const _CT& item,
00926 const FIELDINFO& finfo,
00927 INT32& offset,
00928 INDEXSEARCH flag = INDEXSEARCH_ReturnIndexOffset
00929 ) const {return (MfIndexSearch(GetDatabaseID(), m_TableID, FieldNum, &item, finfo.GetFieldInfoPtr(), &offset, flag));}
00930
00931
00932
00933 template <class _CT>
00934 INT32 SearchIndex (
00935 INT32 FieldNum,
00936 const _CT& item,
00937 INT32& offset,
00938 INDEXSEARCH flag = INDEXSEARCH_ReturnIndexOffset
00939 ) const {return (MfIndexSearch(GetDatabaseID(), m_TableID, FieldNum, &item, 0, &offset, flag));}
00940
00941
00942
00943 INT32 SearchIndex (
00944 INT32 FieldNum,
00945 double value,
00946 INT32& offset,
00947 INDEXSEARCH flag
00948 ) const;
00949
00950
00951
00952 INT32 SearchIndex (
00953 INT32 FieldNum,
00954 const MISTRING& value,
00955 INT32& offset,
00956 INDEXSEARCH flag
00957 ) const;
00958
00959
00960
00961 INT32 SearchIndex (
00962 INT32 FieldNum,
00963 const RECORD& Record,
00964 INT32 RecFieldNum,
00965 INT32& offset,
00966 INDEXSEARCH flag
00967 ) const;
00968
00969
00970 ERRVALUE SetAttachmentType (
00971 ATTACHMENT Attachment
00972 );
00973
00974
00975 ERRVALUE SetComputedFieldQuery (
00976 INT32 FieldNum,
00977 const MISTRING& QueryStr
00978 );
00979
00980
00981 void SetEncoding (
00982 CHAR_ENCODING Encoding
00983 );
00984
00985
00986 ERRVALUE SetFieldInfo (
00987 INT32 FieldNum,
00988 const FIELDINFO& FieldInfo
00989 );
00990
00991
00992 ERRVALUE SetFieldInfo (
00993 FIELDINFOARRAY& FieldArray
00994 );
00995
00996
00997 ERRVALUE SetFieldInfo (
00998 FIELDINFOARRAY& FieldArray,
00999 const SIMPLE_ARRAY<int>& NewToOld
01000 );
01001
01002
01003 void SetWindowRect (
01004 const LRECT2D& rect
01005 );
01006
01007
01008 ERRVALUE Write (
01009 INT32 RecordNum,
01010 RECORD& Record
01011 ) {return (Write(0, RecordNum, 0, Record, RECACC_RecordNum));}
01012
01013
01014 ERRVALUE Write (
01015 CURSOR& cursor,
01016 RECORD& Record
01017 ) {return (Write(&cursor,0, 0, Record, RECACC_Cursor));}
01018
01019
01020 ERRVALUE Write (
01021 CURSOR& cursor,
01022 const BOOKMARK& bookmark,
01023 RECORD& Record
01024 ) {return (Write(&cursor, 0, &bookmark, Record, RECACC_Bookmark));}
01025
01026 ERRVALUE WriteConstraint (
01027 const std::vector<CONSTRAINT>& ConstraintList
01028 );
01029
01030 protected:
01031
01032 #ifndef GENERATING_DOXYGEN_OUTPUT
01033 DBASE m_ParentObj;
01034 int m_TableID;
01035
01036 int GetDatabaseID () const {return (m_ParentObj.m_DBaseID);}
01037
01038 virtual bool v_IsValidTable (const RVC::DBTABLE& table);
01039 #endif // GENERATING_DOXYGEN_OUTPUT
01040
01041 private:
01042 #ifndef GENERATING_DOXYGEN_OUTPUT
01043
01044 enum RECACC {
01045 RECACC_RecordNum,
01046 RECACC_Cursor,
01047 RECACC_Bookmark
01048 };
01049
01050
01051 virtual ERRVALUE v_CloseObject ();
01052 virtual ERRVALUE v_GetDescription (OBJECTDESC& Desc) const;
01053 virtual ERRVALUE v_GetDescriptor (RVC::DESCRIPTOR& Descriptor) const;
01054 virtual OBJTYPE v_GetDftObjectType () const;
01055 virtual ERRVALUE v_GetName (OBJECTNAME& Name) const;
01056 virtual bool v_IsObjectOpen () const;
01057 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent);
01058
01059 INT32 GetRecordSize () const;
01060
01061 ERRVALUE Read (
01062 CURSOR* cursor,
01063 INT32 RecordNum,
01064 const BOOKMARK* bookmark,
01065 RECORD& Record,
01066 RECACC flags
01067 ) const;
01068
01069 static void TableCallbackFunc (DBCALLBACKSTRUCT *cb, void *data);
01070
01071 ERRVALUE Write (
01072 CURSOR* cursor,
01073 INT32 RecordNum,
01074 const BOOKMARK* bookmark,
01075 RECORD& Record,
01076 RECACC flags
01077 );
01078
01079 ERRVALUE WriteBinary (
01080 CURSOR* cursor,
01081 INT32 RecordNum,
01082 const BOOKMARK* bookmark,
01083 INT32 FieldNum,
01084 const SIMPLE_ARRAY<UINT8>& binary,
01085 RECACC flags
01086 );
01087
01088 ERRVALUE WriteMemo (
01089 CURSOR* cursor,
01090 INT32 RecordNum,
01091 const BOOKMARK* bookmark,
01092 INT32 FieldNum,
01093 const MISTRING& string,
01094 RECACC flags
01095 );
01096
01097 friend class CURSOR;
01098 friend class DBASE_ELEMENT;
01099 #endif
01100 };
01101
01102
01103
01104 class DBTABLE::BOOKMARK {
01105 public:
01106
01107
01108 explicit BOOKMARK (
01109 UINT32 Bookmark = 0
01110 ) : m_Bookmark(Bookmark) {}
01111
01112
01113 BOOKMARK (
01114 const BOOKMARK& rhs
01115 ) : m_Bookmark(rhs.m_Bookmark) {}
01116
01117
01118 BOOKMARK& operator= (
01119 const BOOKMARK& rhs
01120 ) {
01121 if (this != &rhs) m_Bookmark = rhs.m_Bookmark;
01122 return (*this);
01123 }
01124
01125 bool operator== (
01126 const BOOKMARK& rhs
01127 ) const {return (m_Bookmark == rhs.m_Bookmark);}
01128
01129 private:
01130 #ifndef GENERATING_DOXYGEN_OUTPUT
01131 UINT32 m_Bookmark;
01132
01133 friend class DBTABLE;
01134 friend class DBTABLE::CURSOR;
01135 friend class DBTABLE::RECORD;
01136 #endif // GENERATING_DOXYGEN_OUTPUT
01137 };
01138
01139
01140
01141 class DBTABLE::CURSOR {
01142 public:
01143 enum FUNCTION {
01144 FUNCTION_None = 0x00000000,
01145 FUNCTION_Unique = 0x00000001,
01146 FUNCTION_Sorted = 0x00000002,
01147 FUNCTION_Equal = 0x00000004,
01148 FUNCTION_GreaterThan = 0x00000008,
01149 FUNCTION_LessThan = 0x00000010,
01150 FUNCTION_NotEqual = 0x00000020,
01151 FUNCTION_AND = 0x00000040,
01152 FUNCTION_OR = 0x00000080,
01153 FUNCTION_NoClear = 0x00000100,
01154 FUNCTION_ForUpdate = 0x00000200
01155 };
01156
01157
01158 explicit CURSOR (
01159 const RVC::DBTABLE& table
01160 );
01161
01162
01163 ~CURSOR (
01164 );
01165
01166
01167 bool operator== (
01168 const CURSOR& rhs
01169 ) const;
01170
01171
01172 ERRVALUE GetBookmark (
01173 BOOKMARK& Bookmark
01174 ) const;
01175
01176
01177 INT32 GetRecordNum (
01178 ) const;
01179
01180
01181
01182 bool IsValid (
01183 ) const;
01184
01185
01186
01187 int Next (
01188 );
01189
01190
01191 ERRVALUE Rewind (
01192 );
01193
01194
01195 ERRVALUE SetFunction (
01196 INT32 FieldNum,
01197 FUNCTION Function
01198 );
01199
01200 private:
01201 #ifndef GENERATING_DOXYGEN_OUTPUT
01202 const DBTABLE& m_Table;
01203 INT32 m_Value;
01204
01205 CURSOR (const CURSOR& rhs);
01206 CURSOR& operator=(const CURSOR& rhs);
01207
01208 friend class DBTABLE;
01209 friend class DBTABLE::RECORD;
01210 #endif
01211 };
01212
01213
01214
01215 class DBTABLE::CONSTRAINT {
01216 public:
01217 enum CASE {
01218 CASE_None = 0,
01219 CASE_ForceUpperCase = 0x0100,
01220 CASE_ForceLowerCase = 0x0200,
01221 CASE_CapFirstLetter = 0x0400,
01222 CASE_CapFirstWord = 0x0800
01223 };
01224
01225 enum PKTABLE {
01226 PKTABLE_None = 0,
01227 PKTABLE_MustExist = 0x00008000,
01228 PKTABLE_AutoAdd = 0x00010000,
01229 PKTABLE_AutoAddPrompt = 0x00020000
01230 };
01231
01232 enum RANGEFLAG {
01233 RANGEFLAG_None = 0,
01234 RANGEFLAG_MinExclusive = 0x0001,
01235 RANGEFLAG_MaxExclusive = 0x0002,
01236 RANGEFLAG_MinInclusive = 0x0004,
01237 RANGEFLAG_MaxInclusive = 0x0008
01238 };
01239
01240
01241 CONSTRAINT (
01242 );
01243
01244
01245 ~CONSTRAINT (
01246 ) {}
01247
01248 bool CanBeEmpty (
01249 ) const {return (!m_NotNull);}
01250
01251 CASE GetCaseFlags (
01252 ) const {return (m_Case);}
01253
01254 double GetDefaultNum (
01255 ) const {return (m_DefaultNum);}
01256
01257 const MISTRING& GetPrefixLabel (
01258 ) const {return (m_Label);}
01259
01260 const MISTRING& GetPostfixLabel (
01261 ) const {return (m_LabelAfter);}
01262
01263 PKTABLE GetPkTableFlags (
01264 ) const {return (m_PkTable);}
01265
01266 const DOUBLE_RANGE& GetRange (
01267 ) const {return (m_Range);}
01268
01269 RANGEFLAG GetRangeFlags (
01270 ) const {return (m_RangeFlags);}
01271
01272 bool IsAutoComplete (
01273 ) const {return (m_AutoComplete);}
01274
01275 void SetAutoComplete (
01276 bool value
01277 ) {m_AutoComplete = value;}
01278
01279 void SetCaseFlags (
01280 CASE flags
01281 ) {m_Case = flags;}
01282
01283 void SetDefaultNum (
01284 double number
01285 ) {m_DefaultNum = number;}
01286
01287 void SetEmpty (
01288 bool value
01289 ) {m_NotNull = !value;}
01290
01291 void SetPrefixLabel (
01292 const MISTRING& label
01293 ) {m_Label = label;}
01294
01295 void SetPostfixLabel (
01296 const MISTRING& label
01297 ) {m_LabelAfter = label;}
01298
01299 void SetPkTableFlags (
01300 PKTABLE flags
01301 ) {m_PkTable = flags;}
01302
01303 void SetRange (
01304 const DOUBLE_RANGE& range
01305 ) {m_Range = range;}
01306
01307 void SetRangeFlags (
01308 RANGEFLAG flags
01309 ) {m_RangeFlags = flags;}
01310
01311 private:
01312 #ifndef GENERATING_DOXYGEN_OUTPUT
01313
01314 RANGEFLAG m_RangeFlags;
01315 CASE m_Case;
01316 PKTABLE m_PkTable;
01317 DOUBLE_RANGE m_Range;
01318 double m_DefaultNum;
01319 bool m_NotNull;
01320 bool m_AutoComplete;
01321 MISTRING m_Label;
01322 MISTRING m_LabelAfter;
01323
01324 void GetConstraint (DBCONSTRAINT& rhs) const;
01325 void SetConstraint (const DBCONSTRAINT& rhs);
01326
01327 friend class DBTABLE;
01328 #endif // GENERATING_DOXYGEN_OUTPUT
01329 };
01330
01331
01332 class DBTABLE::FIELDINFO {
01333 public:
01334
01335
01336
01337
01338
01339
01340
01341
01342 enum NEXTFIELD {
01343 NEXTFIELD_ThisFieldName = 0xFFFF,
01344 NEXTFIELD_ThisTableName = 0xFFFE,
01345 NEXTFIELD_DomID = 0xFFFD,
01346 NEXTFIELD_PseudoField = 0xFFFC
01347 };
01348
01349 enum FLAGS {
01350 FLAG_None = 0x0000,
01351 FLAG_PrimaryKey = 0x0001,
01352 FLAG_PK = FLAG_PrimaryKey,
01353 FLAG_ForeignKey = 0x0002,
01354 FLAG_FK = FLAG_ForeignKey,
01355 FLAG_Indexed = 0x0004,
01356 FLAG_NotNULL = 0x0010,
01357 FLAG_Unique = 0x0020,
01358 FLAG_ReadOnly = 0x0040,
01359 FLAG_SecondaryKey = 0x0080,
01360 FLAG_SK = FLAG_SecondaryKey,
01361 FLAG_Invisible = 0x0100,
01362 FLAG_Closest = 0x0200,
01363 FLAG_RangeAbove = 0x0400,
01364 FLAG_RangeBelow = 0x0800,
01365 FLAG_ComputeOnRead = 0x0008,
01366 FLAG_ComputeOnWrite = 0x1000,
01367 FLAG_Computed = 0x1008,
01368 FLAG_LocalTime = 0x2000,
01369 FLAG_AutoIncrement = 0x4000
01370 };
01371
01372 enum TYPE {
01373 TYPE_Invalid = 0,
01374 TYPE_String = 1,
01375 TYPE_Char = 2,
01376 TYPE_UByte = 3,
01377 TYPE_Byte = 4,
01378 TYPE_UWord = 5,
01379 TYPE_Word = 6,
01380 TYPE_ULong = 7,
01381 TYPE_Long = 8,
01382 TYPE_Float = 9,
01383 TYPE_Double = 10,
01384 TYPE_Logical = 11,
01385 TYPE_Date = 12,
01386 TYPE_Color = 15,
01387 TYPE_Binary = 16,
01388 TYPE_Memo = 17,
01389 TYPE_Unicode = 18,
01390 TYPE_DateTime = 19
01391 };
01392
01393 enum USAGE {
01394 USAGE_Undefined = 0,
01395 USAGE_XCoord = 1,
01396 USAGE_YCoord,
01397 USAGE_ZCoord,
01398 USAGE_Label,
01399 USAGE_Filename,
01400 USAGE_ObjName
01401 };
01402
01403
01404 FIELDINFO (
01405 ) {memset(this, 0, sizeof(*this));}
01406
01407
01408 void Clear (
01409 ) {memset(this, 0, sizeof(*this));}
01410
01411
01412
01413
01414 TYPE CompareFieldTypes (
01415 const FIELDINFO& rhs,
01416 bool& ExactMatch
01417 ) const;
01418
01419
01420
01421 UINT32 GetAutoIncrement (
01422 ) const {return (m_FieldInfo.AutoIncrement);}
01423
01424
01425
01426 int GetDecimalPlaces (
01427 ) const {return (m_FieldInfo.decplaces);}
01428
01429
01430
01431 int GetDispUnits (
01432 ) const {return (m_FieldInfo.unitshown);}
01433
01434
01435
01436 int GetDispWidth (
01437 ) const {return (m_FieldInfo.dispwidth);}
01438
01439
01440
01441 const RVC::OBJECTNAME& GetDomainID (
01442 ) const {return (m_FieldInfo.domid);}
01443
01444
01445
01446 FLAGS GetFlags (
01447 ) const {return (static_cast<FLAGS>(m_FieldInfo.flags));}
01448
01449
01450
01451 const RVC::OBJECTNAME& GetName (
01452 ) const {return (m_FieldInfo.name);}
01453
01454
01455
01456 INT32 GetNextLinkField (
01457 ) const {return (m_FieldInfo.next_field-1);}
01458
01459
01460
01461 NEXTFIELD GetPseudoNextLinkField (
01462 ) const {return (static_cast<NEXTFIELD>(m_FieldInfo.next_field));}
01463
01464
01465
01466
01467 INT32 GetRelatedField (
01468 ) const {return (m_FieldInfo.key_field-1);}
01469
01470
01471
01472
01473 INT32 GetRelatedTable (
01474 ) const {return (m_FieldInfo.key_table);}
01475
01476
01477
01478 INT32 GetSize (
01479 ) const {return (m_FieldInfo.size);}
01480
01481
01482
01483 TYPE GetType (
01484 ) const {return (static_cast<TYPE>(m_FieldInfo.type));}
01485
01486
01487 void GetUnits (
01488 UNITCONV& conv
01489 ) const {GetUnitConversion(m_FieldInfo.unittype, m_FieldInfo.unitstored, m_FieldInfo.unitshown, &conv);}
01490
01491
01492
01493 USAGE GetUsage (
01494 ) const {return (static_cast<USAGE>(m_FieldInfo.usage));}
01495
01496
01497
01498 bool HasRelation (
01499 ) const {return (m_FieldInfo.key_field > 0);}
01500
01501
01502
01503 bool HasNextKey (
01504 ) const {return (m_FieldInfo.next_field > 0);}
01505
01506
01507
01508 bool HasPseudoNextKey (
01509 ) const {return (m_FieldInfo.next_field > NEXTFIELD_PseudoField);}
01510
01511
01512
01513 bool IsNumeric (
01514 ) const {return (m_FieldInfo.type >= TYPE_UByte && m_FieldInfo.type <= TYPE_Double);}
01515
01516
01517