Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird in Netzwerk (https://www.delphipraxis.net/138837-firebird-netzwerk.html)

clock50 18. Aug 2009 11:31

Datenbank: Firebird • Version: 2.0 • Zugriff über: IB

Firebird in Netzwerk
 
Ich kann mich über Netzwerk verbinden und auch Daten bearbeiten, zufügen, ... aber sobalt ich einen zweiten Client starte z.b. von einem anderen PC geht garnichts mehr. was mache ich falsch?

mkinzler 18. Aug 2009 11:32

Re: Firebird in Netzwerk
 
Was heisst: Es geht nichts mehr? Welche Version ( Server?)

clock50 18. Aug 2009 11:39

Re: Firebird in Netzwerk
 
Server Version 2.0.5.13206
Es ist auch so wenn ich die Anwerndung ein 2. mal auf dem selben PC (selbe DB) starte es werden alle daten zwar angezeigt aber ich kann nichts ändern oder einfügen oder löschen. Die Anwendung scheint nicht zu reagieren. Ich kann dann auch nur noch mit Fehler schließen (Windows Fehlerbericht).

mkinzler 18. Aug 2009 11:41

Re: Firebird in Netzwerk
 
Zeig mal etwas Code, sonnst ist es eine Rätselraten. Verwendest du Transaktionen? Was für Transaktionseinstellungen?

clock50 18. Aug 2009 11:51

Re: Firebird in Netzwerk
 
Also Tansaktionen :
Standart Einstellungen
Zitat:

write
consistency
Ein Einfügen von Daten mache ich über IBSQL z.B.
Delphi-Quellcode:
var werte, sql : string;
begin
Inc(Pos);
werte := #39+inttostr(AnNr)+#39+', '+#39+inttostr(Pos)+#39+', '+#39+unit1.Einheit+#39+', '+#39+'1'+#39+', '+#39+'Art-Text'+#39+', '+#39+'19'+#39+', '+#39+'0,00'+#39;
sql := 'Insert into ADATEN (ANR, POS, EINH, ANZ, TEXT, MWST, PREIS) VALUES ('+Werte+') ';
DM.SQL(sql);
Delphi-Quellcode:
procedure TDM.Sql(Sql : String);
begin
 //showmessage(sql);
 IBSQL1.SQL.Clear;
 IBSQL1.SQL.Text := Sql;
 IBSQL1.ExecQuery;
 SQLUpdate;
end;

mkinzler 18. Aug 2009 11:54

Re: Firebird in Netzwerk
 
Ist autocommit aktiv?

Btw.:Ich würde hier Paramter nehmen:

SQL-Code:
Insert into ADATEN (ANR, POS, EINH, ANZ, TEXT, MWST, PREIS) VALUES (:ANR, :POS, :EINH, :ANZ, :TEXT, :MWST, :PREIS);

rweinzierl 18. Aug 2009 11:58

Re: Firebird in Netzwerk
 
Vielleicht der embedded Firebird ( da kann nur einer drauf zugreifen ?)

mkinzler 18. Aug 2009 12:00

Re: Firebird in Netzwerk
 
Bei embedded-Zugriff gilt diese Beschränkung. Deshalb habe ich ja nach dem Server gefragt :zwinker:

clock50 18. Aug 2009 12:30

Re: Firebird in Netzwerk
 
AutoCommit? bei der Transaktion

DefaultAction : TACommit

Ich habe keinen embedded ich habe ganz normal Classic-Server

Alfredo 18. Aug 2009 12:38

Re: Firebird in Netzwerk
 
Der Classic-Server läuft auf welchem Betriebssystem?

clock50 18. Aug 2009 12:46

Re: Firebird in Netzwerk
 
XP Home und XP Pro je SP2
es ist auf beiden das gleiche

Ich habe es auf beiden Getestet laufen soll es auf Pro

Alfredo 18. Aug 2009 15:23

Re: Firebird in Netzwerk
 
XP Home hat generell Probleme im Netzwerk.
Dies ist aber von MS so gewollt.


Ich würde nicht auf die Idee kommen XP Pro als Serverbetriebssystem
einzusetzen.

Ich arbeite mit Fedora 10(Samba) und das läuft mit Firebird perfekt.

Gruß
Alfred

mkinzler 18. Aug 2009 15:24

Re: Firebird in Netzwerk
 
Ist die Windowes FireWall aktiv?

clock50 18. Aug 2009 16:39

Re: Firebird in Netzwerk
 
Firewall ist aktiv aber ich habe port 3050 ausgenommen

clock50 18. Aug 2009 16:44

Re: Firebird in Netzwerk
 
hallo
Zitat:

Zitat von Alfredo
XP Home hat generell Probleme im Netzwerk.
Dies ist aber von MS so gewollt.


Ich würde nicht auf die Idee kommen XP Pro als Serverbetriebssystem
einzusetzen.

Ich arbeite mit Fedora 10(Samba) und das läuft mit Firebird perfekt.

Gruß
Alfred

das ist nur für einen PC + Arbeitsstation und keine Firmen Server Anwendung

Alfredo 18. Aug 2009 17:25

Re: Firebird in Netzwerk
 
Zitat:

das ist nur für einen PC + Arbeitsstation und keine Firmen Server Anwendung
Hierin liegt eben dein Denkfehler.

Sobald mehr als 1 Rechner vorhanden ist, müssen die beiden Betriebssysteme
miteinander richtig reden können.

Mein Kenntnisstand ist, das XP Home im Bereich des Netzwerks bewusst kastriert
wurde.

XP Pro läßt nur maximal 10 Verbindungen zu.

Wenn Du mal rechnest was Du schon an Zeit verbraten hast, dann hättest Du bei
Ebay eine reguläre SB-Lizenz für XP-Pro bekommen.

Was verwendest Du für einen Switch?

Onboard Netzwerkkarten? Am Besten noch ein Asusboard?

Wireshark wäre ein Tool um feststellen zu können, was sich auf deinem Mininetz-
werk so abspielt.


Gruß
Alfred

clock50 18. Aug 2009 20:31

Re: Firebird in Netzwerk
 
Natürlich hast Du Recht mit dem was Du schreibst.

Dennoch gehe ich davon aus, daß es nicht ausschließlich am Netzwerk liegt. Da ich das Problem auch habe, wenn ich die Anwendung 2x auf dem 'Server' (der PC mit Firebird-Server (XP Pro) ) starte.

mschaefer 18. Aug 2009 20:35

Re: Firebird in Netzwerk
 
Es ist ziemlich egal ob Linux oder Windows für die Firebird-Server Version verwendet wird. Bei beiden geht der gemeinsame Zugriff im Netzt. Würde eher auf die Zugriffskomponente tippen. Bin selbst ja eher ein Verfechter der Zeos Komponenten, aber FIB hat auch reichlich Anhänger.

Hrüße // Martin

clock50 18. Aug 2009 21:55

Re: Firebird in Netzwerk
 
Aber was kann es sein? Ich poste hier mal mein Datenmodul

Delphi-Quellcode:
  public
    { Public-Deklarationen }
    procedure SQLUpdate;
    procedure sSql(Sql : String);
  end;

var
  DM: TDM;

implementation

uses Unit2, Unit1, Unit7, Unit6, Unit4, Unit3;

{$R *.DFM}

procedure TDM.SQLUpdate;
var ID : Array[1..9] of Integer;
begin
 ID[1] := IBQuery1ID.AsInteger;
 ID[2] := IBTable1ID.AsInteger;
 ID[3] := IBQuery2ID.AsInteger;
 ID[4] := IBTable2ID.AsInteger;
 ID[5] := IBQuery3ID.AsInteger;
 ID[6] := IBTable3ID.AsInteger;
 ID[7] := IBTable4ID.AsInteger;
 ID[8] := IBTable5ID.AsInteger;
 ID[9] := IBTable6ID.AsInteger;
    if IBTransaction1.InTransaction then
     begin
      IBTransaction1.Commit;
      IBTransaction1.StartTransaction;
      IBQuery1.Open;
      IBTable1.Open;
      IBQuery2.Open;
      IBTable2.Open;
      IBQuery3.Open;
      IBTable3.Open;
      IBTable4.Open;
      IBTable5.Open;
      IBTable6.Open;
      IBQuery4.Open;
     end;
 IBQuery1.Locate('ID', ID[1], [loCaseInsensitive]);
 IBTable1.Locate('ID', ID[2], [loCaseInsensitive]);
 IBQuery2.Locate('ID', ID[3], [loCaseInsensitive]);
 IBTable2.Locate('ID', ID[4], [loCaseInsensitive]);
 IBQuery3.Locate('ID', ID[5], [loCaseInsensitive]);
 IBTable3.Locate('ID', ID[6], [loCaseInsensitive]);
 IBTable4.Locate('ID', ID[7], [loCaseInsensitive]);
 IBTable5.Locate('ID', ID[8], [loCaseInsensitive]);
 IBTable6.Locate('ID', ID[9], [loCaseInsensitive]);
 Form2.Anzeige;
 Form3.Anzeige;
 Form4.Anzeige;
 Form6.Anzeige;
 Form7.Anzeige;
end;

procedure TDM.sSql(Sql : String);
begin
 IBSQL1.SQL.Clear;
 IBSQL1.SQL.Text := Sql;
 IBSQL1.ExecQuery;
end;

mkinzler 18. Aug 2009 22:01

Re: Firebird in Netzwerk
 
Ersetzte die IBTables durch IBDataSets und mache die Updates darüber ( .ModifySQL)

clock50 19. Aug 2009 06:36

Re: Firebird in Netzwerk
 
So ich habe letzte Nacht 2 Stunden geschlafen um dan festzustellen, daß wir das Thema verfehlen. Es ist nicht nur das Update sonderen auch ein SQLQuery 'Insert into' geht ja auch nicht.

Delphi-Quellcode:
werte := '0, '+#39+KuNr+#39+', '+#39+inttostr(AnNr)+#39+', '+#39+DateToStr(DateTimePicker1.Date)+#39+', '+#39+Edit1.Text+#39+', '+#39+JvMemo1.Lines.Text+#39+', '+#39+'Text'+#39+', '+#39+'Text'+#39;
sql := 'Insert into ANGEBOT (STATE, KNR, ANR, DATUM, LDATUM, KTEXT, TEXT1, TEXT2) VALUES ('+Werte+') ';
DM.sSQL(sql);
ich mache noch nicht mal ein Commit. Er bleibt schon bei ExecQuery hängen

Delphi-Quellcode:
procedure TDM.sSql(Sql : String);
begin
 IBSQL1.SQL.Clear;
 IBSQL1.SQL.Text := Sql;
 IBSQL1.ExecQuery;
end;

mkinzler 19. Aug 2009 06:39

Re: Firebird in Netzwerk
 
Es ist aber toll, das du die Tipps hier komplett ignorierst!

clock50 19. Aug 2009 06:50

Re: Firebird in Netzwerk
 
Nein bitte nicht falsch verstehen ich habe alles auf IBDataSet umgestellt aber ich bekomme auch da das gleiche Problem und zusätzlich bekomme ich über meinen 'insert into' keinen Datensatz eingefügt. Ich habe in den Tabellen einen Generator auf ID und der scheint das nicht zu machen da ich die meldung bekomme ID muss einen Wert haben.

Einfügen mit IBDataSet:

Delphi-Quellcode:

werte := #39+''+#39+', '+#39+inttostr(ReNr)+#39+', '+#39+DateToStr(DateTimePicker1.Date)+#39+', '+#39+DateToStr(DateTimePicker2.Date)+'/'+#39+', '+#39+JvMemo1.Lines.Text+#39+', '+#39+'Text'+#39+', '+#39+'Text'+#39+', '+#39+'0'+#39+', '+#39+'0'+#39;
sql1 := 'Insert into RECHNUNG (KNR, RNR, DATUM, LDATUM, KTEXT, TEXT1, TEXT2, ZSKONTO, PSKONTO) VALUES ('+Werte+') ';
DM.IBDataSet1.Close;
DM.IBDataSet1.InsertSQL.Clear;
DM.IBDataSet1.InsertSQL.ADD(SQL1);
DM.IBDataSet1.Open;
DM.IBDataSet1.Insert;
DM.IBDataSet1.Post;

mkinzler 19. Aug 2009 07:03

Re: Firebird in Netzwerk
 
Der erste Tipp war Parameter zu verwenden. Der 2. wäre sich mit dem DataSet etwas auseinander zusetzten.
Fülle dort SelectSQL mit der Select-Abfrage aus.
Nun die entsprechenden DML-Skripte ( Insert, Update, Delete).
Nun verhält sich das DS wie eine Table.

clock50 19. Aug 2009 07:10

Re: Firebird in Netzwerk
 
Entschuldige, mit den Parametern habe ich mich noch nicht so beschäfitgt, aber ich weiß wie es geht. Wo finde ich den was über IBDataSet?

mkinzler 19. Aug 2009 07:13

Re: Firebird in Netzwerk
 
http://www.delphi-treff.de/tutorials...erbase/page/5/

hoika 19. Aug 2009 07:17

Re: Firebird in Netzwerk
 
Hallo,

geh mal anders ran.
Starte dein Programm, danach IBExpert(z.B. die kostenlose personal).
Verbinde dich zur DB, mache ein Select.
Wenn das geht, liegt es an deinem Programm (oder den Zugriffsmethoden).

Und dann kann man weiterreden.

Noch zu den Transaktionen:
write
consistency


Das ist doch nicht alles, oder ?
Was ist mit WAIT / NOWAIT ?

Woher weisst du eigentlich, dass er beim Insert hängt,
hast du das mit dem Debugger geprüft ?


Heiko

clock50 19. Aug 2009 09:31

Re: Firebird in Netzwerk
 
ich habe das mit IBExpert gemacht. wenn IBExpert lauft kann ich mit meinem Progamm alles machen. jetzt bin ich am lesen mit IBDataSet.

Ich habe eine Procedur für das Ausführen des Insert. beim eintritt alles o.k. aber er kehrt nicht zurück. erst wenn ich das 2. Programm schließe habe ich wieder zugriff.

hoika 19. Aug 2009 09:46

Re: Firebird in Netzwerk
 
Hallo,

Zitat:

wenn IBExpert lauft
nicht nur laufen, sondern auch eine deiner Queries absetzen
(ohne Commit).

Es sieht so aus, als ob die Transaction wait eingestellt hast.
Da sieht man wieder, wie blöd das mit dem AutoCommit ist.

Schreib mal vor dem Insert ein Transaction.StartTransaction (?)
und nach dem Insert explizit ein Transaction.Commit (nicht CommitRetaining.

Hast du auch ein TDBGrid mit dranhängen ?
Dann nehme für den DB-Code eine eigene Query/DataSet.


Heiko

clock50 19. Aug 2009 10:11

Re: Firebird in Netzwerk
 
Ich denke ich habe es so wie du meinst.
für alle Inserts und updats habe ich IBSQL, IBTable(jetzt auch IBDataSet) und IBQuery habe ich nur für die Anzeige (Listen, DBGrid) es werden über diese keine Updats oder Inserts gemacht.

Zitat:

Schreib mal vor dem Insert ein Transaction.StartTransaction (?)
und nach dem Insert explizit ein Transaction.Commit (nicht CommitRetaining.
das habe ich gemacht und dennoch ist es so. er beleibt hängen

hoika 19. Aug 2009 10:17

Re: Firebird in Netzwerk
 
Hallo,

immer noch an der gleichen Stelle ?

Wie sieht eigentlich der Connection-String aus ?
Nimm lokal trotzdem "localhost" als Servername.


Heiko

clock50 19. Aug 2009 12:09

Re: Firebird in Netzwerk
 
Es ist egal ob der zugriff local oder per Netzwerk mit 127.0.0.1/3050 oder localhost/3050 oder servername/3050 es ist immer das gleiche: Lesen(anzeige) von Daten okay. aber Insert, Update und Delete, mit und ohne commit mit "2+ Zugriffen" bleibt beim ausführen der "Abfrage Insert, ..." hängen

Alfredo 19. Aug 2009 12:40

Re: Firebird in Netzwerk
 
Haben alle Tabellen einen Primarykey?

Artur 19. Aug 2009 13:16

Re: Firebird in Netzwerk
 
Hi clock50,

entweder habe ich es überlesen oder du hast nirgends angegeben, welche Zugriffskomponenten du verwendest.
Ich vermute, du verwendest nicht die FIBplus Komponenten (kostenpflichtig), sondern die IBX Komponenten, die bei Delphi beiliegen (allerdings gibt es da kein ExecQuery, oder?).

TIBQuery (IBX) öffnet eine schreibgeschützte Datenmenge, damit kannst du nichts einfügen.
In der Hilfe (Delphi 2007) gibt es ein Beispiel fürs TIBDataset (allerdings nicht per SQL sondern per FieldByName), bei dem mit INSERT Daten zugefügt werden.


Allerdings habe ich hier schon ein paar Mal Warnungen gelesen, IBX mit Firebird zu kombinieren, weil IBX wohl seit langem nicht mehr an Firebird angepaßt wird (aber da sind sicher auch mkinzler und hoika die besseren Fachleute).

Falls Du wirklich FIBplus verwendest, dann vergiß bitte diesen Beitrag.
Dann wäre es am sinnvollsten ein pFIBDataset zu nehmen.


Gruß,

Artur

mkinzler 19. Aug 2009 13:38

Re: Firebird in Netzwerk
 
Zitat:

Allerdings habe ich hier schon ein paar Mal Warnungen gelesen, IBX mit Firebird zu kombinieren, weil IBX wohl seit langem nicht mehr an Firebird angepaßt wird (aber da sind sicher auch mkinzler und hoika die besseren Fachleute).
Die normalen Dinge sollten gehen. Ich verwende aber auch andere Komponenten (IBDAC)

clock50 19. Aug 2009 13:45

Re: Firebird in Netzwerk
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich werde wohl noch weiter suchen müssen denn von meiner Überlegung her klappt alles.
ich habe mir nach meinem großen vorbild ein kleines gebaut und geteste und was soll ich sage es klappt. ich hab es mal angehängt.

hoika 19. Aug 2009 13:54

Re: Firebird in Netzwerk
 
Hallo,

Artur:
Natürlich geht ein Insert mit TIBQuery.
Dass ein Open ein readonly-DataSet öffnet,
hat mit dem ExecSQL beim Insert ja nix zu tun.

Du hast überlesen, dass das Programm funktioniert,
wenn es alleine gestartet wird (auch Insert/Update).
Nur wenn es 2mal gestartet wird, hängt es.

clock50:
Sind irgendwelche Warnungen beim Compilieren ?
Zur Fehlersuche würde ich jetzt erst mal alle Open ausklammern,
dann ein Open rein
probieren, probieren ...


Heiko

mquadrat 19. Aug 2009 14:09

Re: Firebird in Netzwerk
 
Was passiert, wenn du deine Transaction auf "no-wait" setzt? Hab ich deinen Code eigentlich richtig interpretiert, dass du das gesamte Programm über eine Transaktion fährst, die permanent offen gehalten wird, oder hab ich mich da verguckt?

hoika 19. Aug 2009 14:12

Re: Firebird in Netzwerk
 
Hallo,

siehe #30


Heiko

mquadrat 19. Aug 2009 14:17

Re: Firebird in Netzwerk
 
@Heiko

Stimmt wenn er das so konsequent gemacht hat, dann dürfte auch ne wait kein Problem sein. Aber irgendwie bezweifle ich das. Wenn er das schreibt, dass Instanz 1 wieder geht, wenn Instanz 2 geschlossen wird, dann ist eine wartende Transaktion irgendwie das plausibelste.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.
Seite 1 von 2  1 2      

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