1. 問題提起
最近のプロジェクトで、ASP による FoxPro ライブラリ テーブル (*.DBF) の操作で問題が発生しました。実際には、DBF テーブルを使用するアプリケーション ソフトウェアが数多く存在し、ネットワーク環境でこれらのデータをどのように使用すればよいのか、多くの友人が困惑しています。
また、多くの情報を確認しましたが、解決策の詳細な説明は見つかりませんでした。テストの後、私はこの問題を最初に解決したので、それをみんなと共有します。
この記事では、次の問題の解決を試みます。
1. ASP は、FoxPro によって生成された空きテーブル (*.dbf ファイル) に結合します。
2. 複数のタイプのデータ ファイルとグラフィック ファイルを同時に dbf テーブルに保存します
(サンプル プログラムはSet conn = Server.CreateObject("ADODB.Connection")から入手できます。
connstr = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;"&_
"SourceDB=" & Server.MapPath(db) &";Exclusive=いいえ"
conn.Open connstr
上記のコードでは、data は DBF ファイルが配置されている相対パス (このコードが配置されているファイルからの相対パス) であり、Server.MapPath(db) によって絶対パスに変換されます。
http://www.connectionstrings.com では、さまざまな種類のライブラリ テーブル ファイルの接続文字列が提供されています。DBF ファイルの場合、指定される接続文字列は次のとおりです。
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:mydbpath;"
この接続文字列を使用して正常に接続できなかったので、これ以上のテストは実施しませんでした。興味のある方は上記の文字列を試してみてください。
.www.downcodes.com
2. SQL文でテーブル名を宣言します。
SQL ステートメント内で操作するテーブル名は、[テーブル名] または [テーブル名.拡張子] の形式で宣言できます。たとえば、テーブル ファイル名は t1.dbf で、SQL ステートメントは次のようになります。
select * from [t1] または select * from [t1.dbf]
3. 各種データの格納操作
DBF がサポートするデータ型はそれほど多くありませんが、特に注目すべきは Date (日付型)、Memo (メモ型)、および General (一般型) です。ここでは Data 型データに焦点を当てます。Memo 型と Gen 型は、後で説明するグラフィック ファイルを保存するときに使用されます。
通常、データベース操作を記述するには 2 つの方法を使用します。1 つは insert ステートメントを使用する方法で、もう 1 つは DBF テーブルの場合は addnew メソッドを使用する方法です。
insert文を使用する場合、Date型データの記述形式は{^yyyy-mm-dd}となり、区切り文字がAccessの#やSQL Serverの区切り文字と異なることに注意してください。具体的な SQL ステートメントは次のとおりです。
[t1.dbf] (名前,誕生日) 値に挿入 ('MyName',{^1970-1-1})
addnew メソッドを使用するときに、最初に使用したコードは次のとおりです:
rst.open "[t1]",conn,0,3
最初の追加新規
rst(0).value = "私の名前"
rst(1).value = {^1970-1-1}
最初の更新
最初に閉じる
SQL ServerやAccessの操作には問題ありませんが、DBFファイルの操作には問題があります。実験した結果、最終的に正しい方法を見つけました。
sql = "t1 から * を選択"
rst.open SQL,conn,0,3
最初の追加新規
rst(0).value = "私の名前"
rst(1).value = {^1970-1-1}
最初の更新
rst.close
上記 2 つのコードの違いは主に SQL ステートメントにあることに注意してください。前述したように、SQL ステートメントでは [テーブル名] または [テーブル名.dbf] の形式でテーブル ファイルを宣言できますが、addnew メソッドを使用する場合、テーブル名に拡張子を付けたり、角括弧を追加したりすることはできません。それ以外の場合は、「単純なテーブル名ではないため、更新できません」というプロンプトが表示されます。
4. グラフィックファイルの保存
DBF テーブルでは、メモ フィールドと一般フィールドの両方を使用して、グラフィックス、オーディオとビデオ、テキスト、その他のファイルを保存できます ( http://www.chinadesign.com.cn/NewsContents1.asp?id=2663を参照してください)。ここでは、フィールド タイプを memo(binary) (バイナリ準備タイプ) に設定し、rst(n).AppendChunk() メソッドを使用して結果の画像バイナリ データを書き込み、Response.BinaryWrite() メソッドを使用してバイナリを復元します。データを写真に。画像の保管に関する記事はたくさんあるので、ここでは詳しく説明しません。
一般フィールドを使用して写真を保存することについては、試してみましたが、うまくいかなかったので、再度試しませんでした。
5. データの削除
delete ステートメントを使用してデータを削除できますが、削除後にテーブル ファイルを開くと、データは削除対象としてマークされているだけで、実際にはテーブルから削除されていないことがわかります。 Foxpro では、pack コマンドを使用してデータを完全に削除します。いくつかの情報を確認したところ、VB ではパック操作を実装できないと記載されており、もちろん VBS でも実装できません。一般的な解決策は、テーブル内のデータを (もちろん削除マークなしで) 時々新しいテーブルにインポートし、元のテーブルを削除して、新しいテーブルの名前を元のテーブル名に変更することです。
6. データと画像を同時にデータベースに保存
この問題はこの記事の範囲外ですので、インターネット上には解決策を提供する記事がたくさんあります。
この機能は、コンポーネントレスアップロードプログラム「Huajing」を使用して実装しました。 「Huajing」のアップロードはファイルとして記述されており、データベースに保存する方法がないのではないかと尋ねる友人もいるかもしれません。それは悪くありませんが、少し変更するだけで、イメージのバイナリ データを取得してデータベースに保存できます。私の例では、環境プログラムの変更点をコメント化していますので、参考にしてください。
4. 結論
この記事では主に、ASP による DBF フリー テーブルの操作について説明します。DBC ライブラリの場合、対応する接続文字列は例の inc/conn.asp に示されています。
この時点で、友人は DBF テーブルの操作を大体理解していると思います。私の例と組み合わせることで、より多くの関数を開発できると思います。
幸運を!