FireDACのTFDIBBackupとTFDIBRestoreでFirebirdのバックアップや復元をする

FierDACのTFDIBBackupコンポーネントでFirebirdデータベースのバックアップ、
TFDIBRestoreコンポーネントでバックアップしたデータベースの復元ができます。

TFDFBNBackupTFDFBNRestoreがnbackupツールを呼び出すのに対して、
TFDIBBackupTFDIBRestoreはgbackツールを呼び出します。

サンプルアプリケーション

フォームに次のコンポーネントを配置します。

  • TButtonコンポーネントを2つ
  • TFDPhysFBDriverLink
  • TFDGUIxWaitCursor
  • TFDIBBackup
  • TFDIBRestore

FireDAC_gbak

TFDIBBackupでバックアップする

// Firebirdライバの場所
FDPhysFBDriverLink1.VendorLib := 'C:\driver\fbembed.dll';
FDIBBackup1.DriverLink := FDPhysFBDriverLink1;

// ユーザー名
FDIBBackup1.UserName := 'sysdba';
// パスワード
FDIBBackup1.Password := 'masterkey';
// データベースサーバーのホスト名
FDIBBackup1.Host := 'localhost';
// データベースサーバーに接続するプロトコル(ipLocal/ipTCPIP/ipNetBEUI)
FDIBBackup1.Protocol := ipLocal;
// バックアップ対象のデータベースファイル
FDIBBackup1.Database := 'C:\test\SAMPLE.FDB';
// バックアップ先のファイル名
FDIBBackup1.BackupFiles.Add('C:\test\SAMPLE.FDB.backup');
// バックアップタスクを開始する
FDIBBackup1.Backup;

TFDIBRestoreで復元する

// Firebirdライバの場所
FDPhysFBDriverLink1.VendorLib := 'C:\driver\fbembed.dll';
FDIBRestore1.DriverLink := FDPhysFBDriverLink1;

// ユーザー名
FDIBRestore1.UserName := 'sysdba';
// パスワード
FDIBRestore1.Password := 'masterkey';
// データベースサーバーのホスト名
FDIBRestore1.Host := 'localhost';
// データベースサーバーに接続するプロトコル(ipLocal/ipTCPIP/ipNetBEUI)
FDIBRestore1.Protocol := ipLocal;
// 復元対象のデータベースファイル
FDIBRestore1.Database := 'C:\test\NEW.FDB';
// 復元先のファイル名
FDIBRestore1.BackupFiles.Add('C:\test\SAMPLE.FDB.backup');
// 復元タスクを開始する
FDIBRestore1.Restore;

Delphi XE7のAndroidアプリケーションでWifiの有効・無効を設定する

Delphi XE7のAndroidアプリケーションでWifiの有効・無効を設定する方法です。

Java2OPでWifiManagerクラスのブリッジファイルを作成します。

Java2OP.exe -classes android.net.wifi.WifiManager -unit Androidapi.JNI.WifiManager

プロジェクトオプションの「使用する権限」で「Wi-Fi 状態の変更」を「true」にします。

Wi-Fi状態の変更

IsWifiEnabledメソッドを作成します。

type
  TForm1 = class(TForm)

    /// <summary>
    ///   Wifiの有効無効を設定する
    /// </summary>
    procedure SetWifiEnabled(Enabled: Boolean);

  end;

実装は次のようになります。

uses
  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNIBridge,
  Androidapi.JNI.WifiManager;

procedure TForm1.SetWifiEnabled(Enabled: Boolean);
var
  Obj: JObject;
  WifiManager: JWifiManager;
begin
  Obj := SharedActivityContext.getSystemService
    (TJContext.JavaClass.WIFI_SERVICE);
  if Obj = nil then
    Exit;
  WifiManager := TJWiFiManager.Wrap((Obj as ILocalObject).GetObjectID);
  WifiManager.setWifiEnabled(Enabled);
end;

Delphi XE7のAndroidアプリケーションでWifiが有効か無効かを調べる

Delphi XE7のAndroidアプリケーションでWifiが有効か無効かを調べる方法です。

Java2OPでWifiManagerクラスのブリッジファイルを作成します。

Java2OP.exe -classes android.net.wifi.WifiManager -unit Androidapi.JNI.WifiManager

プロジェクトオプションの「使用する権限」で「Wi-Fi 状態へのアクセス」を「true」にします。

Wifi状態へのアクセス

IsWifiEnabledメソッドを作成します。

type
  TForm1 = class(TForm)

    /// <summary>
    ///   Wifiが有効のときはTrue、無効の時はFalseを返します。
    /// </summary>
    function IsWifiEnabled: Boolean;

  end;

実装は次のようになります。

uses
  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNIBridge,
  Androidapi.JNI.WifiManager;

function TForm1.IsWifiEnabled: Boolean;
var
  Obj: JObject;
  WifiManager: JWifiManager;
begin
  Obj := SharedActivityContext.getSystemService
    (TJContext.JavaClass.WIFI_SERVICE);
  if Obj = nil then
    Exit(False);
  WifiManager := TJWiFiManager.Wrap((Obj as ILocalObject).GetObjectID);
  Result := WifiManager.isWifiEnabled;
end;

改行コードが混在している文字列の改行コードを統一する

Delphiで、CR・LF・CRLFの改行コードが混在している文字列の改行コードをいずれかの改行コードに統一する方法です。

System.SysUtilsユニットのAdjustLineBreaks関数を使うと、文字列の改行コードを統一できます。

  // CRLFにする
  S := System.SysUtils.AdjustLineBreaks(S, tlbsCRLF);

  // LFにする
  S := System.SysUtils.AdjustLineBreaks(S, tlbsLF);

  // OSのデフォルトの改行コードにする(WindowsならCRLF、MacならLF)
  S := System.SysUtils.AdjustLineBreaks(S, DefaultTextLineBreakStyle);

次のサンプルコードでは、選択したファイルの改行コードをOSのデフォルトの改行コードに変換します。

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
begin
  if OpenDialog1.Execute then
  begin
    // ファイルを読み込む
    S := TFile.ReadAllText(OpenDialog1.FileName);
    // OSのデフォルトの改行コードにする(WindowsならCRLF、MacならLF)
    S := System.SysUtils.AdjustLineBreaks(S, DefaultTextLineBreakStyle);
    // ファイルを保存する
    TFile.WriteAllText(OpenDialog1.FileName, S);
  end;
end;