![]() |
Datenbank: SQLServer • Version: 2014 • Zugriff über: AnyDAC
GUID Feld von MSSQL nach Oracle und zurück
Hallo zusammen...
Ich habe auf einem zentalen MSSQL Server Tabellen mit GUIDs als Primary Key (Feldtyp uniqueidentifiery) Diese muss ich auf mehrer Oracle Clients (Oracle 11g) übertragen (Feldtype RAW(16) wie bekomme ich das hin ? qTargetQuery.FieldByName('GUID').AsString := qSourceData.FieldByName('GUID').AsString; funktioniert nicht das der SQLServer z.B. {C87FC84A-EE47-47EE-842C-29E969AC5131} zurück liefert Danke für jeden Hinweis |
AW: GUID Feld von MSSQL nach Oracle und zurück
Da musst du mal in die Dokumentation schauen, wie so eine GUID aussieht
![]()
Delphi-Quellcode:
Dazu gibt es noch
TGUID = packed record
D1: Cardinal; // 4 Bytes D2: Word; // 2 Bytes D3: Word; // 2 Bytes D4: array[0..7] of Byte; // 8 Bytes class operator Equal(const Left, Right: TGUID): Boolean; class operator NotEqual(const Left, Right: TGUID): Boolean; class function Empty: TGUID; static; class function Create(const Data; BigEndian: Boolean = False): TGUID; overload; static; class function Create(const Data: array of Byte; AStartIndex: Cardinal; BigEndian: Boolean = False): TGUID; overload; static; end; ![]()
Delphi-Quellcode:
herauskommt (16 Bytes?) dann kann man aus dem Record direkt eine Bytefolge erstellen.
SizeOf(TGUID)
|
AW: GUID Feld von MSSQL nach Oracle und zurück
Danke für die Antwort.
Habe noch ein Problem. Wie bringe ich ein TADQuery bei OnNewRecord dazu den in der DB eingestellten Defaultwert für ein Feld zu nutzen Habe ein ID Feld in Oracle RAW(16) not null default SYS_GUID() bzw. in SQLSERVER uniqueidentifier not null default NEWID() Bei Append oder Insert wird diese Default Funktion nicht ausgeführt, dann beim Post Fehler "Feld muss einen Wert haben" Danke für einen Tip |
AW: GUID Feld von MSSQL nach Oracle und zurück
Zitat:
Zitat:
Zitat:
|
AW: GUID Feld von MSSQL nach Oracle und zurück
Zitat:
|
AW: GUID Feld von MSSQL nach Oracle und zurück
Zitat:
Die Frage ging aber gerade darum, innerhalb des Clients den Default-Wert des Servers bei Anlegen eines neuen Datensatzes zu verwenden. Das mag notwendig sein, wenn dieser Wert noch vor dem Post gebraucht wird (z.B. für ein Calculated Field). Ich sehe nur bislang keine Möglichkeit, per FireDAC diesen Default-Wert vom Server (halbwegs automatisch) zu erfahren. Wenn ich aber sowieso immer schon im Client den Default-Wert einsetze (der muss dann natürlich dort geflegt werden), brauche ich das Default im Server gar nicht erst einzurichten. |
AW: GUID Feld von MSSQL nach Oracle und zurück
Zitat:
|
AW: GUID Feld von MSSQL nach Oracle und zurück
Das war auch meine Absicht. Um halbwegs sequentielle GUIDs zu haben, nehme ich auf SQLServer Seite NEWSEQUENTIALID(), dies funktioniert aber nur als Defaultwert beim Server.
Die Anwendung greift "online" auf den SQL Server zu, legt dort Daten an welche dann auf den lokalen Rechner (mit Oracle XE) repliziert werden. Im "offline" Modus können lokal auch Daten angelegt werden, die dann wieder mit dem SQL Server synchronisiert werden. GUIDs als Schlüssel auf beiden Seiten. Da die Anzahl der lokalen Clients (mit Oracle) vorher nicht bekannt ist, ist das Verwalten von verschiedenen Nummernkreisen doch recht aufwendig. Hierbei muss ich aber die erzeugten Defaultwerte ( RAW(16) auf Oracle) (uniqueidentifier auf SQLSERVER) auslesen und als Verlinkung in andere Tabellen eintragen. Wie greif ich hier nochmal die Daten ab ? DataSet.FieldByName('GUID').as ??? |
AW: GUID Feld von MSSQL nach Oracle und zurück
Warum verschiedene DBMS? Ich würde zur einfacheren Replikation lokal und remote das selbe System einsetzen.
|
AW: GUID Feld von MSSQL nach Oracle und zurück
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 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 by Thomas Breitkreuz