2013/10/29

Day5 LiteDAC - iOS開發的利器

當窮得只剩 PC 的時候...那就戰到不能戰為止吧!

在 iOS 應用程式部屬到設備上時有個很嚴重的限制:
就是在發佈應用程式時不能附帶任何的 libraries (*.dylib) 。

難道在資料庫的存取上就只能走 DataSnap 嗎?

當然不是,我們還可以使用 iOS 內部支援的 SQLite 當作本機資料庫使用,現在就來介紹新的工具吧 -- LiteDAC!

Devart 的 DAC 元件群(ODAC、MyDAC、PgDAC、IBDAC、UniDAC 和 LiteDAC)有個最大的特色,就是它不需要任何的 libraries (*.dylib),就可以直接存取資料庫。

今天就初步來介紹本次的主角 -- LiteDAC!

使用上非常的輕鬆,底下是原始碼:


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
procedure TForm1.FormCreate(Sender: TObject);
var
  _Count: Integer;
  _Temp: TLiteQuery;
begin
  _Temp := TLiteQuery.Create(Self);
  _Temp.Connection := LiteConnection1;
 
  LiteConnection1.Options.ForceCreateDatabase := True;
  LiteConnection1.Database := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'emps.sqlite';
  LiteConnection1.Connect();
 
  _Temp.SQL.Text := 'SELECT count(*) FROM sqlite_master WHERE type=''table'' AND name=''DEPT'' ';
  _Temp.Open();
  _Count := _Temp.Fields[0].AsInteger;
  _Temp.Close();
  if _Count = 0 then
  begin
    _Temp.SQL.Text := ''
      +'CREATE TABLE DEPT '
      +'( '
      +'   DEPTNO INTEGER NOT NULL, '
      +'   DNAME  VARCHAR(14), '
      +'   LOC    VARCHAR(13), '
      +'   PRIMARY KEY (DEPTNO) '
      +') ';
    _Temp.ExecSQL();
 
    _Temp.SQL.Text := ''
      +'INSERT INTO DEPT '
      +'VALUES      (10, '
      +'             ''ACCOUNTING'', '
      +'             ''NEW YORK''); '
      +' ';
    _Temp.ExecSQL();
 
    _Temp.SQL.Text := ''
      +'INSERT INTO DEPT '
      +'VALUES      (20, '
      +'             ''RESEARCH'', '
      +'             ''DALLAS''); ';
    _Temp.ExecSQL();
 
    _Temp.SQL.Text := ''
      +'INSERT INTO DEPT '
      +'VALUES      (30, '
      +'             ''SALES'', '
      +'             ''CHICAGO''); ';
    _Temp.ExecSQL();
 
    _Temp.SQL.Text := ''
      +'INSERT INTO DEPT '
      +'VALUES      (40, '
      +'             ''OPERATIONS'', '
      +'             ''BOSTON''); ';
    _Temp.ExecSQL();
  end;
 
  LiteQuery1.Open();
end;

很快速的做出了新的成品

1
LiteConnection1.Options.ForceCreateDatabase := True;
Options 的參數 ForceCreateDatabase 是在指定 LiteDAC 要檢查 iOS 上是否已有指定的資料庫存在。
1
LiteConnection1.Database := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'emps.sqlite';
IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) 是直接取得 App 在 iOS 裝置裡的路徑。

附帶說明:LiteDAC 在 iOS 上會智能載入系統自帶的 SQLite 驅動,所以在 LiteConnection.Options.Direct 一定要為 False 。


LiteDAC 官網在這兒

沒有留言:

張貼留言