Accessのテーブルの内容を表示するには?

解決


りょう  2004-06-22 20:16:03  No: 9572

Delphi7proを使って、Accessにあるテーブルの内容をDBMemo
などに表示して、自己学習ソフトを作りたいのですが、ネット
でいろいろ調べた結果やり方がよく分かりません。どなたか
ご教授ください。また、他にもっと良いやり方を知っていらっ
しゃる方はお教えください。


@っしー  2004-06-22 21:10:50  No: 9573

http://www.borland.co.jp/delphi/papers/ado/ado01.html

ここが参考になりませんか?
SQLサーバー、Excelの例がありますが、Accessファイルでも同様です。

お役に立てれば幸いです。


ふじっこ  2004-06-22 21:21:37  No: 9574

> Delphi7proを使って、Accessにあるテーブルの内容をDBMemo
> などに表示して、自己学習ソフトを作りたいのですが、ネット
AccessMDBにアクセスする方法でしょうか?
それでしたらTADOConnectionを使用すればアクセスできますよ
TADOConnectionがPro版にあったかどうかは、少し不安ですが・・
蛇足かもしれませんが
MDBへTADOConnectionを使用して接続するには

DB1:TADOConnection;//←フォームにコントロールを貼り付けていると仮定
コネクション文字列を下記のように
してするか、ODBCにて登録した名前を使って
MDBへアクセスします
DB1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hoge.mdb;Persist Security Info=False';
DB1.Open
DB1.CLose

> ご教授ください。また、他にもっと良いやり方を知っていらっ
> しゃる方はお教えください。
もっと良いやり方というのは、
データベースへのアクセス方法でしょうか?
それとも  作成する自己学習ソフトについてでしょうか?
このあたり、もう少し言葉を足していただけないですか?


ふじっこ  2004-06-22 21:22:27  No: 9575

おっと、@っし−さんがレス済みでしたね
失礼しました


@っしー  2004-06-22 21:35:39  No: 9576

紹介したBorlandサイトはDelphi5を使った場合の情報です。

ふじっこさんの情報のほうが親切ですね。  (^^ゞ

Delphi7ProにはADO関連のコンポーネントが標準で装備されています。(D6からだっけかな?)
ただ、Delphi7ProのヘルプはADO関連のリンク情報が欠落していて、情報不足なんです。D7用のパッチが公開されていますが、ADO関連のヘルプが修正されているのかわかりません。パッチの信頼度が低いと判断していますので、当方はパッチを当てていません。

お役に立てれば幸いです。


りょう  2004-06-25 22:49:08  No: 9577

ありがとうございます。
大変恐縮ですが、テーブルの内容をMemoに表示するまでの過程を具体的に教えていただけないでしょうか。なにぶん初心者なもので、すみません。

もっと良いやり方というのは、作成する自己学習ソフトの作り方についてです。もっと良い方法をご存知ならお教え下さい。


@っしー  2004-06-26 00:18:28  No: 9578

http://www.borland.co.jp/delphi/papers/ado/ado01.html

上記URLでは、MS SQL ServerとExcelファイルでの接続例がありますが、MDBファイルを接続したい場合は、TADOConnectionのOLE DB プロバイダにMicrosoft Jet 4.0 OLE DB Providerを選択し、アクセスのファイル(MDBファイル)を選択して、接続テストが成功すれば、接続自体はできています。
また、TDBGridでのデータ表示例が掲載されていますが、さらにTDBMemoを貼り付けて、DataSourceとDataFieldプロパティを設定すると、TDBMemoにデータが表示されます。
TDBNavigatorも貼り付けると、フィールドの移動・追加・削除等の作業が出来るようになりますので、DBの勉強には良いかもしれません。

お役に立てれば幸いです。


ふじっこ  2004-06-28 20:32:15  No: 9579

>もっと良いやり方というのは、作成する自己学習ソフトの作り方についてです。もっと良い方法をご存知ならお教え下さい。

これについては、
1.まず、どのような自己学習ソフトを作成したいか?
につきると思います。
りょうさんが、思い描いている内容をまず、まとめられたのでしょうか?
市販されている自己学習ソフトを実際手に取り
インタフェイスなどや、最終的に学習させたい内容について
まとめなければ、ただ漠然と自己学習ソフトの良い作成方法について
意見を求めても答えは帰ってきません。

ソフト作成について、ベストな方法というのは
仕様作成段階で決まります。
どんな自己学習ソフトを作成したいのかを
くどいようですが、
何をどのようにして自己学習ソフトを作成するか
りょうさんご自身で整理してください。

でも、ここでりょうさんが考えまとめられた自己学習ソフトの
内容を公開するのではなく
作成したい自己学習ソフトをDelphiで実現させるために
Delphi上で不明な点について質問されると良いと思います。


りょう  2004-07-02 01:37:10  No: 9580

いろいろと教えていただきありがとうございます。
@っしーさんに教えていただいたようにしたところ、表示することができました。
そこでさらに質問ですが、DBNavigatorを使わずに、ボタンを押すと次の表示に切り替わるようにするにはどうしたらよいですか?
また、実行すると
EVariantTypeCastErrorクラスの例外を生成しました。
'Null型からString型へのバリアント型変換はできません'
という表示が出て停止してしまいます。exeファイルから実行すると問題なく実行できるのですが....
お手数ですがよろしくお願いします。


HOta  2004-07-02 02:08:22  No: 9581

ADOQuery1.Next;
で次のレコードに進みます。
EOFエラーが出る可能性があります。

型変換のエラーはソースもなく分かりません。


@っしー  2004-07-02 10:31:59  No: 9582

>DBNavigatorを使わずに、ボタンを押すと次の表示に切り替わるようにするにはどうしたらよいですか?

DBNavigatorを沢山貼り付けて、個々のDBNavigatorの表示形式を変えてやるのはダメですか?  (なんか日本語変ですが理解できます???)

次のレコードに移動するだけでしたら、Next表示用のオプションのみをTrueにするだけではダメですかね?

※手元にDelphiがないので適当に書かせていただいています。m(__)m


ふじっこ  2004-07-03 00:36:33  No: 9583

> EVariantTypeCastErrorクラスの例外を生成しました。
> 'Null型からString型へのバリアント型変換はできません'

型変換エラーについてですが
現在DBNavigatorを使っているとして
DBからどのようにデータを参照されているか
不明ですが
参照されている列もしくはデータにNULLが格納されてませんか?
NULLとNULL文字列では扱いが異なります


りょう  2004-07-03 01:38:14  No: 9584

ありがとうございます。次の表示に切り替える作業はうまくいくようになりました。さらに質問ですが、ランダムにレコードを選んでそれを表示するには、どうしたら良いでしょうか?今のところADOQueryは使っていません。使った方が良いでしょうか?

型変換のエラーについてですが、@っしーさんに教えていただいたページの通りに作業していっただけなので、ソースは何も記述していません。どなたかご存知の方は教えてください。


りょう  2004-07-03 01:42:28  No: 9585

ふじっこさん、すみません。NULLが格納されているというのはどういうう状態を言うのでしょうか?
データの参照については、@っしーさんに教えていただいたページの通りです。


ふじっこ  2004-07-03 02:10:26  No: 9586

>NULLが格納されているというのはどういうう状態を言うのでしょうか?
MDB内で作成するテーブルで
MASTER_Aというテーブルに
列名      型       長さ  0の長さを持つ文字列を許可  NULLの許可
CD_MST    文字列    10    する                      する
NAME_MST  文字列   120    する                      する
とある場合
instert into MASTER_A(CD_MST, NAMEMST)
values('10', NULL)と
挿入できます
このNULLは、文字列の長さ0バイトの文字列('')とは
ことなる点です
文字列型の列にNULLが格納されている場合
文字列ではないとされることがあります

対処としては、DbNavigateを使用しないで
1項目ずつNULLかどうか調べNULLなら文字列長0バイトの’’を
セットするか
DBのデータでNULLなっているデータを修正するかの
どちらかです。


HOta  2004-07-03 05:52:23  No: 9587

Dataset.FIeldByName('項目名').isnull
で検査できます。


@っしー  2004-07-03 08:00:13  No: 9588

>ランダムにレコードを選んでそれを表示するには、どうしたら良いでしょうか?

どういう意味か理解できないのですが、Tableを使っているのでしたら、Filterプロパティに設定するのではないですか?

Queryでしたら、Where句ですね。

ちなみに、なにかDelphiでDB関連の書籍をお持ちでしょうか?  >りょうさん
Web上で一から理解するには限界があると思いますよ。

@っしー


HOta  2004-07-03 17:13:24  No: 9589

必要な条件でレコードから検索するのなら、QueryのSQL文を使った方が、
後々便利だと思います。
もし、Tableでやっているなら、その部分をQueryに変更して、
SQL文を設定すれば同様に使えます。


りょう  2004-07-07 23:43:40  No: 9590

皆さん、ご親切に教えていただきありがとうございました。
おかげさまで、なんとか作れそうです。本当にありがとうございました。

また分からないことがあったら、質問させていただきます。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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