Import dotnetDBF for error handling.

This commit is contained in:
Patrick Fic
2022-02-11 15:06:05 -08:00
parent 991ad38839
commit f32c149bae
75 changed files with 5585 additions and 7 deletions

View File

@@ -0,0 +1,43 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netcoreapp2.0;net462</TargetFrameworks>
<OutputType Condition="'$(TargetFramework)'!='netcoreapp2.0'">Exe</OutputType>
<Copyright>Copyright © 2017</Copyright>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NUnit" Version="3.7.1" />
<PackageReference Include="NUnit3TestAdapter" Version="3.8.*" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.*" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="dbfs\cp1251.dbf" />
<EmbeddedResource Include="dbfs\dbase_03.dbf" />
<EmbeddedResource Include="dbfs\dbase_30.dbf" />
<EmbeddedResource Include="dbfs\dbase_30.fpt" />
<EmbeddedResource Include="dbfs\dbase_31.dbf" />
<EmbeddedResource Include="dbfs\dbase_83.dbf" />
<EmbeddedResource Include="dbfs\dbase_83.dbt" />
<EmbeddedResource Include="dbfs\dbase_83_missing_memo.dbf" />
<EmbeddedResource Include="dbfs\dbase_83_missing_memo_record_0.yml" />
<EmbeddedResource Include="dbfs\dbase_83_record_0.yml" />
<EmbeddedResource Include="dbfs\dbase_83_record_9.yml" />
<EmbeddedResource Include="dbfs\dbase_8b.dbf" />
<EmbeddedResource Include="dbfs\dbase_8b.dbt" />
<EmbeddedResource Include="dbfs\dbase_f5.dbf" />
<EmbeddedResource Include="dbfs\dbase_f5.fpt" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DotNetDBF.Enumerable\DotNetDBF.Enumerable.csproj" />
<ProjectReference Include="..\DotNetDBF\DotNetDBF.csproj" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="dbfs\cp1251_summary.txt" />
<EmbeddedResource Include="dbfs\dbase_03_summary.txt" />
<EmbeddedResource Include="dbfs\dbase_30_summary.txt" />
<EmbeddedResource Include="dbfs\dbase_31_summary.txt" />
<EmbeddedResource Include="dbfs\dbase_83_schema.txt" />
<EmbeddedResource Include="dbfs\dbase_83_summary.txt" />
<EmbeddedResource Include="dbfs\dbase_8b_summary.txt" />
<EmbeddedResource Include="dbfs\dbase_f5_summary.txt" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
namespace DotNetDBF.Test
{
[TestFixture]
public class Issue19Test
{
private Stream DbfsData(string filename) => typeof(Issue19Test).Assembly
.GetManifestResourceStream($"{nameof(DotNetDBF)}.{nameof(Test)}.dbfs.{filename}");
[Test]
public void ReadTest()
{
using (var dbfstream = DbfsData("dbase_8b.dbf"))
using (var memoStream = DbfsData("dbase_8b.dbt"))
using (DBFReader dbfr = new DBFReader(dbfstream) { DataMemo = memoStream})
{
object[] record = dbfr.NextRecord();
//This line would hang issue #19 https://github.com/ekonbenefits/dotnetdbf/issues/19
Assert.Throws<DBTException>(() => record[5].ToString());
}
}
}
}

16
DotNetDBF.Test/Program.cs Normal file
View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace DotNetDBF.Test
{
#if !NETCOREAPP2_0
public class Program
{
public static void Main()
{
}
}
#endif
}

View File

@@ -0,0 +1,11 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("8d5436e3-f584-40a0-acdc-65346eceadb0")]

544
DotNetDBF.Test/Test.cs Normal file
View File

@@ -0,0 +1,544 @@
using System;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using DotNetDBF;
using DotNetDBF.Enumerable;
using NUnit.Framework;
namespace DotNetDBFTest
{
public interface ITestInterface
{
string F1 { get; set; }
string F2 { get; set; }
string F3 { get; set; }
}
[TestFixture]
public class DotNetDBFTest : AssertionHelper
{
private string TestPath([CallerMemberName] string name = null)
=> Path.Combine(Path.GetTempPath(), name + "_121212.dbf");
private string TestRAFPath([CallerMemberName] string name = null)
=> Path.Combine(Path.GetTempPath(), name + "_raf-1212.dbf");
private string TestClipLongPath([CallerMemberName] string name = null)
=> Path.Combine(Path.GetTempPath(), name + "_cliplong.dbf");
private string TestMemoPath([CallerMemberName] string name = null)
=> Path.Combine(Path.GetTempPath(), name + "_clipmemo.dbf");
private string TestSelectPath([CallerMemberName] string name = null)
=> Path.Combine(Path.GetTempPath(), name + "_select.dbf");
private string GetCharacters(int aLength)
{
var chars = new[] {"a", "b", "c", "d", "e", "f", "g", " "};
var returnval = string.Join(string.Empty,
Enumerable.Range(0, aLength).Select(it => chars[it % chars.Length]).ToArray());
Assert.That(returnval.Length, EqualTo(aLength), "GetCharacters() did not return correct length string");
return returnval;
}
private static void println(String s)
{
Console.WriteLine(s);
}
[Test]
public void checkDataType_N()
{
Decimal writtenValue;
using (
Stream fos =
File.Open(TestPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
using (var writer = new DBFWriter())
{
var field = new DBFField("F1", NativeDbType.Numeric, 15, 0);
writer.Fields = new[] {field};
writtenValue = 123456789012345L;
writer.AddRecord(writtenValue);
writer.Write(fos);
}
using (
Stream fis =
File.Open(TestPath(),
FileMode.Open,
FileAccess.Read))
using (var reader = new DBFReader(fis))
{
var readValues = reader.NextRecord();
Assert.That(readValues[0], EqualTo(writtenValue), "Written Value Equals Read");
}
}
[Test]
public void checkLongCharLengthWithClipper()
{
var fieldLength = 750;
string writtenValue;
using (
Stream fos =
File.Open(TestClipLongPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
var writer = new DBFWriter();
var field = new DBFField("F1", NativeDbType.Char, fieldLength);
writer.Fields = new[] {field};
writtenValue = GetCharacters(fieldLength);
writer.AddRecord(writtenValue);
writer.Write(fos);
}
using (
Stream fis =
File.Open(TestClipLongPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
var reader = new DBFReader(fis);
Assert.That(reader.Fields.First().FieldLength, EqualTo(fieldLength));
var readValues = reader.NextRecord();
Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read");
}
}
[Test]
public void checkDataType_M()
{
var fieldLength = 2400;
MemoValue writtenValue;
using (Stream fos = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite))
using (var writer = new DBFWriter
{
DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT")
})
{
var field = new DBFField("F1", NativeDbType.Memo);
writer.Fields = new[] {field};
writtenValue = new MemoValue(GetCharacters(fieldLength));
writer.AddRecord(writtenValue);
writer.Write(fos);
}
using (Stream fis = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite))
using (var reader = new DBFReader(fis)
{
DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT")
})
{
var readValues = reader.NextRecord();
Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read");
}
}
[Test]
public void checkSelect()
{
var fieldLength = 2400;
string writtenValue;
using (
Stream fos =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
var writer = new DBFWriter
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
};
var field = new DBFField("F1", NativeDbType.Memo);
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
var field3 = new DBFField("F3", NativeDbType.Char, 10);
writer.Fields = new[] {field, field2, field3};
writtenValue = "alpha";
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
writer.Write(fos);
}
using (
Stream fis =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
var reader = new DBFReader(fis)
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
};
reader.SetSelectFields("F3");
var readValues = reader.NextRecord();
Assert.That(readValues[0], StartsWith(writtenValue), "Written Value not equaling Read");
}
}
[Test]
public void checkSelectDynamic()
{
var fieldLength = 2400;
string writtenValue;
string writtenMemo;
using (
Stream fos =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
using (var writer = new DBFWriter
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var field = new DBFField("F1", NativeDbType.Memo);
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
var field3 = new DBFField("F3", NativeDbType.Char, 10);
writer.Fields = new[] {field, field2, field3};
writtenValue = "alpha";
writtenMemo = GetCharacters(fieldLength);
writer.AddRecord(new MemoValue(writtenMemo), 10, writtenValue);
writer.Write(fos);
}
using (
Stream fis =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
using (var reader = new DBFReader(fis)
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
reader.SetSelectFields("F1", "F3");
var readValues = reader.DynamicAllRecords().First();
Assert.That(readValues.F1.ToString(), EqualTo(writtenMemo), "Written Value not equaling Read");
Assert.That(readValues.F3, EqualTo(writtenValue), "Written Value not equaling Read");
}
}
[Test]
public void checkAnnoymous()
{
var fieldLength = 2400;
string writtenValue;
using (
Stream fos =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
var writer = new DBFWriter
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
};
var field = new DBFField("F1", NativeDbType.Memo);
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
var field3 = new DBFField("F3", NativeDbType.Char, 10);
writer.Fields = new[] {field, field2, field3};
writtenValue = "alpha";
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
writer.Write(fos);
}
using (
Stream fis =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
var reader = new DBFReader(fis)
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
};
var readValues = reader.AllRecords(new {F2 = default(decimal), F3 = default(string)});
Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read");
}
}
[Test]
public void checkProxy()
{
var fieldLength = 2400;
string writtenValue;
using (
Stream fos =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
using (var writer = new DBFWriter {
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
;
var field = new DBFField("F1", NativeDbType.Memo);
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
var field3 = new DBFField("F3", NativeDbType.Char, 10);
writer.Fields = new[] {field, field2, field3};
writtenValue = "alpha";
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
writer.Write(fos);
}
}
using (
Stream fis =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
using (var reader = new DBFReader(fis)
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var readValues = reader.AllRecords<ITestInterface>();
Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read");
}
}
}
[Test]
public void checkDynamicProxy()
{
var fieldLength = 2400;
string writtenValue;
using (
Stream fos =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
using (var writer = new DBFWriter
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var field = new DBFField("F1", NativeDbType.Memo);
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
var field3 = new DBFField("F3", NativeDbType.Char, 10);
writer.Fields = new[] {field, field2, field3};
writtenValue = "alpha";
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
writer.Write(fos);
}
using (
Stream fis =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
using (var reader = new DBFReader(fis)
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var readValues = reader.DynamicAllRecords();
Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read");
}
}
[Test]
public void checkDynamicProxyWhere()
{
var fieldLength = 2400;
string writtenValue;
using (
Stream fos =
File.Open(TestSelectPath(),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
using (var writer = new DBFWriter
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var field = new DBFField("F1", NativeDbType.Memo);
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
var field3 = new DBFField("F3", NativeDbType.Char, 10);
writer.Fields = new[] {field, field2, field3};
writtenValue = "alpha";
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 12, "beta");
writer.Write(fos);
}
using (var reader = new DBFReader(TestSelectPath())
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var readValues = reader.DynamicAllRecords();
Assert.That(Equals(readValues.Count(), 2), "All Records not matching");
}
using (var reader = new DBFReader(TestSelectPath())
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 10);
Assert.That(Equals(readValues.Count(), 1), "All Records not matching");
}
using (var reader = new DBFReader(TestSelectPath())
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 12);
Assert.That(Equals(readValues.Count(), 1), "All Records not matching");
}
using (var reader = new DBFReader(TestSelectPath())
{
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
})
{
var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 13);
Assert.That(Equals(readValues.Count(), 0), "All Records not matching");
}
}
[Test]
public void checkRAFwriting()
{
println("Writing in RAF mode ... ");
if (File.Exists(TestRAFPath()))
{
File.Delete(TestRAFPath());
}
using (var writer = new DBFWriter(TestRAFPath()))
{
var fields = new DBFField[2];
fields[0] = new DBFField("F1", NativeDbType.Char, 10);
fields[1] = new DBFField("F2", NativeDbType.Numeric, 2);
writer.Fields = fields;
writer.WriteRecord("Red", 10);
writer.WriteRecord("Blue", 20);
}
println("done.");
println("Appending to this file");
using (var writer = new DBFWriter(TestRAFPath()))
{
writer.WriteRecord("Green", 33);
writer.WriteRecord("Yellow", 44);
}
println("done.");
}
[Test]
public void ShowPaths()
{
println(TestPath());
println(TestRAFPath());
println(TestClipLongPath());
}
[Test]
public void Test()
{
using (
Stream fis =
File.Open(@"f:\st\dev\testdata\p.dbf",
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
using (var reader = new DBFReader(fis)
{
DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT")
})
{
var readValues = reader.NextRecord();
Console.WriteLine(readValues);
}
}
[Test]
public void test1()
{
Assert.DoesNotThrow(() => { new DBFWriter(); }, "Can't Create empty DBFWriter Object");
}
[Test]
public void test2()
{
Assert.DoesNotThrow(() => { new DBFField(); }, "Can't Create empty DBFWriter Object");
}
[Test]
public void test3()
{
WriteSample();
ReadSample();
}
public void WriteSample([CallerMemberName] string name = null)
{
var field = new DBFField {Name = "F1", DataType = NativeDbType.Numeric};
var writer = new DBFWriter {Fields = new[] {field}};
writer.AddRecord(3);
using (
Stream fos =
File.Open(TestPath(name),
FileMode.OpenOrCreate,
FileAccess.ReadWrite))
{
writer.Write(fos);
}
}
public void ReadSample([CallerMemberName] string name = null)
{
using (var reader = new DBFReader(TestPath(name)))
{
Assert.That(reader.RecordCount, EqualTo(1));
}
}
}
}

View File

@@ -0,0 +1,22 @@
Most of the DBFs here are from the spec directory of the dbf ruby gem
Copyright (c) 2006-2017 Keith Morrison <keithm@infused.org>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Binary file not shown.

View File

@@ -0,0 +1,11 @@
Database: cp1251.dbf
Type: (30) Visual FoxPro
Memo File: false
Records: 4
Fields:
Name Type Length Decimal
------------------------------------------------------------------------------
RN N 4 0
NAME C 100 0

Binary file not shown.

View File

@@ -0,0 +1,40 @@
Database: dbase_03.dbf
Type: (03) dBase III without memo file
Memo File: false
Records: 14
Fields:
Name Type Length Decimal
------------------------------------------------------------------------------
Point_ID C 12 0
Type C 20 0
Shape C 20 0
Circular_D C 20 0
Non_circul C 60 0
Flow_prese C 20 0
Condition C 20 0
Comments C 60 0
Date_Visit D 8 0
Time C 10 0
Max_PDOP N 5 1
Max_HDOP N 5 1
Corr_Type C 36 0
Rcvr_Type C 36 0
GPS_Date D 8 0
GPS_Time C 10 0
Update_Sta C 36 0
Feat_Name C 20 0
Datafile C 20 0
Unfilt_Pos N 10 0
Filt_Pos N 10 0
Data_Dicti C 20 0
GPS_Week N 6 0
GPS_Second N 12 3
GPS_Height N 16 3
Vert_Prec N 16 1
Horz_Prec N 16 1
Std_Dev N 16 6
Northing N 16 3
Easting N 16 3
Point_ID N 9 0

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,154 @@
Database: dbase_30.dbf
Type: (30) Visual FoxPro
Memo File: true
Records: 34
Fields:
Name Type Length Decimal
------------------------------------------------------------------------------
ACCESSNO C 15 0
ACQVALUE N 12 2
APPNOTES M 4 0
APPRAISOR C 75 0
CABINET C 25 0
CAPTION C 30 0
CAT C 1 0
CATBY C 25 0
CATDATE D 8 0
CATTYPE C 15 0
CLASSES M 4 0
COLLECTION C 75 0
CONDDATE D 8 0
CONDEXAM C 25 0
CONDITION C 35 0
CONDNOTES M 4 0
CONTAINER C 40 0
COPYRIGHT M 4 0
CREATOR C 80 0
CREDIT M 4 0
CURVALMAX N 12 2
CURVALUE N 12 2
DATASET C 15 0
DATE C 50 0
DESCRIP M 4 0
DIMNOTES M 4 0
DISPVALUE C 10 0
DRAWER C 20 0
EARLYDATE N 4 0
EVENT C 80 0
EXHIBITID C 36 0
EXHIBITNO N 7 0
EXHLABEL1 M 4 0
EXHLABEL2 M 4 0
EXHLABEL3 M 4 0
EXHLABEL4 M 4 0
EXHSTART D 8 0
FILMSIZE C 35 0
FLAGDATE T 8 0
FLAGNOTES M 4 0
FLAGREASON C 20 0
FRAME C 75 0
FRAMENO C 25 0
GPARENT C 45 0
HOMELOC C 60 0
IMAGEFILE C 60 0
IMAGENO N 3 0
INSCOMP C 30 0
INSDATE D 8 0
INSPHONE C 25 0
INSPREMIUM C 20 0
INSREP C 30 0
INSVALUE N 10 2
INVNBY C 25 0
INVNDATE D 8 0
LATEDATE N 4 0
LEGAL M 4 0
LOANCOND M 4 0
LOANDATE D 8 0
LOANDUE D 8 0
LOANID C 36 0
LOANINNO C 15 0
MAINTCYCLE C 10 0
MAINTDATE D 8 0
MAINTNOTE M 4 0
MEDIUM C 75 0
NEGLOC C 60 0
NEGNO C 25 0
NOTES M 4 0
OBJECTID C 25 0
OBJNAME C 40 0
OLDNO C 25 0
ORIGCOPY C 15 0
OTHERNO C 25 0
OUTDATE D 8 0
PARENT C 40 0
PEOPLE M 4 0
PLACE C 100 0
POLICYNO C 20 0
PRINTSIZE C 35 0
PROCESS C 75 0
PROVENANCE M 4 0
PUBNOTES M 4 0
RECAS C 20 0
RECDATE C 10 0
RECFROM C 120 0
RELATION C 36 0
RELNOTES M 4 0
ROOM C 25 0
SGFLAG C 1 0
SHELF C 20 0
SITE C 40 0
SITENO C 12 0
SLIDENO C 25 0
STATUS C 20 0
STATUSBY C 25 0
STATUSDATE D 8 0
STERMS M 4 0
STUDIO C 60 0
SUBJECTS M 4 0
TCABINET C 25 0
TCONTAINER C 40 0
TDRAWER C 20 0
TEMPAUTHOR C 25 0
TEMPBY C 25 0
TEMPDATE D 8 0
TEMPLOC C 60 0
TEMPNOTES M 4 0
TEMPREASON C 50 0
TEMPUNTIL C 10 0
TITLE M 4 0
TITLESORT C 100 0
TROOM C 25 0
TSHELF C 20 0
TWALL C 20 0
UDF1 C 75 0
UDF10 C 75 0
UDF11 C 20 0
UDF12 C 20 0
UDF13 N 12 0
UDF14 N 12 2
UDF15 N 12 2
UDF16 N 12 3
UDF17 N 12 3
UDF18 D 8 0
UDF19 D 8 0
UDF20 D 8 0
UDF21 M 4 0
UDF22 M 4 0
UDF2 C 75 0
UDF3 C 75 0
UDF4 C 75 0
UDF5 C 75 0
UDF6 C 75 0
UDF7 C 75 0
UDF8 C 75 0
UDF9 C 75 0
UPDATED T 8 0
UPDATEDBY C 25 0
VALUEDATE D 8 0
WALL C 20 0
WEBINCLUDE L 1 0
ZSORTER C 69 0
ZSORTERX C 44 0
PPID C 36 0

Binary file not shown.

View File

@@ -0,0 +1,20 @@
Database: dbase_31.dbf
Type: (31) Visual FoxPro with AutoIncrement field
Memo File: false
Records: 77
Fields:
Name Type Length Decimal
------------------------------------------------------------------------------
PRODUCTID I 4 0
PRODUCTNAM C 40 0
SUPPLIERID I 4 0
CATEGORYID I 4 0
QUANTITYPE C 20 0
UNITPRICE Y 8 4
UNITSINSTO I 4 0
UNITSONORD I 4 0
REORDERLEV I 4 0
DISCONTINU L 1 0
_NullFlags 0 1 0

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,16 @@
---
- 87
- 2
- 0
- 0
- 87
- '1'
- Assorted Petits Fours
- graphics/00000001/t_1.jpg
- graphics/00000001/1.jpg
- 0.0
- 0.0
-
- 5.51
- true
- true

View File

@@ -0,0 +1,16 @@
---
- 87
- 2
- 0
- 0
- 87
- '1'
- Assorted Petits Fours
- graphics/00000001/t_1.jpg
- graphics/00000001/1.jpg
- 0.0
- 0.0
- "Our Original assortment...a little taste of heaven for everyone. Let us\r\nselect a special assortment of our chocolate and pastel favorites for you.\r\nEach petit four is its own special hand decorated creation. Multi-layers of\r\nmoist cake with combinations of specialty fillings create memorable cake\r\nconfections. Varietes include; Luscious Lemon, Strawberry Hearts, White\r\nChocolate, Mocha Bean, Roasted Almond, Triple Chocolate, Chocolate Hazelnut,\r\nGrand Orange, Plum Squares, Milk chocolate squares, and Raspberry Blanc."
- 5.51
- true
- true

View File

@@ -0,0 +1,23 @@
---
- 34
- 1
- 0
- 0
- 34
- AB01
- Apricot Brandy Fruitcake
- graphics/00000001/t_AB01.jpg
- graphics/00000001/AB01.jpg
- 37.95
- 37.95
- "Once tasted you will understand why we won The\r\nBoston Herald's Fruitcake Taste-off.
Judges liked its generous size,\r\nluscious appearance, moist texture and fruit
to cake ratio ... commented one\r\njudge \"It's a lip Smacker!\" Our signature fruitcake
is baked with carefully\r\nselected ingredients that will be savored until the last
moist crumb is\r\ndevoured each golden slice is brimming with Australian glaced
apricots,\r\ntoasted pecans, candied orange peel, and currants, folded gently into
a\r\nbrandy butter batter and slowly baked to perfection and then generously\r\nimbibed
with \"Holiday Spirits\". Presented in a gift tin. (3lbs. 4oz)"
- 0.0
- false
- true

View File

@@ -0,0 +1,19 @@
ActiveRecord::Schema.define do
create_table "dbase_83" do |t|
t.column "id", :integer
t.column "catcount", :integer
t.column "agrpcount", :integer
t.column "pgrpcount", :integer
t.column "order", :integer
t.column "code", :string, :limit => 50
t.column "name", :string, :limit => 100
t.column "thumbnail", :string, :limit => 254
t.column "image", :string, :limit => 254
t.column "price", :float
t.column "cost", :float
t.column "desc", :text
t.column "weight", :float
t.column "taxable", :boolean
t.column "active", :boolean
end
end

View File

@@ -0,0 +1,24 @@
Database: dbase_83.dbf
Type: (83) dBase III with memo file
Memo File: true
Records: 67
Fields:
Name Type Length Decimal
------------------------------------------------------------------------------
ID N 19 0
CATCOUNT N 19 0
AGRPCOUNT N 19 0
PGRPCOUNT N 19 0
ORDER N 19 0
CODE C 50 0
NAME C 100 0
THUMBNAIL C 254 0
IMAGE C 254 0
PRICE N 13 2
COST N 13 2
DESC M 10 0
WEIGHT N 13 2
TAXABLE L 1 0
ACTIVE L 1 0

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,15 @@
Database: dbase_8b.dbf
Type: (8b) dBase IV with memo file
Memo File: true
Records: 10
Fields:
Name Type Length Decimal
------------------------------------------------------------------------------
CHARACTER C 100 0
NUMERICAL N 20 2
DATE D 8 0
LOGICAL L 1 0
FLOAT F 20 18
MEMO M 10 0

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,68 @@
Database: dbase_f5.dbf
Type: (f5) FoxPro with memo file
Memo File: true
Records: 975
Fields:
Name Type Length Decimal
------------------------------------------------------------------------------
NF N 5 0
SEXE C 1 0
NOM C 20 0
COG1 C 15 0
COG2 C 15 0
TELEFON C 9 0
RENOM C 15 0
NFP N 5 0
NFM N 5 0
ARXN C 10 0
DATN D 8 0
LLON C 15 0
MUNN C 15 0
COMN C 15 0
PROV C 15 0
PAIN C 15 0
OFIC C 15 0
ARXB C 10 0
DATB D 8 0
LLOB C 15 0
MUNB C 15 0
COMB C 15 0
PAIB C 15 0
DRIB C 30 0
INAB C 30 0
OFTB C 10 0
OFNB C 20 0
AXC1 C 10 0
DTC1 D 8 0
LLC1 C 15 0
NFC1 N 5 0
TCA1 C 10 0
OTC1 C 10 0
ONC1 C 20 0
AXC2 C 10 0
DTC2 D 8 0
LLC2 C 15 0
NFC2 N 5 0
TCA2 C 10 0
OTC2 C 10 0
ONC2 C 20 0
AXC3 C 10 0
DTC3 D 8 0
LLC3 C 15 0
NFC3 N 5 0
TCA3 C 10 0
OTC3 C 10 0
ONC3 C 20 0
ARXD C 10 0
DATD D 8 0
LLOD C 15 0
OFTD C 10 0
OFND C 20 0
OBS1 C 70 0
OBS2 C 70 0
OBS3 C 70 0
OBS4 C 70 0
OBSE M 10 0
GHD C 15 0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.