MySQL Lösungen
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
MySQL Lösungen
Hi,
Ich bin in SQL nicht der firmste. Nun soll der Netmonitor mal die ersten kleinen Schritte in Richtung SQL machen.
Dabei soll die interne dbf Tabelle mit der auf nem SQL Server abgeglichen werden. Das ganze passiert über einen Timestamp. Nun kann es aber sein das Datensätze schon vorhaden sind und nur mit zusätzlichen Daten ergänzt oder geändert wurden... Wie macht man sowas am besten ? Gibt es sowas wie nen merge Befehl ?
Ich bin in SQL nicht der firmste. Nun soll der Netmonitor mal die ersten kleinen Schritte in Richtung SQL machen.
Dabei soll die interne dbf Tabelle mit der auf nem SQL Server abgeglichen werden. Das ganze passiert über einen Timestamp. Nun kann es aber sein das Datensätze schon vorhaden sind und nur mit zusätzlichen Daten ergänzt oder geändert wurden... Wie macht man sowas am besten ? Gibt es sowas wie nen merge Befehl ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
MySQL sieht hierfür REPLACE vor.
http://dev.mysql.com/doc/refman/5.0/en/replace.html" onclick="window.open(this.href);return false;
http://dev.mysql.com/doc/refman/5.0/en/replace.html" onclick="window.open(this.href);return false;
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
REPLACE ist meines Wissens kein Standard. Und ein MERGE gibt es erst im SQL-Standard 2003 der aber ja von keiner Datenbank voll unterstützt wird.
Daher bin ich auch für Select und Update, das funktioniert mit jeder SQL-Datenbank und nicht nur mit MySQL. Wenn dir das natürlich egal ist soricht nichts gegen Replace.
Daher bin ich auch für Select und Update, das funktioniert mit jeder SQL-Datenbank und nicht nur mit MySQL. Wenn dir das natürlich egal ist soricht nichts gegen Replace.
Johannes
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Wenn es sehr kompatibel sein soll, dann SQL 92 Standard, das kann fast jede DB mittlerweile und somit am einfachsten mit dem SELECT/INSERT/UPDATE Gespann, wie bereits vorgeschlagen. Da kannst Du auch noch prüfen, ob sich an den Werten was geändert hat, oder nicht.
Das wichtigste ist das Grunddesign. Kniffelig wird es erst wenn mehrere Clients auf die DB können und zugleich was updaten sollen/können. Dort MUSS man dann das SELECT/INSERT/UPDATE als atomare Aktion vorsehen (Transaktionen).
Das wichtigste ist das Grunddesign. Kniffelig wird es erst wenn mehrere Clients auf die DB können und zugleich was updaten sollen/können. Dort MUSS man dann das SELECT/INSERT/UPDATE als atomare Aktion vorsehen (Transaktionen).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Naja erstmal häng ich vorher ich will eine Abfrage ob die tabellen erstellt werden sollen wenn Sie nicht existieren. Ich dacht mir ich machs so:
Tables := TStringlist.Create;
SQLConnection.Transaction := SQLTransaction;
SQLConnection.GetTableNames(Tables);
Nur bekomm ich dabei die Fehlermeldung das keine Metadaten zu dieser Datenbankart existieren würden. Wie kann ioch das am besten lösen ?
CREATE IF NET EXISTS wollte ich bewusst vermeiden weil ich die Abfrage haben will...
Tables := TStringlist.Create;
SQLConnection.Transaction := SQLTransaction;
SQLConnection.GetTableNames(Tables);
Nur bekomm ich dabei die Fehlermeldung das keine Metadaten zu dieser Datenbankart existieren würden. Wie kann ioch das am besten lösen ?
CREATE IF NET EXISTS wollte ich bewusst vermeiden weil ich die Abfrage haben will...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Vorschlag:
*) Prüfe ob du dich überhaupt auf die DB verbinden kannst.
*) Mache dann ein Select auf die Tabelle mit einer 'whereklausel' die keine Daten (oder wenige) liefert, aber du kannst sehen ob es einen Fehler gibt.
Frage:
Spezialisierst du dich auf eine DB oder willst du mehrere DB unterstützen ?
*) Prüfe ob du dich überhaupt auf die DB verbinden kannst.
*) Mache dann ein Select auf die Tabelle mit einer 'whereklausel' die keine Daten (oder wenige) liefert, aber du kannst sehen ob es einen Fehler gibt.
Frage:
Spezialisierst du dich auf eine DB oder willst du mehrere DB unterstützen ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Dann mach eine Geschäftslogik in der Mitte und lass die die exception schmeissen (ausserhalb des aktuellen Debuggers). Hat den Vorteil, das du dann dort die spezifikas des DBs hineinpackst.
Oder sag dem Debugger ganz einfach, das er die Exception ignorieren soll.
Oder sag dem Debugger ganz einfach, das er die Exception ignorieren soll.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
ApplyUpdates (Nach dem Insert's) auch aufgerufen?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).