DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 4
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/6 14:00:46
标题:
求助firedac连接sqlite相对路径 浏览:2506
加入我的收藏
楼主: var
TempPath,SQLStr:string;
begin
  FDConnection1.Params.Add('Drivername=SQLite');
  FDConnection1.Params.Add('OpenMode=CreateUTF'); //这是默认值, 可选 CreateUTF16(Unicode)
  FDConnection1.Params.Add('StringFormat=Unicode');
  TempPath:=ExtractFilePath(application.ExeName);
  TempPath:='''database='+TempPath+'data\data.sdb''';
  FDConnection1.Params.Add(TempPath);
  FDConnection1.Connected := True;
以上代码运行总提示【firedac】【phys】【sqlite】error:no such table:xxx.
把FDConnection1.Params.Add(TempPath);改成FDConnection1.Params.Add(e:\data\data.sdb)就运行正常
----------------------------------------------
-
作者:
男 slm75 (75) ★☆☆☆☆ -
普通会员
2015/3/7 20:22:37
1楼: var
TempPath,SQLStr:string;
begin
  FDConnection1.Params.Add('Drivername=SQLite');
  FDConnection1.Params.Add('OpenMode=CreateUTF'); //这是默认值, 可选 CreateUTF16(Unicode)
  FDConnection1.Params.Add('StringFormat=Unicode');
  TempPath:=ExtractFilePath(application.ExeName);
  database=TempPath+'data\data.sdb';
  FDConnection1.Params.Add(TempPath);
  FDConnection1.Connected := True;
----------------------------------------------
-
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/8 14:05:57
2楼: var
TempPath,SQLStr:string;
begin
  FDConnection1.Params.Add('Drivername=SQLite');
  FDConnection1.Params.Add('OpenMode=CreateUTF'); //这是默认值, 可选 CreateUTF16(Unicode)
  FDConnection1.Params.Add('StringFormat=Unicode');
  TempPath:=ExtractFilePath(application.ExeName);
  //database=TempPath+'data\data.sdb';//这句有问题,请再帮忙看看谢谢
  FDConnection1.Params.Add(TempPath);
  FDConnection1.Connected := True;
文字
----------------------------------------------
-
作者:
男 slm75 (75) ★☆☆☆☆ -
普通会员
2015/3/8 15:51:52
3楼: var
TempPath,SQLStr:string;
begin
  FDConnection1.Params.Add('Drivername=SQLite');
  FDConnection1.Params.Add('OpenMode=CreateUTF'); //这是默认值, 可选 CreateUTF16(Unicode)
  FDConnection1.Params.Add('StringFormat=Unicode');
  TempPath:=ExtractFilePath(application.ExeName);
  //database=TempPath+'\data\data.sdb';//这句有问题,请再帮忙看看谢谢
  FDConnection1.Params.Add(TempPath);
  FDConnection1.Connected := True;
----------------------------------------------
-
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/9 9:07:44
4楼: slm75 直接输入database=TempPath+'\data\data.sdb';编译肯定会保错,请帮忙重新看看,谢谢
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2015/3/9 14:00:20
5楼: FDConnection1.Params.Add(TempPath);

这种代码 只有 XX 才能写得出来。

XX 是骂人的话。各位自己对号入座吧。


这都多长时间了,这点小 BUG,都解决不了,真是个大XX。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/9 14:08:24
6楼: Flying Wang,你会的就请解答问题,一直用ado,这种写法就可以,我只是Delphi爱好者,提问题是希望你们高手帮忙,不是要你xx
----------------------------------------------
-
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/9 14:15:19
7楼: 我不是靠Delphi吃饭,只是业余爱好者,完全自学,某些高手能解答就动动手指,不想动手的请你素质高点,文明点,不要xx
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2015/3/9 14:22:55
8楼: 请楼主用 FDConnection1 的向导 建立连接。
点鼠标右键 就有向导了。

然后,你还不知道你错在哪里,那请楼主接受 XX 这个称号。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2015/3/9 14:40:08
9楼: XX 们真让人头痛..
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/9 15:39:07
10楼:  wang_80919 (Flying Wang),tuesdays (spser)问题我都写明了
FDConnection1.Params.Add(e:\data\data.sdb);这样运行肯定没有问题,如果安装换了其他盘,怎么办,是怎么让你头痛了,这么基本的问题你不愿意答就一边去,没有那个强求你,不要xx,有没有素质,wang_80919 (Flying Wang)你说的向导我知道,你知道就爽快点,不知道就不要xx了
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2015/3/9 15:51:16
11楼: 我只能说,楼主不听话,我也就不需要帮楼主了。88。

另外我说错了,不能叫 向导,应该叫 FireDAC Connection Editor
双击控件就有了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/9 16:07:23
12楼: 是我自己走入误区了,以为和ado一样,需要获取application的路径,wang_80919 (Flying Wang)说的我是很早就知道的,经过验证是不需要获取application的路径,是我的失误,还是谢谢wang_80919 (Flying Wang)。

最后结贴,问题解决了
----------------------------------------------
-
作者:
男 happyhills (老妖) ▲▲▲▲△ -
普通会员
2015/3/9 22:07:55
13楼: procedure TFmain.ReleaseDB;//释放数据库
var
 rs:TresourceStream;
begin
 if not System.SysUtils.FileExists(dm.DBFileName) then
     begin
       try
         rs:=TresourceStream.Create(Hinstance,'mydb',RT_Rcdata);
         rs.SaveToFile(dm.DBFileName);
       finaly
         rs.Free;
       end;
     end;
end;

//Udm.pas
function Tdm.DBFileName: string;
var
  spath : string;
begin
  spath := System.IOUtils.TPath.GetDocumentsPath; // or GetPublicPath
{$IFDEF Android}
  result := spath + '/' + DBname; // DBname in Usys
{$ENDIF}
{$IFDEF IOS}
  result := spath + '/' + DBname; // DBname in Usys
{$ENDIF}
{$IFDEF MSWINDOWS}
  result := spath + '\' + DBname; // DBname in Usys
{$ENDIF}
end;


function Tdm.InitDbOk: boolean;
begin
  result := true;
  if fileexists(DBFileName) then
  begin
    FDConn.DriverName := 'SQLite';
    FDConn.LoginPrompt := false;
    FDConn.Params.Clear;
    FDConn.Params.Values['Database'] := DBFileName;
    FDConn.Params.Values['DriverID'] := 'SQLite';
    FDConn.Params.Values['CharacterSet'] := 'utf8';
    try
      FDConn.Connected := true;
    except
      result := false;
    end;
  end
  else
    result := false;
end;

仅供参考,睡觉喽~
----------------------------------------------
-文科男,程序员。
作者:
男 happyhills (老妖) ▲▲▲▲△ -
普通会员
2015/3/9 22:16:50
14楼: 补充下:用模拟器看下路径就知道了。
此帖子包含附件:
PNG 图像
大小:36.9K
----------------------------------------------
-文科男,程序员。
作者:
男 pp0123 (pp0123) ★☆☆☆☆ -
普通会员
2015/3/10 1:53:51
15楼: 官方文件是教這樣的

  FDConnection1.params.Add('DriverID=SQLite');
  FDConnection1.params.Add('Database=$(RUN)\files\MyData.db3');

http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=index.html

记下这网址吧
----------------------------------------------
-
作者:
男 loongxiao (loong) ▲▲▲▲▲ -
普通会员
2015/3/10 8:48:10
16楼: happyhills (老妖),pp0123 (pp0123)谢谢两位热心解答,一并收了
----------------------------------------------
-
作者:
男 kayuk (鑫森淼焱垚) ▲▲▲▲△ -
普通会员
2015/3/10 19:16:03
17楼: 给楼主看下我的代码,看是否能解决你的问题:

dbFile := Extractfilepath(paramstr(0))+'\sqlite.db';
if  FileExists(dbFile) then
    begin
      FDConnection1.Open('DriverID=SQLite; Password=123456; Database='+dbFile);
      FDQuery1.Open('SELECT * FROM TableName');
    end;
----------------------------------------------
-
作者:
男 ti9er (TiGeR) ★☆☆☆☆ -
普通会员
2015/6/8 16:40:13
18楼: 也遇到这个问题了,按15楼的处理通过,多谢
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行80.07813毫秒 RSS