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?
|
Re: Firebird in Netzwerk
Was heisst: Es geht nichts mehr? Welche Version ( Server?)
|
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). |
Re: Firebird in Netzwerk
Zeig mal etwas Code, sonnst ist es eine Rätselraten. Verwendest du Transaktionen? Was für Transaktionseinstellungen?
|
Re: Firebird in Netzwerk
Also Tansaktionen :
Standart Einstellungen Zitat:
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; |
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);
|
Re: Firebird in Netzwerk
Vielleicht der embedded Firebird ( da kann nur einer drauf zugreifen ?)
|
Re: Firebird in Netzwerk
Bei embedded-Zugriff gilt diese Beschränkung. Deshalb habe ich ja nach dem Server gefragt :zwinker:
|
Re: Firebird in Netzwerk
AutoCommit? bei der Transaktion
DefaultAction : TACommit Ich habe keinen embedded ich habe ganz normal Classic-Server |
Re: Firebird in Netzwerk
Der Classic-Server läuft auf welchem Betriebssystem?
|
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 |
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 |
Re: Firebird in Netzwerk
Ist die Windowes FireWall aktiv?
|
Re: Firebird in Netzwerk
Firewall ist aktiv aber ich habe port 3050 ausgenommen
|
Re: Firebird in Netzwerk
hallo
Zitat:
|
Re: Firebird in Netzwerk
Zitat:
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 |
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. |
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 |
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; |
Re: Firebird in Netzwerk
Ersetzte die IBTables durch IBDataSets und mache die Updates darüber ( .ModifySQL)
|
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:
ich mache noch nicht mal ein Commit. Er bleibt schon bei ExecQuery hängen
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);
Delphi-Quellcode:
procedure TDM.sSql(Sql : String);
begin IBSQL1.SQL.Clear; IBSQL1.SQL.Text := Sql; IBSQL1.ExecQuery; end; |
Re: Firebird in Netzwerk
Es ist aber toll, das du die Tipps hier komplett ignorierst!
|
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; |
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. |
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?
|
Re: Firebird in Netzwerk
|
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 |
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. |
Re: Firebird in Netzwerk
Hallo,
Zitat:
(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 |
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:
|
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 |
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
|
Re: Firebird in Netzwerk
Haben alle Tabellen einen Primarykey?
|
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 |
Re: Firebird in Netzwerk
Zitat:
|
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. |
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 |
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?
|
Re: Firebird in Netzwerk
Hallo,
siehe #30 Heiko |
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. |
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