Einzelnen Beitrag anzeigen

delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
266 Beiträge
 
Delphi 10.3 Rio
 
#1

Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess ...

  Alt 14. Jul 2014, 15:26
Datenbank: firebird • Version: 2.5 • Zugriff über: embedded (UIB)
Hallo,

Habe mir nun doch Firebird installiert, sowohl die Sever Version als auch die Embedded Version. Bei letzterer sagt mir die Dokumentation, das keine eigentliche Installation nötig ist, ich muss nur die Dateien aus dem Paket in mein Anwendungsverzeichnis kopieren. Einige Dateien, die in Unterordnern stecken, die aber laut Dokumentation ebensfalls benötigt werden, habe ich auch in das Anwendungsverzeichnis kopiert. Danach habe ich die Datei fbembed.dll sowohl in:

-fbclient.dll
-gds32.dll

kopiert, so das ja nach Anforderung durch das DBMS die richtige DLL vorliegt.

Nun habe ich mit den Zeos Komponenten eine Testanwendung gebaut und sogar die Datenbankverbindung geschafft. Aber die Datei kann dennoch nicht geöffnet werden.


ich erhalte die Fehlermeldung:

Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird. < I/O error during CreateFile(open)

Wie erreiche ich den Dateizugriff mit der Embedded Version von Firebird. Will mir die Geschichte mit den Zugriffsrechten gerne für später aufheben, jetzt besser erst mal exclusiven Zugriff auf meine Datenbank, die eh auf meinem lokalen Rechner gespeichert ist, auf den aus räumlichen Gründen eh nur ich zugreife. Benutzer-Rechtevergabe ist da gar nicht notwendig. Ich will nur mit meiner Testdatei rumspielen um erst mal das Zusammenspiel der Komponenten (UIB) kennen zu lernen. Da bin ich schon froh, überhaupt eine Verbindung zu meiner Datenbank aufbauen zu können. Für das Erlernen der Vergabe der Benutzerrechte brauche ich noch ein ganzes Stück länger.

Hier mein Quellcode, der die vom Firebird Team empfohlenen UIB Komponenten verwendet. Mit Zeos habe ich die Datenbakverbindung noch nicht geschafft.


Delphi-Quellcode:

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ZSqlUpdate, DB, ExtCtrls, DBCtrls, Grids, DBGrids, ZDataset,
  ZConnection, ZAbstractRODataset, ZAbstractDataset, uib, uibdataset;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    UIBConfig1: TUIBConfig;
    UIBServerInfo1: TUIBServerInfo;
    UIBDataSet1: TUIBDataSet;
    UIBDataBase1: TUIBDataBase;
    UIBScript1: TUIBScript;
    UIBTransaction1: TUIBTransaction;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
//Hier noch die zugehörige .dfm Datei:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 286
  ClientWidth = 426
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 88
    Top = 136
    Width = 320
    Height = 120
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object DBNavigator1: TDBNavigator
    Left = 168
    Top = 105
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 1
  end
  object DataSource1: TDataSource
    DataSet = UIBDataSet1
    Left = 16
    Top = 24
  end
  object UIBConfig1: TUIBConfig
    UserName = 'sysdba'
    PassWord = 'masterkey'
    Host = 'localhost'
    LibraryName = 'gds32.dll'
    DatabaseName = '..\..\data\'
    Left = 16
    Top = 64
  end
  object UIBServerInfo1: TUIBServerInfo
    UserName = 'sysdba'
    PassWord = 'masterkey'
    Host = 'localhost'
    LibraryName = 'gds32.dll'
    Left = 16
    Top = 104
  end
  object UIBDataSet1: TUIBDataSet
    Left = 64
    Top = 24
  end
  object UIBDataBase1: TUIBDataBase
    Params.Strings = (
      'sql_dialect=3'
      'lc_ctype=WIN1252'
      'password=masterkey'
      'user_name=sysdba'
      'sql_role_name=2')
    DatabaseName = 'D:\Programme\Borland\BDS\4.0\Projects\Zeos\data\fbtest.fdb'
    CharacterSet = csWIN1252
    UserName = 'sysdba'
    PassWord = 'masterkey'
    LibraryName = 'gds32.dll'
    Role = '2'
    Left = 64
    Top = 64
  end
  object UIBScript1: TUIBScript
    Database = UIBDataBase1
    Left = 16
    Top = 168
  end
  object UIBTransaction1: TUIBTransaction
    DataBase = UIBDataBase1
    Left = 16
    Top = 208
  end
end
Wie erreiche ich den erfolgreichen Zugriff auf meine Datei und welche Seiten der Firebird Dokumentation muss ich mir zum besseren Verständnis anschauen. Ich könnte auch ein besser verständliches Demo gebrauchen. Gibt es sowas, vielleicht zuerst mal nur mit einer Datei oder mit einer Master Detail Beziehung zwischen nur 2 Dateien?
  Mit Zitat antworten Zitat