Dbase Iv Language Driver Id/ Download
I am accessing an existing dBase IV table (created by another program) containing memos via the Microsoft Jet driver 4.0. In a C# program I am reading data, changing it and writing it back to the table.
Trial Download
Technical Information Database TI838D.txt dBASE.DBF File Structure. The data file header structure for dBASE IV 2.0. Language driver ID. OLEDB / ODBC dBase IV driver: problem enlarging memo field. The OLEDB driver returns an 'disk or network error. Extended Properties=dBASE IV;User ID.
Reading works fine, writing works fine for all datatypes but memo fields: When the length of the memo field changes more than what appears to be a 512 byte block, the OLEDB driver returns an 'disk or network error' on executing the UPDATE command. Example: If the original memo size is 4323 bytes, the Update command will work fine for a string (LongVarChar) with a length between 4088 bytes and 4600 bytes.
Every string longer or shorter will fail on the disk or network exception. Has anybody had or heard of this behaviour? Every DBF tool I tried so far had no problem changing the memo length.
Any help appreciated, thanks! Daffy PS: Also have tried ODBC - same error. Code Snippet dbConn = new System.Data.OleDb. OleDbConnection ; dbConn.ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + nd.Path + '; Extended Properties=dBASE IV;User ID=Admin;Password=;'; System.Data.OleDb. OleDbCommand myCmd= dbConn.CreateCommand; dbConn.Open; myCmd.CommandText = 'UPDATE myTable SET columnname= @memoparam WHERE myColumn1 LIKE ' + (( int )intname).ToString( 'd5' ) + ' AND myColumn2 LIKE ' + nd.ObjectNumber.ToString( 'd5' ) + ';'; myCmd.Parameters.Add( new System.Data.OleDb. OleDbParameter ( 'memoparam', System.Data.OleDb. OleDbType.LongVarWChar)); myCmd.Parameters 'memoparam'.Value = writeString; updatedRows = myCmd.ExecuteNonQuery; dbConn.Close.
The problem with writing to dbase iv files is that the information your looking for is stored in the.dbt for memo fields. When the update statement executes, there is no error, because the field exists, but stores a pointer to a position in the.dbt file. When executing, the.dbt file is not written to. I've had similar issues trying to update a memo field in a.dbf. Only way I found round it was to open the.dbt file directly, and adjust this. This requires quite a bit of extra coding to make your program be able to read and write in.dbt format.
I'm still doing this bit - will post code in vb.net up here when done.