3

多数のVisualFoxpro(DBF)テーブルを作成するアプリケーションがあります。これらのテーブルにはそれぞれ異なるスキーマがありますが、すべてに既知の日付フィールドが含まれています。

先週のデータを各テーブルから新しいテーブル(ソーステーブルとは別のフォルダー)にコピーする別のアプリケーション(C#)を作成するように依頼されました。個別のテーブルは残ります(たとえば、3つのソーステーブルがある場合、3つの宛先テーブルがあります)。

時間の経過とともにテーブルが変更される可能性があるため(たとえば、新しいフィールドが追加された場合)、テーブルの構造について推測することはできません(前述の日付フィールドの存在は別として)。

1つのテーブルからデータを取得し、同じ構造の新しいテーブルを作成するための最も簡単で最良の方法は何ですか?

テーブルをクエリしてデータを抽出する方法を知っています(たとえば、先週のレコードをDataSetに入力します)。ただし、スキーマ内のすべてのフィールド情報を手動で解析し、それを使用して宛先テーブルを再作成するよりも、新しいテーブルを作成して結果を入力するためのより良い方法があるはずだと思います。

FoxProでの作業は、SQL Serverとは十分に異なるため、毎回頭痛の種になるので、アプローチに関するガイダンスが必要です。

本番マシンには、VFP9OLEDBドライバーがインストールされています。可能であれば、他に多くをインストールする必要はありません。

4

3 に答える 3

2

データ、テーブル、およびレコードの正確なコピーを取得するには、単一のSQLを介して実行できます。

OleDbConnection oConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\SomePath");
OleDbCommand oCmd = new OleDbCommand();
oCmd.Connection = oConn;
oCmd.Connection.Open();
oCmd.CommandText = "select * from SomeTable where someCondition into table YourNewTable";
oCmd.ExecuteNonQuery();         
oConn.Close();

where句はほとんど何でもかまいません。また、Into TABLE句はVFPエンジンに結果セットを新しいテーブルとして作成するように指示するため、型や列などを明示的に宣言したり、あるデータから別のデータにプッシュしたりする必要はありません...

考慮事項の1つ...新しいテーブルを作成しようとしている場所ならどこでも、明らかに作成、読み取り、書き込みができるようにするためのユーザーアクセスを確認します。必要に応じて、C:\ SomeOtherPath \ Monthly\MyTable1などの完全修飾パスを指定することもできます...

于 2009-11-07T03:47:45.947 に答える
0

次のようなものを試してください(VB.NETで記述され、変換された使用法www.developerfusion.co.uk/toolsに注意してください):

using System.Data.OleDb; 
using System.IO; 

static class Module1 
{ 
    public static void Main() 
    { 
        OleDbConnection oConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\"); 
        OleDbCommand oCmd = new OleDbCommand(); 

        { 
            oCmd.Connection = oConn; 
            oCmd.Connection.Open(); 
            // Create a sample FoxPro table 
            oCmd.CommandText = "CREATE TABLE Table1 (FldOne c(10))"; 
            oCmd.CommandType = CommandType.Text; 
            oCmd.ExecuteNonQuery(); 
        } 

        oConn.Close(); 
        oConn.Dispose(); 
        oCmd.Dispose(); 
    } 
} 
于 2009-11-06T13:55:39.847 に答える
0

あなたは単にすることができます:

select * from myTable into table newTable [database dbName]

DRappが示したように。ただし、インデックスも取得したい場合があります(存在する場合)(BFPOLEDBを介したインデックスの作成は直接サポートされていませんが、ExecScript()関数を使用して行うことができます)。次に、テーブルのDBF、CDX(およびFPT)ファイルをコピーするのが最も簡単です。VFPはファイルベースです。

于 2013-04-23T21:07:05.560 に答える