簡単なデータベースをつくりたいのですが

解決


Noby  2018-05-24 01:28:24  No: 49164

お世話になります。初心者の質問ですので、

基本的な質問となり恐縮です。

簡単な名簿のデータベースを作りたいと思っています(以前にアクセスは

少し使った経験はあります)。

管理情報としては、登録日、名前、生年月日、備考A、備考B  です。

Delphiでデータベースを作ったことがないのですが、

RadStudio10.2Tokyoで作ることは出来るのでしょうか? 

出来る場合、参考になるようなサンプルはございますでしょうか?  

あるいは学習サイト等ご存知でしたら、教えていただけますでしょうか?


通りすがり  2018-05-24 03:11:52  No: 49165

お持ちのDelphiまたはRAD StudioのエディションはStarter/Pro/Ent/Archのどれでしょう?
ちなみに一般的な意味でDelphiで作れるのはデータベースを利用するプログラム、つまり
何らかのデータベースに格納されているデータを読み書きして何かをするプログラムですが、
認識はこれで合っていますか?


Noby  2018-05-24 18:04:05  No: 49166

通りすがりさん

いつもありがとうございます。(^_^;)

Rad  Studioのエディションは、Embarcadero® Delphi 10.2  Starterと

なります。アクセスで作ったデータベース(以外はよく判らないので)に

繋げて、取り敢えず使用してみようと思っています。


Noby  2018-05-24 18:47:44  No: 49167

現在、アクセス2010で

SaMeibo.accdb  ⇒なお、*.mdbの形式でも作れます。

T_SMeibo  (テーブル名)

登録日、名前、生年月日、年齢、備考1、備考2

を作っています。

  上記とDelphiで繋げて、読み書きする方法が判らない状態です。


Noby  2018-05-25 02:29:41  No: 49168

下記のMr.Xrayさんのを参考にZeosLibの設定は出来ました。
http://mrxray.on.coocan.jp/Delphi/plSamples/564_ZeosLib_DelphiBerlin.htm#07

アクセスでDBも作成して、あとはつなげるだけになりました。

Button1を押しても表示されない状況です。

どこが悪いのでしょうか・・・・
---------------------------------
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB,
  Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, ZAbstractRODataset, ZAbstractDataset,
  ZAbstractTable, ZDataset, ZAbstractConnection, ZConnection;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    Button1: TButton;
    DataSource1: TDataSource;
    ZConnection1: TZConnection;
    ZQuery1: TZQuery;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  //TDataSource,TDBGridの設定
  DataSource1.DataSet := ZQuery1;
  DBGrid1.DataSource  := DataSource1;
end;

//=============================================================================
//  フォームを閉じる時の処理
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ZQuery1.Close;
  ZConnection1.Disconnect;
end;

//=============================================================================
//  ZeosLibを使用してJETデータベースに接続
//  Micorosoft Access 2007/2010 が使用しているJETエンジンが対象
//
//  JETエンドンのデータベースは1つのファイルに複数の表を格納する
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LConnectStr : string;
begin
  //念のため接続を切断してから設定
  ZQuery1.Close;
  ZConnection1.Disconnect;

  //接続文字列の設定
  //パスワードの設定あり
  LConnectStr := 'Provider=Microsoft.ACE.OLEDB.12.0'
               + ';Jet OLEDB:Database Password=123'
               + ';Data Source=' + ExpandFileName('D:\■■DelphiSoft\DbTest\Win32\Debug\TEST2007.mdb')
               + ';Persist Security Info=False';

  ZConnection1.Database := LConnectStr;
  ZConnection1.Protocol := 'ado';
  //データベースへ接続
  ZConnection1.Connect;

  //TZQueryの設定
  //日本語の表名は[]で括る
  //日本語の項目名は[]または"(ダブルクォーテーション)で括る
  ZQuery1.Connection := ZConnection1;
  ZQuery1.Close;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Add('select * from [食品カロリ表] order by [番号]');

  //クエリを開く
  ZQuery1.Open;
end;

end.


igy  2018-05-25 04:00:21  No: 49169

ちなみに、テーブル「食品カロリ表」は、Mr.Xrayさんのページにある例と同じですが、
Noby さんの TEST2007.mdb にも、食品カロリ表 というテーブルは、ありますか?


Noby  2018-05-25 18:06:11  No: 49170

igyさん

いつもありがとうございます。

テーブル名、パスワードも同じに設定しています。

特別エラーもなく、ボタンを押しても何も表示されない状況です。

コンパイル後の同じフォルダーにTEST2007.mdbを置いています。

どこが悪いのでしょうか?


igy  2018-05-25 18:20:33  No: 49171

> 特別エラーもなく、ボタンを押しても何も表示されない状況です。 

では、
> procedure TForm1.Button1Click(Sender: TObject); 

の最後
>  //クエリを開く 
>  ZQuery1.Open; 

の後に、

with ZQuery1 do
begin
  First;
  if not EOF then
    ShowMessage('データあり!')
  else
    ShowMessage('データがありません。');
end;

を追加した場合、どうなりますか?


Noby  2018-05-25 19:05:27  No: 49172

igyさん

ありがとうございます。

データあり!  と出ますね。


igy  2018-05-25 19:17:21  No: 49173

それでは、
>//  フォーム生成時の処理 
>procedure TForm1.FormCreate(Sender: TObject); 
のところに、

    Caption := 'データベースのテスト';
    Application.Title := Caption;

を追加したら、フォームのタイトル等が、「データベースのテスト」になりますか?


Noby  2018-05-25 19:39:14  No: 49174

>フォームのタイトル等が、「データベースのテスト」になりますか? 

ならないですね。


igy  2018-05-25 19:41:49  No: 49175

>//  フォーム生成時の処理 
>procedure TForm1.FormCreate(Sender: TObject); 

このFormCreateは、(フォーム生成時に)動作していますか?


Noby  2018-05-25 19:50:57  No: 49176

igyさん

FormCreateが動いていなかったんですね。

削除して再度認識させましたら、きちんとデータベースが表示

させることが出来ました。

初めて、DELPHIでデータベースに接続をさせることが出来ました。感動です!!

ちなみに、OnCreateが動かなくなった原因というのは何なのでしょうか?


igy  2018-05-25 19:57:20  No: 49177

> ちなみに、OnCreateが動かなくなった原因というのは何なのでしょうか? 

実際の状態を見ていないので、正確にはわかりませんが、
オブジェクトインスペクタで、正しく設定されていなかった(あるいは、設定がクリアされていた) とかかもしれませんね。


Noby  2018-05-25 20:13:38  No: 49178

>ブジェクトインスペクタで、正しく設定されていなかった
>(あるいは、設定がクリアされていた) とかかもしれませんね。 

そうなんですね。勉強になりました。

  igyさん、通りすがりさん

ご親切にご対応下さり本当にありがとうございました_(._.)_

このあと、使用目的に合いそうですので、SQLITEともつなげてみようと

思います。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加