[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 254
  • Last Modified:

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

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
BIAPRO
Asked:
BIAPRO
  • 5
  • 3
1 Solution
 
Jaime OlivaresCommented:
You must use a binary field
0
 
BIAPROAuthor Commented:
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
 
Jaime OlivaresCommented:
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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
BIAPROAuthor Commented:
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
 
Jaime OlivaresCommented:
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
 
BIAPROAuthor Commented:
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
 
IceColdasCommented:
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
 
BIAPROAuthor Commented:
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
 
BIAPROAuthor Commented:
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

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now