Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Datentransfer von mehreren Clients an einen Server über LAN (https://www.delphipraxis.net/129452-datentransfer-von-mehreren-clients-einen-server-ueber-lan.html)

mkinzler 20. Feb 2009 10:09

Re: Datentransfer von mehreren Clients an einen Server über
 
Es wäre beim Inline-Aufruf der Genaratorfunktion sinnvoll sich den vergebenen Wert zurückliefern zu lassen:
SQL-Code:
insert into Testtabelle (PK_Feld, Feld1, Feld2) values (GEN_ID(Generatorname, 1), 'Wert', 'Wert) returning PK_Feld;

mquadrat 20. Feb 2009 10:12

Re: Datentransfer von mehreren Clients an einen Server über
 
Und wieder was gelernt. Der Vorteil von Generatoren liegt für mich vor allem darin, dass ich mir schon die ID eines Datensatzes holen kann, bevor er überhaupt gespeichert ist. Daher hab ich den PK beim insert schon. Aber gut zu wissen, was man theoretisch machen könnte ;)

Tempdir 20. Feb 2009 10:23

Re: Datentransfer von mehreren Clients an einen Server über
 
Danke für die ganzen, sehr brauchbaren Tipps von euch!

Leider hakt es etwas: Ich mache gerade alles über die iSQL-Konsole von Firebird:

Ein Create klappt super:

Delphi-Quellcode:
SQL>CREATE DATABASE 'C:\test.fdb' page_size 8192↵
CON>user 'SYSDBA' password 'masterkey';↵
Doch dann versuche ich z.B. ein:

Delphi-Quellcode:
SQL>SELECT * FROM test;↵
und bekomme ein SQL-Error -204. Ich hab mich mit einem

Delphi-Quellcode:
CONNECT C:\test.fdb user SYSDBA password masterkey;↵
auch nochmals mit der DB verbunden, aber weder ein INSERT noch ein SELECT klappen.

mquadrat 20. Feb 2009 10:25

Re: Datentransfer von mehreren Clients an einen Server über
 
Du hast doch nur ne Datenbank erstellt und noch keine Tabelle?! Oder hast du das create table Statement einfach nur nicht in den Beitrag geschrieben?

Tempdir 20. Feb 2009 10:26

Re: Datentransfer von mehreren Clients an einen Server über
 
:oops: SORRY richtig !

Jetzt klappt alles einwandfrei :) Was ich nur etwas doof finde ist, dass man bei jedem INSERT den "Generator" mitgeben muss:

Delphi-Quellcode:
INSERT INTO test (field1, field2) VALUES (gen_id(gen_test_id, 1), 'testme');
Delphi-Quellcode:
Also ein reines INSERT INTO test (field2) VALUES ('hallo');
geht leider nicht.

Tempdir 20. Feb 2009 11:57

Re: Datentransfer von mehreren Clients an einen Server über
 
Also ich hab noch Probleme bei der Dauer des Verbindungsaufbaus:

Hab mir ein kleines Programm geschrieben, dass sich abwechselnd entweder mit dem Localhost-SQL-Server oder einem im Netzwerk vorhandenen SQL-Server verbindet.
Meine komponente ist die IBDatabase und so sieht die Schleife aus:

Delphi-Quellcode:
  for i:= 0 to 5 do begin
    IBDatabase1.Connected := FALSE;
    IBDatabase1.DatabaseName := '192.168.173.46:C:/TEST.FDB';
    IBDatabase1.Connected := TRUE;

    IBDatabase1.Connected := FALSE;
    IBDatabase1.DatabaseName := '127.0.0.1:C:/TEST.FDB';
    IBDatabase1.Connected := TRUE;

  end;
Zum localhost connected er sehr schnell, aber zumn Netzwerk-PC dauerts 1-2 Sekunden. Ping zu dem Netzwerkrechner ist <1ms.

mquadrat 20. Feb 2009 13:32

Re: Datentransfer von mehreren Clients an einen Server über
 
Zum Insert: Schau dir mal den Link an, den ich gepostet hat. Mittels eines Triggers kann man auch deine Wunschsyntax verwenden.

Benutzt du lokal und auf dem Server die gleiche Firebird-Version?

Tempdir 20. Feb 2009 14:13

Re: Datentransfer von mehreren Clients an einen Server über
 
Danke @ Insert.

Sind 100% gleich die Firebird-Versionen.

Was mir aufgefallen ist: Bei oben genannter Schleife geht die CPU-Last des Netzwerk-Clients auf ca. 70%-80% hoch. Es ist zwar nur ein 300MHz Celeron, aber trotzdem etwas heftig wie ich finde - also für einen einfachen Connect. Das ist ein ziemlich großes Problem da es womöglich ein KO-Kriterium für mein Vorhaben darstellt :(

*edit* ich hab den Classic-Server installiert

mquadrat 20. Feb 2009 14:20

Re: Datentransfer von mehreren Clients an einen Server über
 
Was das Verbinden angeht isses egal ob Classic oder Superserver.

1-2 Sekunden sind zwar ungewöhnlich lang, aber solange die Queries schnell durchlaufen, dürfte das doch eigentlich kein KO Kriterium sein. Du kannst die Verbindung ja halten und nur neu aufbauen, falls sie abbricht.

Wieviele Clients hängen denn da dran, wenn das so ein Problem ist? Wenn du auf nem 300Mhz System testest wo wird das denn eingesetzt? Industrie-PC in der Fertigung?

Tempdir 20. Feb 2009 16:17

Re: Datentransfer von mehreren Clients an einen Server über
 
Richtig! Es ist ein Industrie-PC der gleichzeitig eine Maschine steuert. Ich rechne mal so mit ca. 10 Clients. Wieviele es genau werden kann ich nicht exakt sagen.

Meine Lösung wär ja gewesen mit einer IB-Komponente abwechselnd zu den Clients zu connecten und dann je Client ein paar Datensätze abholen.
Ich könnte auch zu allen Clients gleichzeitig connecten und die Daten dann von jedem ständig abholen. Aber dann bräuchte ich mehrere IB-Komponenten und z.B. Threads. Oder gibt es da klügere Lösungen?

Wie gesagt, bisher läuft das ganze über TCP/IP mit TidTCPServer/-Client Komponenten und Threads. Wir haben auch darüber nachgedacht das ganze über UDP usw. zu machen, allerdings denke ich wäre es mit SQL am einfachsten zu realisieren - wenn es da nicht was gibt was ich nicht beachtet habe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Seite 4 von 4   « Erste     234   

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