AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken 2. Dataset in dem Daten aus 1. Dataset ausgeschlossen sind (not in)
Thema durchsuchen
Ansicht
Themen-Optionen

2. Dataset in dem Daten aus 1. Dataset ausgeschlossen sind (not in)

Ein Thema von norwegen60 · begonnen am 15. Nov 2016 · letzter Beitrag vom 16. Nov 2016
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#1

AW: 2. Dataset in dem Daten aus 1. Dataset ausgeschlossen sind (not in)

  Alt 15. Nov 2016, 06:56
Wie wäre es mit einem kleinen Umweg (ungetestet)?
Delphi-Quellcode:
Liste := TStringList.Create;
try
  UniQuery1.SQL.Text := 'SELECT ID FROM Tabelle';
  UniQuery1.Open;
  Feld := UniQuery1.FieldByName('ID');
  while not UniQuery1.Eof do
    begin
      Liste.Add(Feld.AsString);
      UniQuery1.Next;
    end;
  UniQuery1.Close;
  if Liste.Count > 0 then
    begin
      UniQuery2.SQL.Text := Format('SELECT * FROM Tabelle WHERE ID NOT IN(%s)',[Liste.CommaText]);
      UniQuery2.Open;
    end;
finally
  Liste.Free;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
529 Beiträge
 
Delphi 12 Athens
 
#2

AW: 2. Dataset in dem Daten aus 1. Dataset ausgeschlossen sind (not in)

  Alt 15. Nov 2016, 16:10
Wie wäre es mit einem kleinen Umweg (ungetestet)?
Es hat geklappt damit die Werte in die NOT IN Abfrage zu bekommen. Die Laufzeit der Abfrage lag dann aber im Minutenbereich => nicht praktikabel
Ich hatte bewusst verschwiegen dass es sich um ca. 1 Mio Daten handelt (nur drei Felder). Ich hatte den Aufschrei vermeiden wollen.
Es ging und geht mir aber auch um die Technik selber.

Ob es so etwas bei UniDac auch gibt, weiß ich nicht. Es wäre allerdings enttäuschend und für uns ein NoGo, wenn nicht. Dazu müsste aber jemand anderes etwas sagen, der UniDac benutzt. Da gibt es ja im Forum einige, die das gegenüber FireDAC (was wir benutzen) in den Himmel loben. Wo seid ihr?
Wie würde die Abfrage in FireDac denn aussehen? Einfach UniQuery2.SQL.Text := 'Select * from Table where ID NOT IN (select ID from UniQuery1)' kann es ja nicht sein. Woher soll das SQL UniQuery1 kennen? Letztlich wird aber das Zeitverhalten ähnlich wie zuvor sein.

Einen solchen Zeitstempel kann ich unabhängig von der Datenquelle (Stichwort Replikation) mit einem Trigger erzeugen und der Zieltabelle mitgeben.
Wie soll das gehen? Die Tabelle hat einen Zeitstempel. Da der aber vom Server abhängig ist kann es zu Zeitversätzen kommen.

Ich weiß, ist keine wirkliche Hilfe in diesem Fall, aber in Interbase würde man das mit Change Views lösen. Die werden auch von FireDAC direkt unterstützt.
Da muss ich noch mal schauen ob es sowas bei UniDac gibt. Als ich es vor Jahren mal angefragt hatte, ging es nicht

Danke für die Feedbacks, auch wenn ich noch nicht die richtige Lösung habe.
Vielleicht bleib ich doch dabei, dass ich mir im zweiten Query alle Daten älter 24h lade und dann Satz für Satz vergleiche. Ich hatte gehofft es gibt einen besseren Weg.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#3

AW: 2. Dataset in dem Daten aus 1. Dataset ausgeschlossen sind (not in)

  Alt 15. Nov 2016, 16:17
Wie würde die Abfrage in FireDac denn aussehen? Einfach UniQuery2.SQL.Text := 'Select * from Table where ID NOT IN (select ID from UniQuery1)' kann es ja nicht sein. Woher soll das SQL UniQuery1 kennen?
Doch, genau so, wenn Table die eine Tabelle auf deinem Datenmodul ist und UniQuery1 die andere. Die SQL Abfrage passiert dann lokal in deiner Anwendung, nicht im SQL Server.
Wir verwenden das zum Beispiel um aus XML-Datenquellen im Speicher Tabellen zusammenzubauen und diese dann an FastReport zu füttern. So kann man beliebige SQL Abfragen aus diesen Speichertabellen konfigurieren, per Tabelle oder mit freier SQL-Syntax, und diese in Reporten auswerten...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
529 Beiträge
 
Delphi 12 Athens
 
#4

AW: 2. Dataset in dem Daten aus 1. Dataset ausgeschlossen sind (not in)

  Alt 16. Nov 2016, 08:17
Doch, genau so, ...
Das wollte ich jetzt doch genau wissen und habe folgendes probiert:
Delphi-Quellcode:
  if not UniQuery1.Active then UniQuery1.Open;
  if UniQuery3.Active then UniQuery3.Close;
  UniQuery3.SQL.Text := 'select top(100) * from UniQuery1';
  UniQuery3.Open;
UniQuery1 wird geöffnet aber bei UniQuery3.open kommt die Meldung
Code:
Ungültiger Objektname 'UniQuery1'
Jetzt auch von mir die Anfrage
...Dazu müsste aber jemand anderes etwas sagen, der UniDac benutzt. Da gibt es ja im Forum einige, die das gegenüber FireDAC (was wir benutzen) in den Himmel loben. Wo seid ihr?
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:16 Uhr.
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