Solved

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

Posted on 2004-08-24
9
238 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
  • 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
 

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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
strDist challenge 35 95
mapAB Challlenge 35 123
Scripting vs. Programming languages 25 150
Currency Conversion? 1 68
Displaying an arrayList in a listView using the default adapter is rarely the best solution. To get full control of your display data, and to be able to refresh it after editing, requires the use of a custom adapter.
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …
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…

932 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now