AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie lautet die Datensatznummer einer Paradox-Tabelle in SQL?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie lautet die Datensatznummer einer Paradox-Tabelle in SQL?

Ein Thema von Barny · begonnen am 14. Aug 2006 · letzter Beitrag vom 21. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Barny

Registriert seit: 14. Okt 2004
Ort: 74613 Öhringen
8 Beiträge
 
Delphi 10.3 Rio
 
#1

Wie lautet die Datensatznummer einer Paradox-Tabelle in SQL?

  Alt 14. Aug 2006, 16:50
Datenbank: Paradox • Version: 7 • Zugriff über: 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?
Es gibt viel zu verbessern, aber im Grunde genommen kann man zufrieden sein.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 14. Aug 2006, 16:52
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 14. Aug 2006, 17:59
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 14. Aug 2006, 18:12
Hallo Barny,

jetzt versuche ich mich auch nochmal...

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
  Mit Zitat antworten Zitat
Barny

Registriert seit: 14. Okt 2004
Ort: 74613 Öhringen
8 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 15. Aug 2006, 15:28
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.
Es gibt viel zu verbessern, aber im Grunde genommen kann man zufrieden sein.
  Mit Zitat antworten Zitat
Barny

Registriert seit: 14. Okt 2004
Ort: 74613 Öhringen
8 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 15. Aug 2006, 15:46
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.
Es gibt viel zu verbessern, aber im Grunde genommen kann man zufrieden sein.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 15. Aug 2006, 15:50
Gibt et außer der Position ein anderes Kriterium, wie du die Dummytabelle zuordnen kannst?
Markus Kinzler
  Mit Zitat antworten Zitat
Barny

Registriert seit: 14. Okt 2004
Ort: 74613 Öhringen
8 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 15. Aug 2006, 15:57
An mkinzler

Ich habe leider kein anderes eindeutiges Kriterium gefunden.
Es gibt viel zu verbessern, aber im Grunde genommen kann man zufrieden sein.
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 15. Aug 2006, 16:46
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
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#10

Re: Wie lautet die Datensatznummer einer Paradox-Tabelle in

  Alt 15. Aug 2006, 17:14
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 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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:25 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