我认为将映射的驱动器号转换为UNC路径就足以打开.GDB文件, 但是唉:
ConvertToUNCPath
根据我解析ConvertToUNCPath
结果的方式,我得到不同的错误消息:
[firedac] [phys] [ib]不可用数据库
[firedac] [phys] [ib]在文件“persoonlijk \ jan \ klanten.gdb”的“createfile(open)”操作期间出错i / o错误#$ D#$ A'error尝试打开文件'#$ D#$ A'the系统找不到指定的路径。
使用P:\Jan\KLANTEN.GDB
的代码部分成功转换,例如\\tt2012server\persoonlijk\Jan\KLANTEN.GDB
至// lUNC := '\\2012server'; // Unable to complete network request to host
lUNC := 'tt2012server';
//AGDBName := '\\tt2012server\persoonlijk\jan\klanten.gdb';
//AGDBName := 'tt2012server\persoonlijk\jan\klanten.gdb';
//AGDBName := '\persoonlijk\jan\klanten.gdb';
//AGDBName := 'persoonlijk\jan\klanten.gdb';
//AGDBName := '\jan\klanten.gdb';
//AGDBName := 'jan\klanten.gdb';
//AGDBName := 'p:\jan\klanten.gdb'; (original input)
。
当路径指向映射的驱动器号时,如何打开GDB文件?
补充:我尝试了这些硬编码的变体,它们都失败了:
\\tt2012server\persoonlijk
(P:映射到{{1}})
添加了:
对不起,我在初始文本中并不清楚:这不是关于连接到远程服务器上的数据库本身。我只是希望我的本地“数据库检查”工具能够打开GDB文件,如果有人将其放入我的网络共享中进行检查(而不是先将其复制到本地磁盘)。 只是意图使用WNetGetConnection是解决驱动器号到UNC路径(我在网上找到的一些代码)。
答案 0 :(得分:3)
Firebird是数据库服务器,因此它专注于性能和可靠性。
http://www.firebirdfaq.org/faq46/
性能意味着缓存了大量数据,缓存用于读取和缓存以供写入。
可靠性意味着Firebird必须从操作系统中获得有价值的保证:
一个。没有其他进程会修改数据库文件,而服务器有一些缓存的数据用于读取。
湾在任何时候,服务器可能希望从其缓存中将任何数据写入文件,并且保证该数据 - 在任何时刻 - 结束持久写入持久性媒体。
网络连接的磁盘使两种保修都无效,因此Firebird Server拒绝信任它们。
您可以自行决定破解Firebird配置或源文件,以删除此安全检查并打开网络共享文件,如果您确实需要这些文件而不是安全和速度。
但正确的解决方案是在磁盘确实携带数据库文件的计算机上安装Firebird服务器。
AGDBName := '\\tt2012server\persoonlijk\jan\klanten.gdb'
这并不意味着“本地Firebird服务器应使用tt2012server
凭据连接到LOCAL_SYSTEM
服务器并从persoonlijk
共享资源”读取数据库文件,正如您可能想要的那样。
http://www.firebirdfaq.org/faq260/
如果有的话,Windows LOCAL_SYSTEM
用户被明确禁止进行大多数网络操作以包含入侵者和病毒。即使你攻击Firebird打开网络文件,很可能Windows无论如何都会禁止这种访问,除非您设置Windows以使用默认LOCAL_SYSTEM
以外的某个用户帐户运行Firebird Server服务。
无论如何,\\tt2012server\persoonlijk\jan\klanten.gdb
连接字符串实际上意味着您要求应用程序使用tt2012server
(又名Microsoft命名管道)协议连接到WNET
并找到在该服务器上运行的Firebird服务器并且通过WNET协议进行通信,而不是TCP / IP协议。
根据您引用的错误判断 - lUNC := '\\2012server'; // Unable to complete network request to host
- 上述 tt2012server 计算机可能没有运行Firebird服务器并接受命名管道连接。
WNET协议被认为已过时,很可能会从未来的Firebird Server版本中删除。截至目前它正在运作,但很少有人使用它,因此该领域几乎没有最新的经验。建议您默认使用TCP / IP协议将应用程序连接到运行在 tt2012server 计算机上的Firebird服务器,而不是WNET协议。
因此,Interbase / Yaffil / Firebird系列中没有“脏读”交易。
TxOptions.Isolation := xiDirtyRead;
- 此行不起作用。很可能它会默默地将事务类更改为“READ COMMITTED”,不太可能会给出明确的错误。