473,406 Members | 2,705 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

VBFixedArray problem

Hi,

I'm trying to read a database file written from a turbo Pascal program. I've
set a structure to map the records in the file, but

I have problem reading the file when I use VBFixedArray in my structure
instead of VBFixedString.
Here is the original code that works:

Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedString(30*10)> Public myList As String ' in fact, array of
10 strings of 30 chars
End Structure

Dim cat as CCat
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The size of the array my change depending on the customer, so I cannot use a
fixed size structure. I've tried to replace it this way:
Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedArray(30)> Public myList() As String
End Structure

Dim cat as CCat
redim cat.myList(9) ' from what I know, this is supposed to
create an array of 10 strings of 30 chars each.
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The fileGet function raises an IOException: Bad record Length.

Can someone tell me what I did wrong ? Also, is there a way to get the
record length I'm requesting before the FileGet ?

Thanks a lot for your help
David
Nov 20 '05 #1
4 7988
The array of strings needs to include the VBFixedString attribute as well as the VBFixedArray attribute. Use the VB Len function to determine the size a structure would be if written using the VB file i/o functions.
Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedArray(9), VBFixedString(30)> Public myList() As String
End Structure

Sub Main()
Dim Size As Integer
Dim cat As CCat

Size = Len(cat)
Stop
End Sub

--
Jim Cantwell, Visual Basic .NET Team
This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm
--------------------
From: "David Scemama" <da***********@wanadoo.fr>
Subject: VBFixedArray problem
Date: Mon, 20 Oct 2003 12:57:21 +0200
Lines: 45
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Message-ID: <u4**************@TK2MSFTNGP09.phx.gbl>
Newsgroups: microsoft.public.dotnet.languages.vb
NNTP-Posting-Host: aplessis-bouchard-103-2-1-167.w80-11.abo.wanadoo.fr 80.11.60.167
Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP09.phx.gbl
Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.vb:148341
X-Tomcat-NG: microsoft.public.dotnet.languages.vb

Hi,

I'm trying to read a database file written from a turbo Pascal program. I've
set a structure to map the records in the file, but

I have problem reading the file when I use VBFixedArray in my structure
instead of VBFixedString.
Here is the original code that works:

Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedString(30*10)> Public myList As String ' in fact, array of
10 strings of 30 chars
End Structure

Dim cat as CCat
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The size of the array my change depending on the customer, so I cannot use a
fixed size structure. I've tried to replace it this way:
Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedArray(30)> Public myList() As String
End Structure

Dim cat as CCat
redim cat.myList(9) ' from what I know, this is supposed to
create an array of 10 strings of 30 chars each.
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The fileGet function raises an IOException: Bad record Length.

Can someone tell me what I did wrong ? Also, is there a way to get the
record length I'm requesting before the FileGet ?

Thanks a lot for your help
David



Nov 20 '05 #2
I've tried what you suggest, but is the ReDim possible on such a structure ?
I need to define the size of the array at runtime !

If I get the size of cat before and after the ReDim, I have the same result
!

Sub Main()
Dim Size As Integer
Dim cat As CCat

Size = Len(cat)
ReDim cat.myList(20)
Size = Len(cat) ' gives the same result !

Stop
End Sub

And a FileGet will raise an exception "Bad Record Length"

David

"Jim Cantwell [MSFT]" <ji****@online.microsoft.com> wrote in message
news:I0**************@cpmsftngxa06.phx.gbl...
The array of strings needs to include the VBFixedString attribute as well as the VBFixedArray attribute. Use the VB Len function to determine the
size a structure would be if written using the VB file i/o functions. Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedArray(9), VBFixedString(30)> Public myList() As String
End Structure

Sub Main()
Dim Size As Integer
Dim cat As CCat

Size = Len(cat)
Stop
End Sub

--
Jim Cantwell, Visual Basic .NET Team
This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm --------------------
From: "David Scemama" <da***********@wanadoo.fr>
Subject: VBFixedArray problem
Date: Mon, 20 Oct 2003 12:57:21 +0200
Lines: 45
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Message-ID: <u4**************@TK2MSFTNGP09.phx.gbl>
Newsgroups: microsoft.public.dotnet.languages.vb
NNTP-Posting-Host: aplessis-bouchard-103-2-1-167.w80-11.abo.wanadoo.fr 80.11.60.167Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP09.phx.gbl
Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.vb:148341
X-Tomcat-NG: microsoft.public.dotnet.languages.vb

Hi,

I'm trying to read a database file written from a turbo Pascal program. I'veset a structure to map the records in the file, but

I have problem reading the file when I use VBFixedArray in my structure
instead of VBFixedString.
Here is the original code that works:

Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedString(30*10)> Public myList As String ' in fact, array of10 strings of 30 chars
End Structure

Dim cat as CCat
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The size of the array my change depending on the customer, so I cannot use afixed size structure. I've tried to replace it this way:
Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedArray(30)> Public myList() As String
End Structure

Dim cat as CCat
redim cat.myList(9) ' from what I know, this is supposed tocreate an array of 10 strings of 30 chars each.
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The fileGet function raises an IOException: Bad record Length.

Can someone tell me what I did wrong ? Also, is there a way to get the
record length I'm requesting before the FileGet ?

Thanks a lot for your help
David


Nov 20 '05 #3
I've had a look in debug mode. The ReDim works perfectly, meaning that I can
see that the size of cat.myList changes after it occurs.

The problem is that the Len function does not report the correct size and
the FileGet does not like the structure length.

Is there any difference between
<VBFixedString(30*10)> Public myList As String
and
<VBFixedArray(9), VBFixedString(30)> Public myList() As String

for the FileGet function ? (the first occurence works perfectly)

David

"David Scemama" <da***********@wanadoo.fr> wrote in message
news:Oe**************@TK2MSFTNGP12.phx.gbl...
I've tried what you suggest, but is the ReDim possible on such a structure ? I need to define the size of the array at runtime !

If I get the size of cat before and after the ReDim, I have the same result !

Sub Main()
Dim Size As Integer
Dim cat As CCat

Size = Len(cat)
ReDim cat.myList(20)
Size = Len(cat) ' gives the same result !

Stop
End Sub

And a FileGet will raise an exception "Bad Record Length"

David

"Jim Cantwell [MSFT]" <ji****@online.microsoft.com> wrote in message
news:I0**************@cpmsftngxa06.phx.gbl...
The array of strings needs to include the VBFixedString attribute as well
as the VBFixedArray attribute. Use the VB Len function to determine the
size a structure would be if written using the VB file i/o functions.
Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedArray(9), VBFixedString(30)> Public myList() As String
End Structure

Sub Main()
Dim Size As Integer
Dim cat As CCat

Size = Len(cat)
Stop
End Sub

--
Jim Cantwell, Visual Basic .NET Team
This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified

at http://www.microsoft.com/info/cpyright.htm
--------------------
From: "David Scemama" <da***********@wanadoo.fr>
Subject: VBFixedArray problem
Date: Mon, 20 Oct 2003 12:57:21 +0200
Lines: 45
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Message-ID: <u4**************@TK2MSFTNGP09.phx.gbl>
Newsgroups: microsoft.public.dotnet.languages.vb
NNTP-Posting-Host: aplessis-bouchard-103-2-1-167.w80-11.abo.wanadoo.fr
80.11.60.167Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP09.phx.gbl
Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.vb:148341
X-Tomcat-NG: microsoft.public.dotnet.languages.vb

Hi,

I'm trying to read a database file written from a turbo Pascal program. I'veset a structure to map the records in the file, but

I have problem reading the file when I use VBFixedArray in my structure
instead of VBFixedString.
Here is the original code that works:

Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedString(30*10)> Public myList As String ' in fact, array of10 strings of 30 chars
End Structure

Dim cat as CCat
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The size of the array my change depending on the customer, so I cannot use afixed size structure. I've tried to replace it this way:
Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
<VBFixedArray(30)> Public myList() As String
End Structure

Dim cat as CCat
redim cat.myList(9) ' from what I know, this is
supposed tocreate an array of 10 strings of 30 chars each.
Dim value as ValueType = cat
FileGet (1, value)
cat = CType(value, CCat)

The fileGet function raises an IOException: Bad record Length.

Can someone tell me what I did wrong ? Also, is there a way to get the
record length I'm requesting before the FileGet ?

Thanks a lot for your help
David



Nov 20 '05 #4
I have confirmed that there is a bug in the FileGet in both VB.NET 7.0 and 7.1. Below is an alternate method of writing the data using non-fixed length arrays.

You can calculate the size required at runtime when using non-fixed arrays, which are written to the file with additional array information for dimensions and dimension length and bounds. The string data will be written out using the string length. If you wish to keep them
at fixed sizes, additional code will be required to validate the member sets and add padding if necessary. But the string length prefix will still be written.

Option Explicit On

Module Module1
Structure CCat
Public code As Short
<VBFixedString(17)> Public name As String
Public myList As String()
End Structure

Sub Main()
Dim Size As Integer
Dim cat As CCat

Dim filename As String
filename = "c:\foo-workaround2.txt"
cat.code = 1
cat.name = "ABC"
ReDim cat.myList(9)

Dim i As Integer
'put something into the array to test
For i = 0 To 9
cat.myList(i) = StrDup(10, ChrW(AscW("A"c) + i))
Next

'Add the size for our dimensions
Size = 2 'Length of 'code' Short (2)
Size = Size + 17 'Lenght of 'name' Fixed String (17)
'Now calculate and add the size of 'myList'
Size = Size + 2 'Length of Short (for Dimension count)
Size = Size + (cat.myList.Rank * 8) 'For each dimension, 4 for array Length, 4 for Lower bound
'Now add the size of the string data (30 characters + 2 bytes for length prefix)
Size = Size + cat.myList.Length * (30 + 2)

FileOpen(1, filename, OpenMode.Random, OpenAccess.Default, OpenShare.Default, Size)
FilePut(1, cat, 1)
FileClose(1)

Dim cat2 As CCat
FileOpen(1, filename, OpenMode.Random, OpenAccess.Default, OpenShare.Default, Size)
FileGet(1, cat2, 1)
FileClose(1)

Stop
End Sub

End Module
--------------------
From: "David Scemama" <da***********@wanadoo.fr>
References: <u4**************@TK2MSFTNGP09.phx.gbl> <I0**************@cpmsftngxa06.phx.gbl> <Oe**************@TK2MSFTNGP12.phx.gbl>
Subject: Re: VBFixedArray problem
Date: Tue, 21 Oct 2003 11:49:16 +0200
Lines: 142
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Message-ID: <ON*************@TK2MSFTNGP11.phx.gbl>
Newsgroups: microsoft.public.dotnet.languages.vb
NNTP-Posting-Host: aplessis-bouchard-103-2-1-225.w80-11.abo.wanadoo.fr 80.11.60.225
Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP11.phx.gbl
Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.vb:148599
X-Tomcat-NG: microsoft.public.dotnet.languages.vb

I've had a look in debug mode. The ReDim works perfectly, meaning that I can
see that the size of cat.myList changes after it occurs.

The problem is that the Len function does not report the correct size and
the FileGet does not like the structure length.

Is there any difference between
<VBFixedString(30*10)> Public myList As String
and
<VBFixedArray(9), VBFixedString(30)> Public myList() As String

for the FileGet function ? (the first occurence works perfectly)

David

"David Scemama" <da***********@wanadoo.fr> wrote in message
news:Oe**************@TK2MSFTNGP12.phx.gbl...
I've tried what you suggest, but is the ReDim possible on such a structure

?
I need to define the size of the array at runtime !

If I get the size of cat before and after the ReDim, I have the same

result
!

Sub Main()
Dim Size As Integer
Dim cat As CCat

Size = Len(cat)
ReDim cat.myList(20)
Size = Len(cat) ' gives the same result !

Stop
End Sub

And a FileGet will raise an exception "Bad Record Length"

David

"Jim Cantwell [MSFT]" <ji****@online.microsoft.com> wrote in message
news:I0**************@cpmsftngxa06.phx.gbl...
> The array of strings needs to include the VBFixedString attribute as

well
as the VBFixedArray attribute. Use the VB Len function to determine the
size a structure would be if written using the VB file i/o functions.
> Structure CCat
> Public code As Short
> <VBFixedString(17)> Public name As String
> <VBFixedArray(9), VBFixedString(30)> Public myList() As String
> End Structure
>
> Sub Main()
> Dim Size As Integer
> Dim cat As CCat
>
> Size = Len(cat)
> Stop
> End Sub
>
> --
> Jim Cantwell, Visual Basic .NET Team
> This posting is provided "AS IS" with no warranties, and confers no

rights. Use of included script samples are subject to the terms specified

at
http://www.microsoft.com/info/cpyright.htm
> --------------------
> >From: "David Scemama" <da***********@wanadoo.fr>
> >Subject: VBFixedArray problem
> >Date: Mon, 20 Oct 2003 12:57:21 +0200
> >Lines: 45
> >X-Priority: 3
> >X-MSMail-Priority: Normal
> >X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
> >X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
> >Message-ID: <u4**************@TK2MSFTNGP09.phx.gbl>
> >Newsgroups: microsoft.public.dotnet.languages.vb
> >NNTP-Posting-Host: aplessis-bouchard-103-2-1-167.w80-11.abo.wanadoo.fr

80.11.60.167
> >Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP09.phx.gbl
> >Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.vb:148341
> >X-Tomcat-NG: microsoft.public.dotnet.languages.vb
> >
> >Hi,
> >
> >I'm trying to read a database file written from a turbo Pascal program.

I've
> >set a structure to map the records in the file, but
> >
> >I have problem reading the file when I use VBFixedArray in my structure
> >instead of VBFixedString.
> >Here is the original code that works:
> >
> >Structure CCat
> > Public code As Short
> > <VBFixedString(17)> Public name As String
> > <VBFixedString(30*10)> Public myList As String ' in fact, array

of
> >10 strings of 30 chars
> >End Structure
> >
> >Dim cat as CCat
> >Dim value as ValueType = cat
> >FileGet (1, value)
> >cat = CType(value, CCat)
> >
> >The size of the array my change depending on the customer, so I cannot

use a
> >fixed size structure. I've tried to replace it this way:
> >Structure CCat
> > Public code As Short
> > <VBFixedString(17)> Public name As String
> > <VBFixedArray(30)> Public myList() As String
> >End Structure
> >
> >Dim cat as CCat
> >redim cat.myList(9) ' from what I know, this is

supposed
to
> >create an array of 10 strings of 30 chars each.
> >Dim value as ValueType = cat
> >FileGet (1, value)
> >cat = CType(value, CCat)
> >
> >The fileGet function raises an IOException: Bad record Length.
> >
> >Can someone tell me what I did wrong ? Also, is there a way to get the
> >record length I'm requesting before the FileGet ?
> >
> >Thanks a lot for your help
> >David
> >
> >
> >
>
>
>
>



--
Jim Cantwell, Visual Basic .NET Team
This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm

Nov 20 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Bruce Davis | last post by:
I'm having a problem on windows (both 2000 and XP) with a multi-threaded tkinter gui application. The problem appears to be a deadlock condition when a child thread pops up a Pmw dialog window in...
11
by: Kostatus | last post by:
I have a virtual function in a base class, which is then overwritten by a function of the same name in a publically derived class. When I call the function using a pointer to the derived class...
0
by: Refky Wahib | last post by:
Hi I need Technical Support I finished a Great project using .Net and SQL Server and .Net Mobile Control My Business case is to implement this Program to accept about 1 Million concurrent...
9
by: Sudesh Sawant | last post by:
Hello, We have an application which communicates using remoting. There is a server which is a Windows Service. The server exposes an object which is a singleton. The client is a Web Application...
117
by: Peter Olcott | last post by:
www.halting-problem.com
28
by: Jon Davis | last post by:
If I have a class with a virtual method, and a child class that overrides the virtual method, and then I create an instance of the child class AS A base class... BaseClass bc = new ChildClass();...
6
by: Ammar | last post by:
Dear All, I'm facing a small problem. I have a portal web site, that contains articles, for each article, the end user can send a comment about the article. The problem is: I the comment length...
16
by: Dany | last post by:
Our web service was working fine until we installed .net Framework 1.1 service pack 1. Uninstalling SP1 is not an option because our largest customer says service packs marked as "critical" by...
2
by: Mike Collins | last post by:
I cannot get the correct drop down list value from a drop down I have on my web form. I get the initial value that was loaded in the list. It was asked by someone else what the autopostback was...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.