Watch, Follow, &
Connect with Us

Please visit our new home
community.embarcadero.com.


Welcome, Guest
Guest Settings
Help

Thread: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?



Permlink Replies: 11 - Last Post: Dec 14, 2016 10:20 PM Last Post By: Hideyuki Oya
Hideyuki Oya

Posts: 87
Registered: 6/6/07
SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 5:07 PM
いつもお世話になります。
Delphi10 Professionalを使っています。
FireDACを使ってhttp://docwiki.embarcadero.com/RADStudio/Seattle/ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9AFireDAC_%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6_SQLite_%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B
を参考にSQLiteを操作しようとしています。
まだデータベースファイルがないのでexecuteボタンを押すとエラーが出ます。
データベースなければ作成するように
OpenMode:= CreateUTF16;
というような感じで記述したいんですが、正確にはどこにどのように記述すればいいのでしょうか?
Hideyuki Oya

Posts: 87
Registered: 6/6/07
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 9:06 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
Hideyuki Oya wrote:
いつもお世話になります。
Delphi10 Professionalを使っています。
FireDACを使ってhttp://docwiki.embarcadero.com/RADStudio/Seattle/ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9AFireDAC_%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6_SQLite_%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B
を参考にSQLiteを操作しようとしています。
まだデータベースファイルがないのでexecuteボタンを押すとエラーが出ます。
データベースなければ作成するように
OpenMode:= CreateUTF16;
というような感じで記述したいんですが、正確にはどこにどのように記述すればいいのでしょうか?

検索していたら山本さんのサイトに載っていました。
http://www.gesource.jp/weblog/?p=6147

でも、まだエラーが出ます。
igy kk

Posts: 147
Registered: 9/11/03
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 9:25 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
実際に書いたコードと、表示しているエラーメッセージをここに挙げてみるのは、いかがですか?
Hideyuki Oya

Posts: 87
Registered: 6/6/07
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 10:00 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
Hideyuki Oya wrote:
いつもお世話になります。
Delphi10 Professionalを使っています。
FireDACを使ってhttp://docwiki.embarcadero.com/RADStudio/Seattle/ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9AFireDAC_%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6_SQLite_%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B
を参考にSQLiteを操作しようとしています。
まだデータベースファイルがないのでexecuteボタンを押すとエラーが出ます。
データベースなければ作成するように
OpenMode:= CreateUTF16;
というような感じで記述したいんですが、正確にはどこにどのように記述すればいいのでしょうか?

igy kkさん、回答ありがとうございます。
コードはembarcaderoのサイトのエラーと思われるところを修正したものです。
procedure TForm1.connectButtonClick(Sender: TObject);
begin
  outputMemo.Text := '';
  // データベース ファイルのパスを設定する
  // 'C:\Users\Public\Documents\...\Employees.s3db' を
  // 使用する SQLite データベース ファイルの絶対パスに書き換える
  FDConnection1.DriverName := 'SQLITE';
  FDConnection1.Params.Values['Database'] :=
//    'C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\Employees.s3db';
  'F:\Employees.s3db';
  try
    // 接続を確立する
    FDConnection1.Open;
    executeButton.Enabled := True;
    outputMemo.Lines.Add('Connection established!');
  except
    on E: EDatabaseError do
      outputMemo.Lines.Add('Exception raised with message' + E.Message);
  end;
 
end;
 
procedure TForm1.executeButtonClick(Sender: TObject);
var
  query: TFDQuery;
begin
  query := TFDQuery.Create(nil);
 
  try
    // SQL クエリを定義する
    query.Connection := FDConnection1;
    query.SQL.Text := 'SELECT * FROM Employee';
    query.Open();
    outputMemo.Text := '';
    // テーブルのフィールド名を追加する
    outputMemo.Lines.Add(String.Format('|%8s|%25s|%25s|', [' ID ', ' NAME ',
      ' DEPARTMENT ']));
    // テーブル内の各レコードを 1 つの行としてメモに追加する
    while not query.Eof do
    begin
      outputMemo.Lines.Add(String.Format('|%8d|%-25|%-25s|',
        [query.FieldByName('ID').AsInteger, query.FieldByName('Name').AsString,
        query.FieldByName('Department').AsString]));
      query.Next;
    end;
 
  finally
    query.Close;
    query.DisposeOf;
  end;
 
end;


OpenModeは山本さんのサイトを参考にオブジェクトインスペクタでomCreateUTF16に設定しています。
connect(接続)は正常にできるのですが、executeを押すとエラーが出ます。
エラーは
$774DA832 で初回の例外が発生しました。例外クラスは ESQLiteNativeException メッセージは '[FireDAC][Phys][SQLite] ERROR: no such table: Employee'。 プロセス Project1.exe (10832)
となり、デバッガ例外通知のブレークボタンを押すと「ソースファイルが見つかりません:FireDAC.Stan.Error.pas」と表示されます。
igy kk

Posts: 147
Registered: 9/11/03
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 10:13 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
Hideyuki Oya wrote:
エラーは
$774DA832 で初回の例外が発生しました。例外クラスは ESQLiteNativeException メッセージは '[FireDAC][Phys][SQLite] ERROR: no such table: Employee'。 プロセス Project1.exe (10832)

ちなみに、テーブル Employee は、生成してますか?
Hideyuki Oya

Posts: 87
Registered: 6/6/07
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 10:18 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
テーブル Employee は、生成してますか?

0KBのファイルが出来ています。
igy kk

Posts: 147
Registered: 9/11/03
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 10:24 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
Hideyuki Oya wrote:
0KBのファイルが出来ています。

おそらく テーブル Employee を生成する必要があります。
Hideyuki Oya

Posts: 87
Registered: 6/6/07
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 11, 2016 10:56 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
igy kkさん、ありがとうございます。
つまり、ファイルがないときにOpenModeで作成しても、作成されるのはデータベースだけでテーブルは作成されないということですか。
Embarcaderoのサイトの上の方にサンプルデータの場所が書いてあり、これをFドライブにコピーするとエラーは発生しなくなりました。
(データは表示されないですけど、他にもコピーするのでしょうね、きっと)
igy kk

Posts: 147
Registered: 9/11/03
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 12, 2016 4:22 AM   in response to: Hideyuki Oya in response to: Hideyuki Oya
Hideyuki Oya wrote:
つまり、ファイルがないときにOpenModeで作成しても、作成されるのはデータベースだけでテーブルは作成されないということですか。

はい。

(データは表示されないですけど、他にもコピーするのでしょうね、きっと)

Sample カテゴリ
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/Category:Sample
には、
Source code for the samples is checked into a read-only Subversion repository available at
http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RADStudio_Berlin
とあるので、リンク先の[Data]にある Employees.s3db の テーブル Employee には、データがあるようです。
Hideyuki Oya

Posts: 87
Registered: 6/6/07
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 12, 2016 5:35 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
igy kkさんありがとうございます。
おっしゃる通りEmployees.s3dbにデータがあるようです。
(エディタで開いてみたところ、文字化けしていましたが、従業員の名前、所属の文字列が入っていました。)
しかし、メモにはフィールド名は表示されますが、データは表示されません。

でも、今回のはSQLiteを使用するためのテストです。
実際にやりたいことを別スレッドにします。
igy kk

Posts: 147
Registered: 9/11/03
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 14, 2016 3:26 AM   in response to: Hideyuki Oya in response to: Hideyuki Oya
Hideyuki Oya wrote:
しかし、メモにはフィールド名は表示されますが、データは表示されません。

outputMemo.Lines.Add(String.Format('|%8d|%-25|%-25s|'

outputMemo.Lines.Add(String.Format('|%8d|%-25s|%-25s|'
にしてみるのは、いかがですか?
Hideyuki Oya

Posts: 87
Registered: 6/6/07
Re: SQLiteを使用するときのOpenModeはどこに、どのように記述すればいいのでしょうか?
Click to report abuse...   Click to reply to this thread Reply
  Posted: Dec 14, 2016 10:20 PM   in response to: Hideyuki Oya in response to: Hideyuki Oya
igy kkさん、いつもありがとうございます。
うまく表示されるようになりました。
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02