Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Anweundung mit MySQL Online/Offline (https://www.delphipraxis.net/89307-anweundung-mit-mysql-online-offline.html)

Mavarik 29. Mär 2007 08:31

Datenbank: MySQL • Version: 5.x • Zugriff über: SciBit Komponenten

Anweundung mit MySQL Online/Offline
 
Hallo Zusammen!

Ich konzipiere gerade einen neue Anwendung. Diese soll primär online auf einem MySQL Server arbeiten.

Meine Frage an Euch ist folgende:

Wenn der User kurzzeitig keinen Internet Zugang hat (DSL tot / Funkloch / wasauchimmer) soll er trotzdem
weiter Eingaben tätigen, die nachdem die Verbindung wieder steht, upgedatet werden sollen.

Wie würdet Ihr so etwas realisieren? Nach Möglichkeit sollte kein lokaler MySQL Server installiert werden müssen...

Grüsse Frank :gruebel:

uwewo 29. Mär 2007 08:35

Re: Anweundung mit MySQL Online/Offline
 
Du kannst ja lokal Text Dateien mit SQL Anweisungen schreiben, die bei Verbindung ausgeführt werden.

mkinzler 29. Mär 2007 08:41

Re: Anweundung mit MySQL Online/Offline
 
Lokal MySQL embedded verwenden

Mavarik 29. Mär 2007 08:41

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von uwewo
Du kannst ja lokal Text Dateien mit SQL Anweisungen schreiben, die bei Verbindung ausgeführt werden.

Ja? Ich möchte natürlich nicht extra alle Eingaben und Speicherroutinen für diesen Fall doppelt gestalten, sondern
eigentlich "einfach" nur die Datasource Komponente auf einen "anderen" Server umbiegen...

Frank

Mavarik 29. Mär 2007 08:42

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von mkinzler
Lokal MySQL embedded verwenden

Wie geht das? bzw. Geht das auch mit den SciBit Komponenten?

Frank :gruebel:

uwewo 29. Mär 2007 08:54

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von Mavarik
Ja? Ich möchte natürlich nicht extra alle Eingaben und Speicherroutinen für diesen Fall doppelt gestalten, sondern eigentlich "einfach" nur die Datasource Komponente auf einen "anderen" Server umbiegen...
Frank

Wenn keine Verbindung besteht, wie Du im ersten Posting gesagt hast willst Du die Daten lokal speichern. Ja was denn nun???

Steht dann ein anderer Server zur Verfügung im internen Netz???

Bernhard Geyer 29. Mär 2007 08:55

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von mkinzler
Lokal MySQL embedded verwenden

Lizenzbedingungen beachten, damit nicht u.U. für jede MySQL-Embedded eine Lizenz nötig wird!

Mavarik 29. Mär 2007 08:58

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von uwewo
Wenn keine Verbindung besteht, wie Du im ersten Posting gesagt hast willst Du die Daten lokal speichern. Ja was denn nun???

Steht dann ein anderer Server zur Verfügung im internen Netz???

OK Das kommt davon, wenn man zu kurz antwortet, sorry...

Ich meinte auf eine andere Server-Komponente, die dann Lokal speichern kann. In welchem Format auch immer...
Von mir aus auch XML oder XYZ... Die andere Server-Komponente sollte jedoch die "gleichen" Möglichkeiten bieten wie
der SQL Server. d.h. Speichern/Ändern/Suchen/Löschen...

Ein embedded MySQL wäre sicherlich ne feine Sache... Nur wie bringe ich das der Komponente bei?

Frank

Mavarik 29. Mär 2007 08:59

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von Bernhard Geyer
Lizenzbedingungen beachten, damit nicht u.U. für jede MySQL-Embedded eine Lizenz nötig wird!

Hallo Bernhard!

Hast Du da etwas mehr Infos?

mfg Frank

uwewo 29. Mär 2007 09:03

Re: Anweundung mit MySQL Online/Offline
 
Du verbindest dich derzeit doch sicher mit User, Passwort, Port, Host usw.
dann sollte es doch kein Problem sein diese Werte zu ändern.

Mavarik 29. Mär 2007 09:12

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von uwewo
Du verbindest dich derzeit doch sicher mit User, Passwort, Port, Host usw.
dann sollte es doch kein Problem sein diese Werte zu ändern.

OK so blöd bin ich nun auch nicht... :stupid:

Aber was soll ich da angeben?
Was brauche ich für embedded MySQL? Dll? Muss etwas Installiert werden?

Frank :coder:

uwewo 29. Mär 2007 09:16

Re: Anweundung mit MySQL Online/Offline
 
Das kann ich dir auch nicht sagen, leider!
Habe mit MySQL embedded noch nicht gearbeitet, aber sicher muss etwas installiert werden.

freak4fun 29. Mär 2007 09:37

Re: Anweundung mit MySQL Online/Offline
 
Ich hab mit den ZEOS-Komponenten recht gute Erfahrungen im Bereich MySQL-Embedded gemacht. :)

Edit:
Zitat:

Zitat von uwewo
Habe mit MySQL embedded noch nicht gearbeitet, aber sicher muss etwas installiert werden.


Nein, es muss nichts installiert werden. Du lieferst die DLL mit und noch ein paar andere Dateien (Bedarf natürlich etwas Speicherplatz.).


MfG
freak

franktron 29. Mär 2007 09:39

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von Mavarik
Zitat:

Zitat von uwewo
Du verbindest dich derzeit doch sicher mit User, Passwort, Port, Host usw.
dann sollte es doch kein Problem sein diese Werte zu ändern.

OK so blöd bin ich nun auch nicht... :stupid:

Aber was soll ich da angeben?
Was brauche ich für embedded MySQL? Dll? Muss etwas Installiert werden?

Frank :coder:

MySQL embedded ist nur eine DLL die in das Programmverzeichniss gelegt wird.

Noch zu embedded es gibt nur die Version 4 nicht 5.x wie bei MySQL und kann somit auch nicht diese Funktionen außerdem Kostet die embedded immer was man kann die nämlich nicht ohne Lizenskosten erwerben (es gibt keine Freie Version).

Zu deinem Problem warum speicherst du nicht wirklich alle SQL abfragen und Sendest die wenn du eine Verbindung hast.

freak4fun 29. Mär 2007 09:46

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von franktron
Noch zu embedded es gibt nur die Version 4 nicht 5.x wie bei MySQL und kann somit auch nicht diese Funktionen

Den ZEOS liegt eine 5.x-dll bei. Was macht die wohl?! :gruebel:

MfG
freak

franktron 29. Mär 2007 09:54

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von freak4fun
Zitat:

Zitat von franktron
Noch zu embedded es gibt nur die Version 4 nicht 5.x wie bei MySQL und kann somit auch nicht diese Funktionen

Den ZEOS liegt eine 5.x-dll bei. Was macht die wohl?! :gruebel:

MfG
freak

Du hast recht da werd ich wohl mit MySQL ein bischen reden müssen

Mavarik 29. Mär 2007 11:22

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von franktron
Noch zu embedded es gibt nur die Version 4 nicht 5.x wie bei MySQL und kann somit auch nicht diese Funktionen außerdem Kostet die embedded immer was man kann die nämlich nicht ohne Lizenskosten erwerben (es gibt keine Freie Version).

hmm das ist natürlich dann etwas blöde, wenn man das Programm last Shareware und payware verteilen möchte.

Zitat:

Zitat von franktron
Zu deinem Problem warum speicherst du nicht wirklich alle SQL abfragen und Sendest die wenn du eine Verbindung hast.

Weil meine DBEdit usw. so funktionieren soll, als wäre man online...

Frank :coder:

mkinzler 29. Mär 2007 11:50

Re: Anweundung mit MySQL Online/Offline
 
Bist du auf MySQL festgelegt?

Mavarik 29. Mär 2007 11:55

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von mkinzler
Bist du auf MySQL festgelegt?

hmm... Gute Frage... Würde sagen nein, vorausgesetzt das -wasauchimmer- verhält sich von der Syntax gleicht...

Hatte mal Firebird getestet, aber der kann ja nichtmal AutoINC Felder....


Frank :coder:

mkinzler 29. Mär 2007 12:03

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Hatte mal Firebird getestet, aber der kann ja nichtmal AutoINC Felder....
Doch nur halt anders.
Ich hätte dir FB vorgeschlagen. Für den gibt es auch einen embedded-(Server)-Client, alo ne Client-Bibliothek mit eingebauten Server.

Mavarik 29. Mär 2007 12:44

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von mkinzler
Doch nur halt anders.

Tja habe das mal gegoogled... Oje nix verstanden...
Zitat:

Zitat von mkinzler
Ich hätte dir FB vorgeschlagen. Für den gibt es auch einen embedded-(Server)-Client, alo ne Client-Bibliothek mit eingebauten Server.

hmm... Ok Muss ich mir dann nochmal ansehen...

Ach ja... hatte schonmal das Problem, dass Local und Remode sich da etwas gebissen haben, weil die Komponenten erst den localen genommen haben...

Frank :coder:

mkinzler 29. Mär 2007 12:53

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Ach ja... hatte schonmal das Problem, dass Local und Remode sich da etwas gebissen haben, weil die Komponenten erst den localen genommen haben...
Der lokale wird nur genommen wenn Host leer ist.
Zitat:

Tja habe das mal gegoogled... Oje nix verstanden...
Man deklariert einen Generator (eine Variable) für die Werte und sorgt mit einem Trigger oder durch Verwendung eine Sequenz-Komponente für dessen Erhöhung und Eintragen in den PK.

franktron 29. Mär 2007 12:54

Re: Anweundung mit MySQL Online/Offline
 
Also nimm doch ein MemTable das Arbeit im Speicher und gleich das dann immer mit der DB ab.
Werden eigentlich mehrere Client gleichzeitig auf die DB zugreifen ?

uwi1961 29. Mär 2007 14:48

Re: Anweundung mit MySQL Online/Offline
 
Hi,

Schau dir mal die neueste Version der MYDAC-Componenten an... klingt sehr interessant.
Hab ich gestern geordert und probier heut abend gleich!

Gruß Uwe

Zitat:

Disconnected Model with automatic connection control for working with data offline
Local Failover for detecting connection loss and implicitly reexecuting certain operations
Der Link dazu: http://crlab.com/mydac/

Mavarik 29. Mär 2007 14:52

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von mkinzler
Man deklariert einen Generator (eine Variable) für die Werte und sorgt mit einem Trigger oder durch Verwendung eine Sequenz-Komponente für dessen Erhöhung und Eintragen in den PK.

lol ja ganau sowas hat da gestanden....

Haste das mal in Delphi?

Frank

PS.: @uwi1961 klingt interessant!

mkinzler 29. Mär 2007 14:59

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Haste das mal in Delphi?
Nicht in Delphi, das Deklariert man in der Datenbank. In Admintools wie z.B. IBExpert kann man das auch einfach automatisieren.

P.S. Die Komponenten von CoreLabs sind echt spitze! (Verwende die InterBase/FireBird-Variante)

Jelly 30. Mär 2007 06:57

Re: Anweundung mit MySQL Online/Offline
 
Mavarik,

hast Du dir schon mal Gedanken darüber gemacht, wie du nachher deine 2 Datenbanken synchron halten willst ? Was bringt es dir lokal zu arbeiten, wenn der Online Server nicht erreichbar ist, und du deine lokalen Änderungen nicht in die Online Datenbank kriegst.

Mavarik 30. Mär 2007 07:01

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von Jelly
Mavarik,

hast Du dir schon mal Gedanken darüber gemacht...

Ja, danke für den Hinweis, aber das ist bei dieser Anwendung kein Problem...

Frank :coder:

Mavarik 30. Mär 2007 07:32

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von mkinzler
Nicht in Delphi, das Deklariert man in der Datenbank. In Admintools wie z.B. IBExpert kann man das auch einfach automatisieren.

Also in der Firebird Anleitung habe ich folgendes gefunden:

Zitat:

Zitat von Firebird
SQL:
Delphi-Quellcode:
CREATE TRIGGER trgTTEST_BI_V1 for TTEST
active before insert position 0
as
begin
  new.id = gen_id( gidTest, 1 );
end
Das Grundproblem mit IDs, die in Before-Insert-Triggern zugewiesen werden, ist, dass sie die IDs serverseitig erzeugen, nachdem man den Insert-Befehl zum Server geschickt hat. Das heißt schlicht und ergreifend, dass es keinen sicheren Weg gibt, von der Client-Seite aus zu erfahren, welche ID für den gerade erzeugten Satz vergeben wurde.

Wie erzeugen ich den dann ein "SELECT LAST_INSERT_ID()"

Frank :coder:

mkinzler 30. Mär 2007 07:42

Re: Anweundung mit MySQL Online/Offline
 
Die Möglichkeit mit dem Trigger ist nur ein Weg, man kann das auch per SP oder mit einer Sequenz-Komponente machen.
Oder du läßst dir die ID beim Insert zurückgeben:
SQL-Code:
insert into <Tabelle> <Spalten ohne PK> values ( <´Werte>) returning <PK>;
[Edit: Statement vergessen]

Mavarik 30. Mär 2007 09:00

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

Zitat von mkinzler
Die Möglichkeit mit dem Trigger ist nur ein Weg, man kann das auch per SP oder mit einer Sequenz-Komponente machen.
Oder du läßst dir die ID beim Insert zurückgeben:
SQL-Code:
insert into <Tabelle> <Spalten ohne PK> values ( <´Werte>) returning <PK>;

SP = StoredProcedure?

<PK> = ID? Dann mit dem Trigger?

Muß ich die SQL Befehle für den Trigger Immer vorher machen oder "merk" sich das die Datenbank, wenn ich den einmal erzeugt habe?

Frank :coder:

mkinzler 30. Mär 2007 09:52

Re: Anweundung mit MySQL Online/Offline
 
Zitat:

SP = StoredProcedure?
Ja

Zitat:

<PK> = ID? Dann mit dem Trigger?
Der Trigger wird ja automatisch aufgerufen.

Zitat:

Muß ich die SQL Befehle für den Trigger Immer vorher machen oder "merk" sich das die Datenbank, wenn ich den einmal erzeugt habe?
ditto, der Trigger wird automatisch aufgerufen.

IBExpert 3. Apr 2007 14:28

Re: Anweundung mit MySQL Online/Offline
 
bei fb2 hat sich mit Autoinc einiges getan, insbesondere durch returning
hier mal kurz zitiert von
http://www.rrze.uni-erlangen.de/hilf...bird-faq.shtml

Gruß
Holger
www.ibexpert.com

see you in paderborn :-)

-------------------------------------------
Autoincrement Felder in Firebird

In Datenbank-Tabellen ist regelmäßig ein eindeutiger Wert in einer Spalte (Primary Key) gewünscht. In einigen Datenbanken gibt es dazu ein Felddatentyp AutoInc oder ähnlich. Firebird und der SQL-Standard sehen zu Generatoren bzw Sequenzen vor.

Hier die nötigen Schritte in Firebird bis Version 1.5 (wird in neueren Versionen vmtl. auch funktionieren)

-- Generator mit Namen GEN_XYZ anlegen
CREATE GENERATOR GEN_XYZ;

-- Wert des Generators setzen
-- ACHTUNG: Nur zum Initialisieren!
SET GENERATOR GEN_XYZ TO 5;

-- Generator-Wert erhöhen um 1 und auslesen
select gen_id(GEN_XYZ,1) from RDB$DATABASE;

-- INSERT in Tabelle TBL_XYZ mit eindeutigem Generator-Wert in der Spalte "Id"
INSERT INTO TBL_XYZ ("Id") VALUES (gen_id(GEN_XYZ,1));

Der zweite Parameter der Funktion GEN_ID kann einen bel. Wert annehmen. Insbesondere kann man mit 0 einen Generator-Wert auslesen, ohne ihn zu verändern und mit -1 auch vermindern.

Ab Firebird 2.0 kann man das Problem noch eleganter lösen:

-- INSERT in Tabelle TBL_XYZ mit eindeutigem Generator-Wert in der Spalte "Id"
INSERT INTO TBL_XYZ ("Name") VALUES ('bla') RETURNING "Id";


Bei RETURNING können mehere Feldnamen der Tabelle angegeben werden, in die ein Datensatz eingefügt wurde. Die Felder müssen nicht über INSERT eingefügt werden, sondern können z.B. auch aus DEFAULT-Werten oder Ergebnissen von TRIGGERN stammen.
-------------------------------------------

mkinzler 3. Apr 2007 14:30

Re: Anweundung mit MySQL Online/Offline
 
http://www.delphipraxis.net/internal...=701826#701826

Mavarik 4. Apr 2007 09:01

Re: Anweundung mit MySQL Online/Offline
 
Danke an alle!

Tutorial

Frank :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 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