Announcement

Collapse
No announcement yet.

Frage zu Batchmove

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage zu Batchmove

    Hallo

    Ich habe eine Paradox-DB mit TTable u.Datasource. Nun möchte ich einen
    Teil der Daten aus der Datenbank auslagern bzw. verschieben, die Datensätze in der Source-Tabelle sollen gelöscht werden. Welchen Modus
    benutze ich da am besten zb. batAppend?
    Muss ich die Destination-Tabelle mit Create erzeugen bevor ich mit Batchmove verschiebe/kopiere, oder langt nur die Vergabe des Dateinamens für die Destination-DB?
    Langt bei ProblemTableName nur der Dateiname oder muss ich die Problem-DB selber erzeugen?

    Erwin Meier

  • #2
    Hallo,

    am einfachsten ist es, wenn die Zieltabelle bereits vorhanden ist. Dann kann über die TTable-Methode <b>BatchMove</b> die Datensätze in die vorher über <b>EmptyTable</b> geleerte Zieltabelle kopieren:
    <pre>
    procedure TFormExport.BitBtnExportClick(Sender: TObject);
    begin
    // Export-Tabelle leeren
    with TableExport do begin
    Active := True;
    EmptyTable;
    end;
    // neue Datensätze in der Haupttabelle suchen
    with QueryExport do begin
    if Active then Close;
    Params[0].Value := StrToDate(EditDate.Text);
    StatBar.SimpleText := 'Stelle die Daten zusammen...';
    StatBar.Refresh;
    Open;
    LabelNew.Caption := IntToStr(RecordCount);
    end;
    StatBar.SimpleText := 'Kopiere die Daten...';
    Refresh;
    with TableExport do begin
    BatchMove(QueryExport, batAppend);
    LabelCopy.Caption := IntToStr(RecordCount);
    StatBar.SimpleText := Format('%d Datensätze wurden kopiert.',
    [RecordCount]);
    end;
    Refresh;
    // Export-Tabelle wieder schließen
    TableExport.Active := False;
    end;
    </pre>
    Wenn das kopieren erfolgreich war (d.h. keine Exception aufgetreten ist), kann man dann im 2. Schritt über TQuery eine DELETE-Anweisung für die Haupttabelle abschicken, bei der die gleiche WHERE-Einschränkung wie bei der SELECT-Abfrage für die zu kopierenden Daten verwendet wird.

    Für das o.g. Beispiel sieht die Konfiguration im Objektinspektor so aus:
    <pre>
    object QueryExport: TQuery
    DatabaseName = 'PasMail32'
    SQL.Strings = (
    'SELECT * FROM pasmail '
    'WHERE UpdateDatum >= atum')
    Left = 201
    Top = 34
    ParamData = <
    item
    DataType = ftDate
    Name = 'Datum'
    ParamType = ptUnknown
    end>
    end
    object TableExport: TTable
    DatabaseName = 'PasMail32'
    Exclusive = True
    TableName = 'PMEXPORT.DB'
    Left = 230
    Top = 34
    end
    </pre&gt

    Comment

    Working...
    X