
www.Usenet.com
| <-- __Chronological__ --> | <-- __Thread__ --> |
You're correct about the maximum.
Funny you mention pictures.
I was faced with a similar situation earlier this year. I ended up just
storing a path to an external file containing the picture. Once I hit the
record I wanted, I'd just open the file at that location, which was a file
in the folder I was in.
...dave
"GTi" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Thanks David,
>
> In your case you have a maximum length of 4000 bytes in the comment
field -
> right?
> And what if the comment fields is over 4000 bytes. What happens then?
>
> > comment LVAR(4000))
> As I can see it, you MUST set a maximum length to something. If it is
4000,
> 10000
> or 400000 it MUST be a value. Is that correct?
>
> Today I store the files on the disk, and the filename is the key value of
my
> record.
> That gives me no limits on the file size. But it should be in the
database.
> Say - For some years ago a digital camera was producing pictures of 1-2
MB.
> Today it have 5-6 MB.
> If I limited this to 3 MB for some years ago, I have been lost today.
> So if I go for this I must set a limit for the records to 100 MB - say 200
> MB to be
> sure if I can still use it in the future (not limited to pictures).
> Or ?
>
>
>
> "David Reed" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED]
> > The following code uses the Windows SDK GlobalAlloc. Feel free to
> > substitute the malloc of your choice.
> >
> > All my files were created via Novell's XQL, so I don't have code to tell
> you
> > how to create it. The XQL statement was:
> >
> > create table TABLE using "TABLE .DAT" DCOMPRESS pagesize 4096
> > (recordID INT(4),
> > code CHAR(8),
> > reserved CHAR(16),
> > flags INT(4),
> > commentText LVAR(4000))
> > with index (recordID UNIQUE,
> > code UNIQUE MOD)
> >
> > Here's how I access it in the code:
> >
> > Ok, start with a structure for the fixed portion of the record:
> >
> > //
> > // Table Structure
> > // Record length: Variable: Fixed portion = 32
> > // Defined flags: None
> > //
> > // Record Layout: Bytes Description
> > // ~~~~~ ~~~~~~~~~~~
> > // 1-4 Record ID
> > // 5-12 Code
> > // 13-28 Reserved
> > // 29-32 Record Flags
> > // 33-4032 Text (variable)
> > //
> > #define CODE_LENGTH 8
> > #define RESERVED_LENGTH 16
> > #define FIXED_LENGTH 32
> > #define VARIABLE_LENGTH 4000
> > #define TOTAL_LENGTH FIXED_LENGTH + VARIABLE_LENGTH
> >
> > typedef struct TABLEStruct
> > {
> > long recordID;
> > char code[CODE_LENGTH];
> > char reserved[RESERVED_LENGTH];
> > long flags;
> > } TABLEDef;
> >
> > typedef struct TABLEKey0Struct
> > {
> > long recordID;
> > } TABLEKey0Def;
> >
> > typedef struct TABLEKey1Struct
> > {
> > char code[COMMENTS_CODE_LENGTH];
> > } TABLEKey1Def;
> >
> > EXTERN TABLEDef TABLE;
> > EXTERN TABLEKey1Def TABLEKey1;
> > EXTERN HANDLE hMemTableText;
> > EXTERN char *pTableText;
> >
> >
> > * * * *
> >
> > You can do the following in the main routine:
> >
> > //
> > // Allocate space for the text portion of the table
> > //
> > hMemTableText = GlobalAlloc(GPTR, TOTAL_LENGTH);
> > pTableText = (char *)hMemTableText;
> > if(hMemCommentText == NULL || pCommentText == NULL)
> > {
> > /* Error */
> > }
> >
> > * * * * *
> >
> > In the routine you use to access all of the variable length file:
> >
> > char code[] = "SomeText";
> >
> > strcpy(TABLE.code, code);
> >
> > dataBufferLength = TOTAL_LENGTH;
> > rcode = BTRVID((BTI_WORD)GETEQUAL, positionBlock, pTableText ,
> > &dataBufferLength, TABLE.code, (BTI_SINT)1, (BTI_BUFFER_PTR)&clientID);
> >
> > if(rcode == 0)
> > {
> > memcpy(&TABLE, pTableText, FIXED_LENGTH);
> > /* Variable portion starts at pTableText[FIXED_LENGTH] */
> > }
> >
> > * * * * *
> > If you're just cycling through, set the data buffer length to
FIXED_LENGTH
> > and pass the data structure instead of pTable Text. You'll get rcode ==
> 22,
> > but you won't have the overhead of getting (potentially) a bunch of
> > additional data for records you may end up skipping.
> >
> > *******
> >
> > Bill Bach, if you're reading, is there much overhead savings in this?
> >
> >
> > Anyway, hope this helps.
> >
> > David Reed
> > Schedule Masters, Inc.
> >
> >
>
>
| <-- __Chronological__ --> | <-- __Thread__ --> |