|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
denis (Denis) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/8/21 10:33:34 |
标题: |
FireDAC如何连接sqlserver的master数据库 |
浏览:1676 |
|
加入我的收藏 |
楼主: |
用 FireDAC 连接 sqlserver2005/2008 的master 数据库怎么操作 , 连接其它数据库可以,连接master就出错 FDConnection1.DriverName := 'MSSQL'; FDConnection1.Params.Add('Server=127.0.0.1'); FDConnection1.Params.Add('Database=master'); FDConnection1.Params.Add('User_name=sa'); FDConnection1.Params.Add('Password=123');
提示 ...对象名'SYS.DATABASES'无效
改成sys.master 提示 用户'sa'登录失败
----------------------------------------------
- |
作者: |
kaida (kaida) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/8/21 10:38:30 |
1楼: |
FDConnection1.Params.Clear;
----------------------------------------------
http://down.desei.com.cn/down/1041485/MyWeb/VCLs.html
|
作者: |
|
2017/8/21 10:39:00 |
1楼: |
还有这种事?
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
|
作者: |
denis (Denis) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/8/21 10:48:25 |
2楼: |
加上 FDConnection1.Params.Clear; 还是一样报错
----------------------------------------------
-
|
作者: |
|
2017/8/21 10:48:44 |
3楼: |
权限问题.把元数据的权限开放试下.
----------------------------------------------
-
|
作者: |
denis (Denis) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/8/21 10:53:28 |
4楼: |
UniDAC可以连接
UniConnection1.ProviderName := 'SQL Server'; UniConnection1.Server := '127.0.0.1'; UniConnection1.Database := 'master'; UniConnection1.Username := 'sa'; UniConnection1.Password := '123'; UniConnection1.Open;
改用FireDAC死活连不上master
----------------------------------------------
-
|
作者: |
vga (vga) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/8/21 11:07:16 |
5楼: |
UniDAC 大 法 好!!!
----------------------------------------------
-
|
作者: |
denis (Denis) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/8/21 11:45:03 |
6楼: |
找到解决方法 修改源码 FireDAC.Phys.MSSQL.pas 找到 procedure TFDPhysMSSQLConnection.InternalSetMeta;
//sCompatLvl := '(SELECT COMPATIBILITY_LEVEL FROM SYS.DATABASES WHERE LOWER(NAME) = ' + // AnsiLowerCase(sCurCatalog) + ')'; //此处修正连接master数据库出错 if not SameText(sCurCatalog, '''master''') then sCompatLvl := '(SELECT COMPATIBILITY_LEVEL FROM SYS.DATABASES WHERE LOWER(NAME) = ' + AnsiLowerCase(sCurCatalog) + ')' else sCompatLvl := '(SELECT cmptlevel from master.dbo.sysdatabases WHERE LOWER(name) = ''master'')';
----------------------------------------------
-
|
作者: |
|
2017/8/21 21:07:04 |
7楼: |
这个 bug 上周三已经提交 issue ,欢迎去投票: https://quality.embarcadero.com/browse/RSP-18846
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
|
作者: |
|
2017/8/24 7:52:34 |
8楼: |
xe10.2.1的FIREDAC连MSSQL2000会报对象名'SYS.DATABASES'无效。 连MSSQL2005以上没有此问题。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
|
作者: |
|
2017/8/24 8:12:37 |
9楼: |
已经有大神给出解决方案了,感谢老猫吧 find FireDAC.Phys.MSSQL.pas find procedure TFDPhysMSSQLConnection.InternalSetMeta; find sCompatLvl := '(SELECT COMPATIBILITY_LEVEL FROM SYS.DATABASES WHERE LOWER(NAME) = ' + above it add //fix by [西安]千叶<acewu@vip.qq.com> //fix or add by flying wang. if oConnMeta.ServerVersion < svMSSQL2005 then begin if oConnMeta.ServerVersion >= svMSSQL2000 then sCompatLvl := '80' else if oConnMeta.ServerVersion >= svMSSQL7 then sCompatLvl := '70' else sCompatLvl := '60' end else //fix end. sCompatLvl := '(SELECT COMPATIBILITY_LEVEL FROM SYS.DATABASES WHERE LOWER(NAME) = ' + AnsiLowerCase(sCurCatalog) + ')';
----------------------------------------------
-
|
|