2016-12-01 9 views

答えて

2

を動作しません。テーブルが持つかもしれない。要件を定義し、既存のテーブルが何を持っているかを定義する必要があります。

例えば、データとの単純なコピーのためにあなたが使用することができます。

copy to NewTableName with cdx [Database dbName [Name tableNameInNewDb]] 

これは、インデックスと既存のデータとともに、構造をコピーします。ただし、他のデータベースレベルのプロパティがある場合はコピーしません。他の人には、cursorgetprop()\ cursorsetprop()、dbgetprop()\ dbsetprop()を使用する必要があります。

完全なコピーを行う1つの方法は、(home()+ 'tools \ gendbc \ gendbc.prg'を使用して)データベースとテーブル作成のプログラムバージョンを取得してから、 (そして古いものからコードを追加することもできます)。

あなたが最初に「コピーすることはできません」と言って何を意味するのかを願います。

PS:あなたの質問には「空のコピーを作る」というタイトルがあります。次に、使用することがあります:

copy to NewTableName with cdx for .F. 

これは、構造とインデックスをコピーしますが、データはコピーしません。他の欠点は依然として適用される。あなたは、インデックスを必要としなかった場合は、simplierの方法は次のようになります。

select * from sourceTable where .F. into table targetTable 

EDIT:

copy to NewTableName with cdx while .F. 
+1

あなたがしたい:LAKは速く、大きなテーブルになる代わりに、FORのWHILEを使用して、指摘されたように索引を保持するためにCDX節を必要とするかもしれません(COPY TO newfile CDX)。 – LAK

3

既存のすべてをコピーするVFPには、単一のコマンドは、ありませんです

+0

あなたはおそらくCOPY TO newtable WITH CDX WHILE .Fを望むでしょう。 (for .Fではなく、たくさんのレコードを持つテーブルで長い時間がかかるでしょう - 私はただの3.8MレコードのDBFで試してみたのですが、瞬間的でした、FORは約10分かかりました...)。 – LAK

+1

newtable CDXへのコピー構造も機能します。私はこれを過去に使ったと思います。 – LAK

+0

@ LAKの場合、テーブルに何か問題があります。単なる3.8 Mのレコードでは10分か10秒以上かかるはずはありません(私はとにかくテストし、3,720,093レコードで4.7秒かかりました)。しかし、あなたは瞬間的に使用していますが(実際にはCOPY TO実際には、テーブル構造とインデックス用のテーブルを作成するユーティリティと、その情報から再作成するユーティリティがあります)。 –

関連する問題