AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Reihenfolge zum Kopieren von Datensätzen ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Reihenfolge zum Kopieren von Datensätzen ermitteln

Ein Thema von Ducksoul · begonnen am 3. Mär 2010 · letzter Beitrag vom 12. Mär 2010
 
Ducksoul

Registriert seit: 19. Apr 2006
Ort: Ilmenau
87 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Reihenfolge zum Kopieren von Datensätzen ermitteln

  Alt 3. Mär 2010, 14:24
Datenbank: Access • Version: 2000 • Zugriff über: ADO
Hallo,

ich bin mir grade nicht sicher, ob ich hier in den richtigen Unterbereich des Forums poste, aber mein Problem hat mit Datenbanken zu tun *g*

Es stellt sich mir das Problem, dass ich eine gewisse Anzahl an Tabellen in einer Datenbank habe, welche durch Fremdschlüsselbeziehungen miteinander verbunden sind. Möchte ich nun aus einer Tabelle einen Datensatz kopieren, so sollen alle Datensätze welche mit diesem DS via FK-Beziehung verbunden sind, ebenfalls kopiert werden und die Datensätze welche in der FK-Tabelle widerrum mit einer FK-Beziehung verbunden sind ebenso, etc...

Um die Reihenfolge herauszubekommen, in welcher die Datensätze kopiert werden sollen schreibe ich alle Tabellen mit FK-Beziehung in ein Array mit folgendem Aufbau:

Delphi-Quellcode:
  Timp = record
    col: string;
    r_tn: string;
    r_col: string;
  end;

  Texp = record
    col: string;
    r_tn: string;
    r_col: string;
  end;

  TTables = record // Tabellen mit FK-Beziehung
    tn: string;
    arr_i: array of Timp; // Tabellen, auf die referenziert wird
    arr_e: array of Texp; // Tabellen, von denen aus referenziert wird
  end;

Mittels folgender compare-Funktion wird dann ermittelt, werden 2 Tabellen verglichen. Referenziert Tabelle 1 auf Tabelle 2, so ist das Ergebnis = 1, referenziert Tabelle 2 auf Tabelle 1, so ist das Ergebnis -1:

Delphi-Quellcode:
function Timport_form.TableCopyCompare(object0, object1: TTables) : integer;
var
  rv, i, j: integer;
  left, right: TTables;
  refs: string;
begin
  rv := 0;
  left := object0;
  right := object1;

  if rv = 0 then
  begin
    if left.arr_i <> nil then
    begin
      for i := 0 to Length(left.arr_i) - 1 do
      begin
        refs := left.arr_i[i].r_tn;
        if refs = right.tn then
          rv := 1;
      end;
    end;

    if right.arr_i <> nil then
    begin
      for i := 0 to Length(right.arr_i) - 1 do
      begin
        refs := right.arr_i[i].r_tn;
        if refs = left.tn then
          rv := -1;
      end;
    end;
  end;

  result := rv;
end;

Um nun die Reihenfolge herauszubekommen, möchte ich das Array mit den Tabellen untereinander mittels Quicksort und obiger Comparefunktion so ordnen, wie am Anfang beschrieben. Aber dafür bin ich irgendwie zu blöd. Könnte mir einer beim Aufbau meines QS helfen? ^^

So weit bin ich bis jetzt:

Delphi-Quellcode:
procedure Timport_form.QuickSort(var arr: array of TTables; inf, sup: Integer);
var
 i, j, z: Integer;
 pivot: TTables;
 aux: TTables;
 sl: TStringlist;
begin
  i := inf;
  j := sup;
  sl := TStringlist.Create;

  if inf < sup then
  begin
    pivot := arr[(inf + sup) div 2];

    while i <= j do
    begin
      while (i < sup) and (TableCopyCompare(arr[i], pivot) < 0) do
        Inc(i);
      while (j > inf) and (TableCopyCompare(arr[j], pivot) > 0) do
        Dec(j);

      if i <= j then
      begin
        aux := arr[i];
        arr[i] := arr[j];
        arr[j] := aux;
        Inc(i);
        Dec(j);

        for i := 0 to Length(arr_tables) - 1 do
          sl.Add(arr_tables[i].tn + ': ' + IntToStr(Length(arr_tables[i].arr_i)) + ', ' + IntToStr(Length(arr_tables[i].arr_e)));

        ShowMessage(sl.Text);
      end;
    end;
  end;

 if j > inf then
   QuickSort(arr, inf, j);
 if i < sup then
   QuickSort(arr, i, sup);
end;

Gruß
Franz
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz