Ich habe zehn Master-Tabellen und eine Transaktionstabelle. In meiner Transaktionstabelle (es ist eine Speichertabelle wie ClientDataSet) gibt es zehn Nachschlagefelder, die auf meine zehn Haupttabellen zeigen.Schlüsselfeldwert nur zuweisen, wenn entsprechendes Suchergebnis vorhanden ist
Jetzt versuche ich Schlüsselfeldwerte dynamisch zu all meinen Suchschlüsselfeldwerten (der Transaktionstabelle) von einem anderen Server zuzuordnen (Daten kommen als soap xml). Vor der Zuweisung dieser Werte muss überprüft werden, ob der entsprechende Ergebniswert in den Master-Tabellen gültig ist oder nicht. Ich verwende einen Filter (zB status = 1), um zu prüfen, ob er gültig ist oder nicht.
Momentan ist es so, dass wir vor dem Zuweisen jedes Schlüsselfeldwerts die Master-Tabellen mit diesem Filter filtern und mithilfe der locate-Funktion prüfen, ob sie vorhanden ist oder nicht. und wenn sie lokalisiert sind, werden wir ihren Schlüsselfeldwert zuweisen.
Dies funktioniert gut, wenn nur wenige Datensätze in meinen Master-Tabellen vorhanden sind. Stellen Sie sich vor, dass meine Master-Tabellen jeweils fünfzigtausend Datensätze haben (ja, der Kunde hat so viele Daten), dies wird zu einem großen Leistungsproblem führen.
Könnten Sie mir bitte helfen, mit dieser Situation umzugehen.
Dank Basil
Ich sehe keine andere Option, wenn Sie Suchfelder verwenden, die auf einem DataSet basieren. Sie könnten die Datenbank direkt abfragen, anstatt sie in einem DataSet zu suchen. Der Suchwert könnte das Ergebnis einer JOIN-Abfrage sein. sehr schwer, dieses Q zu beantworten, weil ich nicht weiß, was die Verwendung der Transaktionstabelle (kann Sie hinzufügen/bearbeiten/löschen?). – kobik
Ja Benutzer kann die Transaktionstabelle bearbeiten. Es ist eine TDBISAMTable-Komponente. Genau wie TClientDataSet – iambasiljoy
Ich denke, dass Sie einige Testfälle mit Ihren verschiedenen Methoden ausführen müssen, um zu bestimmen, welche die beste Leistung basierend auf Ihrem Design bietet. Sie könnten versuchen, Abfragen für die Mastertabellen zu verwenden, indem Sie sie mit dem Schlüssel abfragen, und wenn query.recordcount> 0, dann existiert der Schlüssel und vergleichen Sie dies mit Ihrer Filter/locate-Methode. –