FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour How to open a dbf with memo (.fpt) missing
Posts: 274
Joined: Fri Apr 04, 2008 01:25 PM
How to open a dbf with memo (.fpt) missing
Posted: Wed Nov 30, 2011 10:50 AM

Hello all,

how do I open an dbf file if the according memofile (.ftp) is missing (without prompting an error)?

Thanks in advance for your help

Best Regards,

Gilbert Kuhnert
CTO Software GmbH
http://www.ctosoftware.de
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: How to open a dbf with memo (.fpt) missing
Posted: Wed Nov 30, 2011 11:28 AM

I don't think you can open it. If you just want to trap the error then you can use a TRY/CATCH structure.

EMG

Posts: 4043
Joined: Wed Dec 19, 2007 06:40 PM
Re: How to open a dbf with memo (.fpt) missing
Posted: Wed Nov 30, 2011 11:34 AM
Change the 1. Byte ( Format-info ) from the DBF with a Hexeditor :
This sample shows => F5 = Foxpro with Memo
to open without Memo change the Byte to => 03 or try another Value from the Filetype-table

Download a free Hexeditor :
http://www.chmaas.handshake.de/



Because of a missing Memo-file, it is impossible, to open the Dbf :



Patching the 1. Byte, now it is possible, to open the DBF with the Editor.
( tested / changed F5 to Value 30 of Visual Foxpro )
Delete the Memo-field and save the DBF.

opened Dbf without the Fpt-file :



Best Regards
Uwe :-)
Since 1995 ( the first release of FW 1.9 )

i work with FW.

If you have any questions about special functions, maybe i can help.
Posts: 274
Joined: Fri Apr 04, 2008 01:25 PM
Re: How to open a dbf with memo (.fpt) missing
Posted: Fri Dec 02, 2011 07:36 AM

@Uwe, Enrico: Thanks a lot.
I was hoping to be able to resolve this issue programmatically, like Visual dBase offers also to open the file without blob.
But in this case we'll have to handle the issue manually.

Best Regards,

Gilbert Kuhnert
CTO Software GmbH
http://www.ctosoftware.de
Posts: 824
Joined: Thu Oct 13, 2005 07:39 AM
Re: How to open a dbf with memo (.fpt) missing
Posted: Fri Dec 02, 2011 03:49 PM
Gilbert,

you can do it programmatically, just open the dbf with the low level functions fopen, fread, etc. Change the first bye and close the file.

Code (fw): Select all Collapse
// The example implements a user-defined function that reads the
// entire contents of a file into a memory variable using
// low-level file functions:

   #include "FileIO.ch"

   PROCEDURE Main
      LOCAL cFile := "test.dbf" //"MyFile.txt"
      LOCAL cStream

      IF .NOT. ReadStream( cFile, @cStream )
         IF FError() <> 0
            ? "Error reading file:", FError()
         ELSE
            ? "File is empty"
         ENDIF
      ELSE
         ? "Successfully read", Len(cStream), "bytes"
      ENDIF
   RETURN

   FUNCTION ReadStream( cFile, cStream )
      LOCAL nFileHandle := FOpen( cFile )
      LOCAL nFileSize

      IF FError() <> 0
         RETURN .F.
      ENDIF

      nFileSize := FSeek( nFileHandle, 0, FS_END )
      cStream   := Space( nFileSize )
      FSeek( nFileHandle, 0, FS_SET )
      FRead( nFileHandle, @cStream, nFileSize )
      FClose( nFileHandle )
   RETURN ( FError() == 0 .AND. .NOT. Empty( cStream ) )
kind regards

Stefan

Continue the discussion