AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken uniDAC 2 Datenbanken Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

uniDAC 2 Datenbanken Abfrage

Ein Thema von Devil1925 · begonnen am 21. Jul 2016 · letzter Beitrag vom 21. Jul 2016
Antwort Antwort
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#1

uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 15:59
Datenbank: MSSQL / SQLITE • Version: -- • Zugriff über: uniDAC 6.3.13
Hallo, ich habe folgende Problematik und bin mir derzeit noch unsicher wie ich da ran gehen sollte:

Ich habe 2 Datenbanken, einmal eine MSSQL Datenbank und einmal eine SQLITE Datenbank. Hier kommt es nun vor, dass auf beiden Seiten Änderungen an den Daten vorgenommen werden.
Hierzu möchte ich auf der MSSQL - Datenbank alle Datensätze selektieren, welche hier ein Changed_Last haben, welches nach meinem LastTransfer - Datum liegt sowie alle Datensätze, welche auf der SQLITE Datenbank ein Changed_Last nach dem LastTransfer Datum haben. Wie bekomme ich jetzt diese Abfrage hin? ist es irgendwie möglich die Datenmenge einer UniQuery als Parameter an eine andere UniQuery zu übergeben oder was tue ich da am sinnvollsten?
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#2

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 16:07
MSSQL sollte auch sowas wie Database-Links können, zu einer anderen MSSQL-DB oder gar einem fremden DBMS,
also wo du dann in MSSQL eine "virtuelle" Tabelle hast, mit den Daten aus der SQLITE.
Oder wo man zumindestens sowas wie ein "externes SELECT" innerhalb der einen DB auf einer anderen DB ausführen lassen kann und das Result zurück bekommt.
Und da kannst du dann ganz billig beide Tabellen JOINen und sonstwas mit denen anstellen.

Ansonsten kann man natürlich immer zwei Queries im Programm aufmachen und da z.B. mit LOCATE manuell rumsuchen.

Von einer MSSQL-DB zu einer Anderen ginge sowas select * from [serverlink].[database].[schema].[table] (Irgendein Blog)
und für fremde DBMS wird man eventuell noch einen Wrapper dazischen schalten müssen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (21. Jul 2016 um 16:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 16:14
Ich habe halt die Thematik, das die SQLITE Datenbank lokal auf einem Tablet liegt und ich eine Abfrage an den MSSQL-Server sende. Von diesen Tablets kann es Beliebig viele geben. Da hilft mir soweit ich weiss kein Database-Link, da ich das Ganze von der Geräteseite aus betrachte.
Oder habe ich da jetzt falsch gedacht?
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#4

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 16:18
Hmmm, dann müsste der Link wohl in die SQLITE, aber k.A. ob die sowas kann.

In PostgreSQL kann man sowas per SQL zur Laufzeit definieren, aber auch da bräuchte man natürlich von "außen" Zugriff auf die DB, also z.B. die SQLITE, wenn es vom MSSQL ausgehen würde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (21. Jul 2016 um 16:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 16:45
MSSQL bietet eine Datentyp RowVersion an, der für jeden Tabelleneintrag eindeutig ist (innerhalb der Datenbank).

Beim Abgleich fragst du also einfach alle Tabellen ab wo die RowVersion größer ist als der letzte Abgleich ergeben hat. Die höchste RowVersion merkst du dir nach dem Abgleich.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 16:52
Mein hauptproblem ist derzeit, dass ich die beiden Datenbanken irgendwie in einer Abfrage unter einen Hut bekommen muss. Welche seid dem Letzten mal aktualisiert wurden erkenne ich an dem Feld "Changed_Last", welches ich mit dem Datum des Letzten Datenabgleichs vergleiche. Das Funktioniert Prima, allerdings muss ich jetzt irgendwie eine Abfrage machen, welche über beide Datenbanken die Tabellen abfragen kann, wo die Daten geändert wurden. Sowohl in der MSSQL als auch in der SQLITE Datenbank.
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 16:55
Hmmm, n Tabellen in einer Abfrage ist schon schwierig.

Du willst also in beide Richtungen abgleichen?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#8

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 17:15
Hab es so verstanden: SELECT auf beide Tabellen und jeweils nur das Größere, von zusammenhängenden Datensätzen (gleiche ID, oder so)

Halt entweder Clientseitig, meist manuell beide SELECTs und dann z.B. in einer MemoryTable zusammenmischen
oder per DatabaseLink, wo man das per JOIN/UNION so zusammenhauen kann, als wären beide Tabellen in einer DB drin.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: uniDAC 2 Datenbanken Abfrage

  Alt 21. Jul 2016, 19:52
Hmmm, wenn ich weiß welche Datensätze auf dem Server geändert wurden (über den quasi Timestamp Wert) dann eine Abfrage auf dem Server und diese Datensätze im Client eintragen.

Mit einer Query und Parametern läuft man durch das Dataset vom Server und ruft nur noch ExecSQL auf der Query für die lokale Datenbank auf.

Etwas aufwändiger wird es wenn man in beide Richtungen synchronisieren will. Dann muss man Änderungen am Server und lokal erkennen und entscheiden was passieren soll wenn Änderungen auf beiden Seiten vorhanden sind.

Auf der lokalen Datenbank benötigt man dann Felder wie
- Id (lokal) NOT NULL
- Version (lokal) (z.B. ein Timestamp) NULL
- RemoteId NULL
- RemoteVersion NULL
um diese Fälle zu ermitteln.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 21:21 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