Autor Beitrag
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 10.02.03 08:59 
hi all ... hab ma ne frage ... also ich hab bisher einen localen IB-Server mit einer database
nun habe ich 2 Fragen kann ich das machen, das die datenbank auf einem netzlaufwerk liegt?
2. muss ich auf jedem rechner auf dem ich mein Programm inst. will und benutzen will auch einen InterbaseClient mitInst? wenn ja wie kann ich das zusätzlich einbinden?

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mo 10.02.03 09:46 
Hi,

welche Version von IB hast Du?

Bei allen Varianten (IB/FB) installierst Du auf einem Rechner, der den Datenbank-Server spielen soll (muss kein Server-Betriebssystem haben) einfach den IB/FB-Server. Bei der kommerziellen Variante benötigst Du dazu ein entsprechendes Setup das Du kaufen musst, mit der Demo geht das nicht.

Beim Client kommts darauf an, welche Version Du einsetzt:

Bei Firebird 1.x benötigst Du für den Client lediglich die gds32.dll, die Du in den Windows-Pfad/Programmpfad kopieren musst. Bei IB Opensource reicht das NICHT aus. IB benötigt noch einen Eintrag in der services Datei. Benutze dazu am einfachsten ein entsprechendes Setup (siehe auch: ibinstall.defined.net/dl_bin_borl.htm). Wie es bei den aktuellen kommerziellen Varianten aussieht weiß ich im Moment nicht....
Beachte aber immer folgendes: Nutze immer die entpsrechende Client gds32.dll mit dem entsprechenden Server! Keine Versionen mischen!!!!
Grüße
Lemmy
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 10.02.03 09:57 
okö danke... nur die seite die iss scho lang nimma geupt worden und da ich IB7 verwende ist das ein wenig blöd ... :/, da dort nur der inst. für den 6. client iss ....

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 10.02.03 10:33 
Für den Eintrag in der services hab ich Dir hier auch noch ein Code-Schnipselchen, damit brauchst Du nur die gds32.dll und musst diese Prozedur aufrufen, dann erfolgt der Eintrag automatisch.

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
procedure Tform1.reggds32;
var txtDatei      : TextFile;
    strDummy,
    strWin, strBak: String;
    blnGefunden, blnAdmin   : Boolean; 
    srcDatei, 
    dstDatei      : TFileStream;    // Source & Destination 

  // Wie lautet das Windows Verzeichnis?
  function  WinDir:String; 
  var intLen:Integer; 
  begin 
    SetLength(Result, MAX_PATH+1); 
    intLen := GetWindowsDirectory(pChar(Result), Length(Result)-1);
    SetLength(Result, intLen) 
  end{WinDir};

  // Hat der User Administrationsrechte?
  function IsAdmin:Boolean;
  const cstTestKey = 'Software\CheckGDS'; 
  begin 
    Result := False;
    with TRegistry.Create do 
      try
        Rootkey:= HKEY_LOCAL_MACHINE; 
        if OpenKey(cstTestKey, True) then begin
          Result := True; 
          CloseKey; 
          DeleteKey(cstTestKey); 
        end{if}; 
      finally
        Free; 
      end{try}; 
  end{GetIsAdmin}; 

  // Ist die GDS32.DLL verfÜgbar?
  function IsIBClient:Boolean; 
  var IBLibrary: THandle; 
  begin 
    IBLibrary := LoadLibrary('GDS32.DLL');
    Result := IBLibrary <> 0; 
    if Result then FreeLibrary(IBLibrary); 
  end{IsIBClient};

begin 
  blnGefunden:=False; 
  // Ermittlung der Windowsversion und somit der Position der Datei "services" 
  strWin:=WinDir;
  // Wo liegt die Datei services? 
  if Win32Platform = VER_PLATFORM_WIN32_NT then begin 
    // WinNT oder 2000 
      strBak:=strWin+'\system32\drivers\etc\services_gds.bak';
      strWin:=strWin+'\system32\drivers\etc\services';
      blnAdmin:=True; // Administrationsrechte ? 
  end else begin 
    // Windows 95,98,ME 
    strBak:=strWin+'\services_gds.bak'; 
    strWin:=strWin+'\services'; 
    blnAdmin:=True; 
  end;

  // Kontrollieren der Dateiposition 
  if fileExists(strWin) then begin 
    AssignFile(txtDatei,strWin);
    reset(txtDatei);
    strDummy:='';
    repeat 
      readln(txtDatei,strDummy); 
      if POS('gds_db',strDummy)>0 then begin
        blnGefunden:=True;
        Break; 
      end;
    until eof(txtDatei); 
    CloseFile(txtDatei); 
    if not blnGefunden then begin 
    if blnAdmin then begin 
        // Sicherungskopie erstellen
        srcDatei := TFileStream.Create(strWin, fmOpenRead ); 
        try 
          dstDatei := TFileStream.Create( strBak, fmOpenWrite or fmCreate ); 
        except 
          srcDatei.Free;
          exit; 
        end; 
        try 
          dstDatei.CopyFrom(srcDatei, srcDatei.Size ) ;
        except
          dstDatei.Free;
          srcDatei.Free; 
          exit; 
        end; 
        dstDatei.Free; 
        srcDatei.Free; 
        // gds Eintrag wird erg?zt
        AssignFile(txtDatei, strWin); 
        Append(txtDatei);
        writeln(txtDatei,'gds_db           3050/tcp               # InterBase Client'); 
        { Hier steht Code, der ein Flush vor dem Schlie?n der Datei erfordert. } 
        Flush(txtDatei);  { Sicherstellen, da?der Text tats?hlich in die Datei geschrieben wird. }
        CloseFile(txtDatei); 
      end else 
        MessageDlg('Sie verfÜgen nicht Über Administrationsrechte!'+#13+#10+''+#13+#10+ 
                   'Daher k?nen die notwendigen Eintragungen nicht durchgefÜhrt '+#13+#10+
                   'werden!'+#13+#10+''+#13+#10+'Melden Sie sich als Administrator noch einmal an!',
                   mtError, [mbAbort], 0); 

    end; 
  end else begin 
    // services wurde nicht gefunden 
    MessageDlg('Die Datei services konnte an der Position'+#13+#10+strWin+#13+#10+
               'nicht gefunden werden!', mtError, [mbAbort], 0);
    Halt;
  end; 
  // GDS32.DLL kann nicht angesprochen werden 
  if not IsIBClient then begin 
    MessageDlg('Die Bibliothek GDS32.DLL kann nicht angesprochen werden!', mtError, [mbAbort], 0);
    Halt; 
  end; 

end;


Die kommerziellen Varianten laufen genauso, auch mit Eintrag in der services, eigentlich.

Achja, Du kannst mitm IB KEINE Datenbank aufmachen, die auf nem Netzlaufwerk liegt, da muss auf dem Server der IB-Server installiert sein und Du musst dann über den darauf zugreifen. Gruß
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 10.02.03 10:47 
ich kann doch sagen anstatt
ausblenden Quelltext
1:
DM.IBFirma.Databasename:=(GetExtractFilePath(Paramstring(0))+'\db\xxx.gdb');					


einfachDM.IBFirma.Databasename:='Z:\xxx\xxx\xxx.gdb';

oder etwar nicht??


aber danke für den code

noch was die datei da soll ich die in mein Progverzeichnis machen, wird die dann in den service eingfügt oder wie muss ihc das machen?

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 10.02.03 11:15 
foxy hat folgendes geschrieben:
ich kann doch sagen anstatt
ausblenden Quelltext
1:
DM.IBFirma.Databasename:=(GetExtractFilePath(Paramstring(0))+'\db\xxx.gdb');					


einfachDM.IBFirma.Databasename:='Z:\xxx\xxx\xxx.gdb';

oder etwar nicht??
aber danke für den code

noch was die datei da soll ich die in mein Progverzeichnis machen, wird die dann in den service eingfügt oder wie muss ihc das machen?


Erstmal zum 2. Am besten machste die ins System32 oder System-verzeichnis, da is die gut aufgehoben.

Und zum 1.: Natürlich geht das so, es ist egal, wie der Pfad aufgerufen wird. Aber aus irgendwelchen Gründen kann man nicht auf DB-Dateien, die auf einem freigegebenen/entfernten Laufwerk liegen über den LocalIB zugreifen.
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 10.02.03 11:30 
ok also wenn ich nun meine inst. schreibe, soll diese dann einfach diese datei in den system ordner kopieren ok auch ne möglichkeit .... wo muss ich dann das aufraufen die procedure bei der form.create???


und das mit den netzlaufwerken ist ja blöde .... verdammt da muss ich mir was einfallen lassen.... geht das mit paradox, das man dbs auf freigegbenen Netzlaufwerken zugreifen kann??

denn ich denke nicht, das in der firma ein ib server inst. wird auf dem netzwerk

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 10.02.03 11:41 
ja, im formcreate oder formshow müsste es funktionieren, das reicht auch.

Ich glaube mit Paradox geht das, aber da ist das halt blöde wenn mehrere User darauf gleichzeitig zugreifen....

Gruß