4

わかりました、ここでは古代のデータベース形式である dbf ファイルを使用しています。理由は聞かないでください。Microsoft が foxpro のサポートを延長することを決定したため、特定のソフトウェアが foxpro のサポートを延長することを決定したことを知っておいてください。現在、特定のファイルで次のエラーが発生しています。別のファイルを正常にロードしましたが、このデータベースに問題があるかどうか知りたいです。それを判断するには、おそらくデータベースを調べる必要があると思いますが、投稿するには膨大な量になるので、取得できるものを取り上げます。

Traceback (most recent call last):
  File "billsapi.py", line 250, in <module>
    x.getUsedGuns()
  File "billsapi.py", line 72, in getUsedGuns
    itemdb = dbf.Dbf('item.dbf', readOnly=True, ignoreErrors=True)
  File "C:\Python27\lib\site-packages\dbfpy\dbf.py", line 135, in __init__
    self.header = self.HeaderClass.fromStream(self.stream)
  File "C:\Python27\lib\site-packages\dbfpy\header.py", line 127, in fromStream
    _fld = fields.lookupFor(_data[11]).fromString(_data, _pos)
  File "C:\Python27\lib\site-packages\dbfpy\fields.py", line 455, in lookupFor
    return _fieldsRegistry[typeCode]
KeyError: '0'

そして、このエラーを返す私の簡単なコードは次のとおりです。

def getUsedGuns(self): 
    itemdb = dbf.Dbf('item.dbf', readOnly=True, ignoreErrors=True) 

私が言ったように、問題なく他のファイルをロードできますが、この特定のエラーの回避策があるのでしょうか?

編集: DBF View Plusでファイルを開いて表示および変更できることも指摘したいと思います。

編集:解決策が見つかりました。私は実際に python dBase モジュールを使用することになりました。私の主な問題は、メモファイルが周りにないことだと思います(それらが何であれ、.fptファイル拡張子が付いています)。現時点で私が使用しているものは次のとおりです。

from dbf.tables import VfpTable
itemdb = VfpTable('item.db')
for rec in itemdb:
    print rec['MY_COLUM_NAME']

また、現在まだ FoxPro を使用している人は誰でもやけどを負わなければならないことを指摘したいと思います。

4

3 に答える 3

2

トレースバックは、ファイルに dbfpy でサポートされていないフィールド タイプ コード0. これは、Visual FoxPro (「VFP」) のものです。

メモファイルとは関係ありません。はい、メモ欄があれば.FPTファイルに保存されます。foo.fptにアクセスするときに存在する必要がありますfoo.dbf

あなたは「「「私は実際にpython dBaseモジュールを使用することになりました」」」と言います...おそらく、 PyPIエントリdbfによるとnullフィールドをサポートしていないEthan Furmanのモジュールを意味します。

私は DBF 読み取りモジュール ( pydbfrw) を持っており、これを「最近」リリースするつもりでした。ドキュメントからの抜粋は次のとおりです。

Field Type      Description  DBF variety  Python 2.x type
0 (digit zero)  _NullFlags   VFP          N/A             

Notes: This field type is used only for the hidden _NullFlags field which
is a bit mask saying which fields in the record should be interpreted as NULL.

None私のモジュールは、それを認識し、必要に応じてフィールド値を返すことを実装しています。モジュールのコピーが必要な場合は、私の電子メール アドレス (例: google("john machin xlrd")) を見つけて、電子メールで送信してください。

于 2011-03-11T21:46:05.467 に答える
0

Sybase のAdvantage Database Serverをご覧ください。この製品は、VFP DBF ファイルの優れたサポートを備えています。私は数年間、pyodbc を介して Python で ODBC ドライバーを使用しており、最近リリースされた DB-API 2.0 準拠のPython ドライバーを使用して優れた結果を得ています。

私も、DBF テーブルをサポートしなければならない立場に置かれています。Advantage Database Server は、絶対的な命の恩人です。

于 2011-03-14T09:54:44.887 に答える
0

item.dbf は、他の dbf が使用しないより高度な dbf 機能を使用している可能性があります。たとえば、自動インクリメント整数は非常に遅れて導入され、ほとんどの odbc ドライバーではサポートされていません。

于 2011-03-11T18:15:49.047 に答える