Frage

Wir haben eine Anwendung, die eine Reihe von SichtFoxpro (DBF) Tabellen erstellt. Jede dieser Tabellen hat ein anderes Schema, aber sie alle enthalten ein bekanntes Datumsfeld.

Ich bin gebeten worden, eine andere Anwendung zu erstellen (in C #), dass die letzte Woche im Wert von Daten aus jeder Tabelle in eine neue Tabelle (in einem anderen Ordner an den Quellentabellen) kopiert. Die unterschiedlichen Tabellen bleiben (zum Beispiel, wenn es drei Quellentabellen, wird es drei Zieltabellen sein).

Im Laufe der Zeit die Tabellen ändern können (zum Beispiel neue Felder hinzugefügt), so kann ich nicht Annahmen über Tabellenstruktur machen (abgesehen von der Existenz des oben genannten Datumsfeldes).

Was ist der einfachste / beste Weg, um die Daten aus einer Tabelle zu übernehmen und eine neue Tabelle mit derselben Struktur?

Ich weiß, wie die Tabellen zur Abfrage der Daten (z füllt einen DataSet mit der letzten Woche Datensätze) zu extrahieren. Allerdings bin ich da und dachte muss einen besseren Weg sein, um eine neue Tabelle erstellen und mit den Ergebnissen als manuell Parsen alle Feldinformationen im Schema und verwenden, die die die Zieltabelle neu zu füllen.

mit FoxPro arbeiten scheint unterschiedlich genug von SQL Server zu sein, mir bei jeder Umdrehung Kopfschmerzen zu geben, so brauche ich einige Hinweise auf meinem Ansatz.

Die Produktionsmaschine hat den VFP 9 OLEDB-Treiber darauf installiert. Wenn möglich, würden wir es vorziehen, nicht viel anderes installieren zu müssen.

War es hilfreich?

Lösung

Um eine exakte Kopie der Daten, Tabellen und Datensätze erhalten Sie über einen einzelnen SQL-Select über

tun können
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();

Sie könnte, wo Klausel fast alles sein, und die in der Tabelle Klausel teilt das VFP-Engine um das Ergebnis zu erzeugen als neue Tabelle gesetzt, so dass keine Notwendigkeit, explizit Typen zu deklarieren, Spalten, usw., Abfrage von Daten von einer und schieben Sie in eine anderen ...

Eine Frage der Betrachtung ... Überprüfen Sie die Zugriffs Benutzer offensichtlich in der Lage sein, zu erstellen, lesen, schreiben, wo immer Sie versuchen, die neue Tabelle zu erstellen. Sie können sogar einen vollständigen Pfad, wie C: \ angeben SomeOtherPath \ Monthly \ MyTable1 wenn nötig ...

Andere Tipps

Versuchen Sie so etwas wie dieses (Anmerkung in VB.NET geschrieben und konvertiert Verwendung 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(); 
    } 
} 

Sie können einfach ein tun:

select * from myTable into table newTable [database dbName]

als Drapp zeigte. Allerdings Sie können Indizes sowie bekommen (falls vorhanden) (BTW Indizes über Vfpoledb Erstellung nicht direkt unterstützt, aber Sie tun können, so ExecScript () Funktion). Dann wäre die einfachste Tisch des DBF, CDX (und FPT) Dateien zu kopieren. VFP wird Datei basiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top