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