Solved

PREVENTING BREAKOFF STRINGS WITH CHR(0) IN  RECORDS-SETS

Posted on 2004-08-24
9
246 Views
Last Modified: 2010-04-17
I have a ADO.recordset open on een database (pervasive)
I read record to this set.
one field is fixed to 8 bytes
we use this to put in MKD-style
if the string does not contain any chr$(0) value all is ok,
but the moment it contains 1 or more chr$(0) the string during
update or reading will be cut off at postion chr$(0)
Using random file with fielded  string 8 bytes goes ok
0
Comment
Question by:BIAPRO
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
9 Comments
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11884031
You must use a binary field
0
 

Author Comment

by:BIAPRO
ID: 11884074
Do you mean that in my recordset DNS resources i must define the field not as char?
I'am not sure if a understand you, sorry .

Jack
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11884131
I don't know your database details but if you want to store a chr$(0) in a database you must do it in a binary field. The NULL character has a special meaning in some systems. It is used to signal end-of-string, so, don't store it in a string field but in a binary field.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:BIAPRO
ID: 11884211
Ok, the VBdatabase is pervasive,  the Dosdatabase is Btrieve , or just
plain 'old'  likewise  Field #1, 8 as Money$, 30 as text$
then:  LSET Money$ = MKD$(amount#) :  
I  can read these files in VB ok,  and convert back  as Money#=CVD(rs.name)
but  msoft MKD double prec. will contain sometimes in the 8 byte a '0' byte
If i do reading in VB with old-plain fielding all ok,
as soon as it is redirected to ADO.recordset, at chr(0) point in a string it
will break off. so sometimes  7 bytes, then 5 bytes or if at leading pos.  zero bytes
returned. in all other case CVD(rsrecord) is ok
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11884275
I am not sure if you are refering actually to CHR$(0), the null character, or CHR$(48), the zero digit character.
If the first, maybe you can replace the CHR$(0) with a space or a zero character.
0
 

Author Comment

by:BIAPRO
ID: 11884352
chr$(zero),  you can't replace, i did a test run on a loop from -99999999 to +999999999
the full asci set is used in combination with all these amounts
0
 
LVL 3

Accepted Solution

by:
IceColdas earned 500 total points
ID: 11902294
well, you know, a string is terminated by a null character ( a  zero  byte), that`s why it breaks.
So you probably need to read the field from the database as an array of chars, not as a string.
Then create a string from that array, eliminating the zeros.

this is a c# version of how you should read a row from the database:

int fieldSize = 8;  //the size of the field
char [] charArray = new char(fieldSize);  //variable to store the field value
....
//read a row in charArray from the database
....
string s = null;
for ( int i = 0; i< fieldSize; i++)
    if (charArray[i] != 0)
           s += charArray[i];

s += "\0"; //to end the string;
0
 

Author Comment

by:BIAPRO
ID: 11903703
when i use the commands
cn.MoveNext
dummy$= cn.Fields(21)  ' (fields(21) contains a binary value  8 bytes
the string will contain  chr(0) postitions, but is not terminated and has 8 bytes
the I can use the CVD(dummy$)  function to get the money value , double preciscion
Only when I retrieve a record form ADOset is terminated.

0
 

Author Comment

by:BIAPRO
ID: 11930578
it is solved in a mayby dum way,
I do this but not really smart I think suggested solutions sofar in this question block
did not work

Private Sub brokergrid_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
brNum = brokergrid.Text
If rsBrokers.BOF = False And rsBrokers.EOF = False Then
   If brokergrid.Text > LastKey Then
     While rsBrokers.Fields(0) < brokergrid.Text
      If rsBrokers.EOF Then Exit Sub
          rsBrokers.MoveNext
     Wend
           Else
        If rsBrokers.BOF Then Exit Sub
     While rsBrokers.Fields(0) > brokergrid.Text
     rsBrokers.MovePrevious
    Wend
 End If
sftBeginSaldo.Text = STR(CVD(rsBrokers.Fields(21)))
End If











0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Arduino EDI - Programming Language - Voice Recorder 4 105
ASP/VB email question 4 62
learn programming 8 72
Automate and generate Azure reports for the following items 3 45
Entering a date in Microsoft Access can be tricky. A typo can cause month and day to be shuffled, entering the day only causes an error, as does entering, say, day 31 in June. This article shows how an inputmask supported by code can help the user a…
Computer science students often experience many of the same frustrations when going through their engineering courses. This article presents seven tips I found useful when completing a bachelors and masters degree in computing which I believe may he…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question