Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie lautet die Datensatznummer einer Paradox-Tabelle in SQL? (https://www.delphipraxis.net/75111-wie-lautet-die-datensatznummer-einer-paradox-tabelle-sql.html)

Barny 14. Aug 2006 15:50

Datenbank: Paradox • Version: 7 • Zugriff über: SQL

Wie lautet die Datensatznummer einer Paradox-Tabelle in SQL?
 
Hallo,

ich will über den Borland Datenbank-Explorer per SQL-Befehl Daten aus einer Quell- in eine Zieltabelle schreiben. Beides sind Paradox-Tabellen. Ich will dabei Datensatz für Datensatz abarbeiten.

SQL-Code:
UPDATE Zieltabelle
SET ANr = (SELECT BNr FROM Quelltabelle WHERE Zieltabelle.ID = Quelltabelle.id);
Es gibt aber immer eine Fehlermeldung "Ungültiger Feldname id".

Weiß jemand, wie ich die Datensatznummer richtig in den SQL-Befehl schreiben muss?

mkinzler 14. Aug 2006 15:52

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
In SQL würde ich das über den Primärschlüssel machen.Ob man auf die Datensatznummer per SQL zugreifen kann (wenn sie als solches überhaupt in der DB existiert) kann ich nicht sagen.

Jürgen Thomas 14. Aug 2006 16:59

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
Zitat:

Zitat von Barny
Ich will dabei Datensatz für Datensatz abarbeiten...

Es gibt aber immer eine Fehlermeldung "Ungültiger Feldname id".

Weiß jemand, wie ich die Datensatznummer richtig in den SQL-Befehl schreiben muss?

Grundsätzlich arbeitet SQL mengenorientiert; eine Datensatznummer gibt es also unmittelbar nicht für eine SELECT-Ergebnismenge (allenfalls bei manchen SQL-Dialekten).

Zum Vergleich, welche Datensätze übertragen werden sollen, benötigst Du deshalb eine ID (genauer: einen kompatiblen PrimaryKey) innerhalb von Quell- und von Zieltabelle.

Wenn ich mich recht erinnere, unterscheidet Paradox auch noch Groß- und Kleinschreibung bei Feldnamen. Vielleicht liegt darin der Fehler.

Wenn Du die Datensätze sowieso einzeln bearbeiten willst (warum eigentlich?), bringt der Zugriff über SQL möglicherweise keine Vorteile.

Arbeitest Du mit der BDE? Dann könntest Du zur Beschleunigung einen Filter auf die Quelltabelle setzen.

Für genauere Tipps bitte ich um genauere Hinweise (Tabellendefinition mit Indizes, Auswahl der Datensätze, die übertragen werden sollen). Aber vielleicht reichen diese Hinweise. Jürgen

omata 14. Aug 2006 17:12

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
Hallo Barny,

jetzt versuche ich mich auch nochmal...

Zitat:

Zitat von Barny
SQL-Code:
UPDATE Zieltabelle
SET ANr = (SELECT BNr
           FROM Quelltabelle
           WHERE Zieltabelle.ID = Quelltabelle.id);

gibt es in der Tabelle Zieltabelle eine Spalte ID?

Ich will noch auf etwas anderes hinaus...
Gibt es in der Quelltabelle immer nur eine Zeile pro ID? (ist ID also ein Primarykey?)

Wenn die Unterabfrage mehrere Zeilen liefert kann das auch nicht gehen.

Also vielleicht so...
SQL-Code:
UPDATE Zieltabelle
SET ANr = (SELECT MIN(BNr)
           FROM Quelltabelle
           WHERE id = Zieltabelle.id);
MIN oder auch MAX.

Gruss
Thorsten

Barny 15. Aug 2006 14:28

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
An mkinzler,

vielen Dank für den Vorschlag. Leider unterscheiden sich die Primärschlüssel der Tabellen. In der Zieltabelle haben wir einen zusammengesetzten Schlüssel aus 4 Feldern, in der Quelltabelle einen ganz einfachen AUTOINCREMENT-Schlüssel. Da diese unterschiedlich sind, kann ich die Datensätze nicht über die Primärschlüssel ansprechen.

Barny 15. Aug 2006 14:46

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
An Jürgen Thomas

Vielen Dank für deine Antwort.

Zitat:

Grundsätzlich arbeitet SQL mengenorientiert; eine Datensatznummer gibt es also unmittelbar nicht für eine SELECT-Ergebnismenge (allenfalls bei manchen SQL-Dialekten).
Wahrscheinlich bringt ich mein Halbwissen von SQL auf die schiefe Bahn. Wenn ich meine Zieltabelle "UStAB100.db" mit der Borland Datenbankoberfläche öffne wird eine Spalte "USTAB100" angezeigt, die ich als Datensatznummer ansehe. Den Begriff "id" habe ich aus einem SQL-Tutorial. Meine Überlegung war, dass, wenn in meiner Tabelle eine Datensatznummer hinterlegt ist, sollte ich diese doch auch ansprechen können. Nur wie? Aber wahrscheinlich ist das mit dem SQL-Dialekt des Borland Datenbank-Explorers nicht möglich. Oder aber ich brauche die richtige Bezeichnung des Datensatznummern-Feldes in einer Paradox-Tabelle.

Zitat:

Wenn Du die Datensätze sowieso einzeln bearbeiten willst (warum eigentlich?), bringt der Zugriff über SQL möglicherweise keine Vorteile.
Ich will aus einer Tabelle die Echtdaten wie Nachname, Vorname, Strasse etc durch Werte aus einer Dummy-Tabelle ersetzen. Damit alle Werte in der Echt-Tabelle mit Werten aus der Dummy-Tabelle überschrieben werden, will ich die Werte des Datensatzes 1 mit den Werten des Datensatzes 1 aus der Dummy-Tabelle überschreiben usw. Auf diese Weise sollten alle Echtwerte überschrieben werden.

mkinzler 15. Aug 2006 14:50

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
Gibt et außer der Position ein anderes Kriterium, wie du die Dummytabelle zuordnen kannst?

Barny 15. Aug 2006 14:57

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
An mkinzler

Ich habe leider kein anderes eindeutiges Kriterium gefunden.

WoGe 15. Aug 2006 15:46

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
Hallo,

Zitat:

Wenn ich meine Zieltabelle "UStAB100.db" mit der Borland Datenbankoberfläche öffne wird eine Spalte "USTAB100" angezeigt, die ich als Datensatznummer ansehe
Diese Spalte wird von Paradox - zusätzlich zur Verfügung gestellt. Sie ist nicht Bestandteil der Tabelle und ist deshalb nicht über einen Feldnamen in SQL ansprechbar.

mfg
wo

Jürgen Thomas 15. Aug 2006 16:14

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in
 
Zitat:

Zitat von WoGe
Diese Spalte wird von Paradox - zusätzlich zur Verfügung gestellt. Sie ist nicht Bestandteil der Tabelle und ist deshalb nicht über einen Feldnamen in SQL ansprechbar.

So ist es. Ich glaube zwar, bei Andreas Kosch (Delphi 2.0 Datenbankentwicklung) etwas über eine interne ID von Paradox-Tabellen gelesen zu haben; aber wahrscheinlich kommt man an diese wirklich nicht heran.

Zitat:

Zitat von Barny
Ich will aus einer Tabelle die Echtdaten wie Nachname, Vorname, Strasse etc durch Werte aus einer Dummy-Tabelle ersetzen. Damit alle Werte in der Echt-Tabelle mit Werten aus der Dummy-Tabelle überschrieben werden, will ich die Werte des Datensatzes 1 mit den Werten des Datensatzes 1 aus der Dummy-Tabelle überschreiben usw. Auf diese Weise sollten alle Echtwerte überschrieben werden.

Verstehe ich es richtig, dass die Zieltabelle nicht die Dummy-Tabelle ist? Wenn ja, dann schlage ich Folgendes vor:

1. Lies alle gewünschte Daten aus der Quelltabelle in eine Temp-Tabelle (je nachdem, welche Utilities Du sonst verwendest, z.B. eine in-Memory-Table).
2. Erweitere diese Tabelle um eine ID. Füge jedem Datensatz eine laufende Nummer als ID hinzu. Damit kannst Du einen Update-Befehl ähnlich Deinem ersten Versuch erledigen.

Alternative:
1. Alle Daten aus der Quelltabelle in die Zieltabelle kopieren.
2. Mit einer Programm-Prozedur kannst Du in einer Schleife (First/Next/EOF) ebenso eine ID simulieren und jeden Datensatz einzeln verknüpfen.

Zusatzvorschlag: Erzeuge mehrere Zufallszahlen RandomVorname, RandomNachname, RandomStrasse usw. Mit RandomVorname holst Du aus der Dummy-Tabelle einen zufälligen Vornamen usw. Damit kannst Du viel mehr Testdaten erzeugen, als Datensätze in der Arbeitsdatei und in der Dummy-Tabelle enthalten sind.

Vielleicht hilft Dir das. Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz