D B
asked on
Question using LSET
I want to read the contents of a file into a UDT that is basically a "buffer" and then use LSET to move it into a UDT that has all the fields layed out properly. The UDT I am reading the line into has just a single variable defined as a fixed-length string the length of the data record...
Public Type KPAyData
Buffer As String * 4340
End Type
Public PayrollBuffer as KPayData
The data is payroll information. As such, it has a number of repeating fields for earnings, taxes, deductions, etc. I have defined a UDT for each of these repeating groups of fields, and used an array of that type in the appropriate place in the UDT that defines all the data. A small example is as follows...
Public Type PayrollTaxDeduction
TaxClass As String * 1
TaxState As String * 6
TaxLocality As String * 10
TaxAmount As String * 12
End Type
...
Public Type KPayType
EmployeeID As String * 11
EmployeeSSN As String * 9
...
TaxDeductions(1 to 10) As PayrollTaxDeduction
...
End Type
Public PayrollRecord as KPayType
If I do a Len() and LenB() on the types, the lengths come out correctly, but when I try to LSet PayrollRecord = PayrollBuffer, I get a Type Mismatch error. I am suspecting that using the array of UDTs in KPayType may be causing the error, but not certain. Can someone either confirm that or give me another avenue to pursue in determining why I am getting the error.
Also, if you can provide an alternative way to do this, I would appreciate it. There are 75 repeating groups just for deductions and each group contains five fields. I would hate to have to hard-code all of those (641 fields altogether).
Regards,
Doug
Public Type KPAyData
Buffer As String * 4340
End Type
Public PayrollBuffer as KPayData
The data is payroll information. As such, it has a number of repeating fields for earnings, taxes, deductions, etc. I have defined a UDT for each of these repeating groups of fields, and used an array of that type in the appropriate place in the UDT that defines all the data. A small example is as follows...
Public Type PayrollTaxDeduction
TaxClass As String * 1
TaxState As String * 6
TaxLocality As String * 10
TaxAmount As String * 12
End Type
...
Public Type KPayType
EmployeeID As String * 11
EmployeeSSN As String * 9
...
TaxDeductions(1 to 10) As PayrollTaxDeduction
...
End Type
Public PayrollRecord as KPayType
If I do a Len() and LenB() on the types, the lengths come out correctly, but when I try to LSet PayrollRecord = PayrollBuffer, I get a Type Mismatch error. I am suspecting that using the array of UDTs in KPayType may be causing the error, but not certain. Can someone either confirm that or give me another avenue to pursue in determining why I am getting the error.
Also, if you can provide an alternative way to do this, I would appreciate it. There are 75 repeating groups just for deductions and each group contains five fields. I would hate to have to hard-code all of those (641 fields altogether).
Regards,
Doug
I do not think you can do lset to type name (the name of the type not the type items).
this is ok.
lset payrollrecord.employeeid = your value
this is not ok
LSet PayrollRecord = PayrollBuffer
consider this
dim str as string
str = space(641)
lset str = payrollrecord.employeeid & payrollrecord.employeessn & your other fields
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
As EDDYKT use the copymemory to move your string to the udt
ASKER
angelIII:
vb6 - I am aware that .net does not support LSet for UDTs.
lunchbyte:
You can lset UDT to UDT. I have done it many, many times using this method. I have just never had another UDT (or array of UDTs) within the receiving UDT before. Furthermore, there are 641 fields, not bytes. The record length is 4340 bytes. Besides, I am wanting to go the other way. PayrollBuffer.Buffer receives the data from the record and I want to copy it into PayrollRecord.
vb6 - I am aware that .net does not support LSet for UDTs.
lunchbyte:
You can lset UDT to UDT. I have done it many, many times using this method. I have just never had another UDT (or array of UDTs) within the receiving UDT before. Furthermore, there are 641 fields, not bytes. The record length is 4340 bytes. Besides, I am wanting to go the other way. PayrollBuffer.Buffer receives the data from the record and I want to copy it into PayrollRecord.
well, I learn something new.
Sorry if I was no help. :(
Sorry if I was no help. :(
ASKER
lunchbyte: hang in there-better luck next time :-)
CopyMemory worked like a champ.
CopyMemory worked like a champ.
in vb6, this should work, but in vb.net this is no longer allowed like this afair