@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

データベース操作について2つの質問(出来れば早急におねがいします)

1
投稿者投稿内容
龍虎(たつとら)
会議室デビュー日: 2005/06/01
投稿数: 7
投稿日時: 2005-06-09 02:35
環境:
VB.NET 2003
Windows XP home edition
Access 2002

質問なんですがいくつかありますがよろしくお願いします
また、それぞれの質問が既出の場合は申し訳ありません

質問1:
まず、プログラムの流れなんですが、データ表示フォーム(グリッドを利用したものとカード型風のもの2種類あります)を呼び出したときに、全部を表示できるように
パラメータに"%"を利用しています。そして、検索条件をユーザが入力すると、その検索結果だけが返ってくるようにしたいのですが
すべての列が入力されてるとは限りません。つまりNULL値を許可しています。
そこでクエリビルダの検索条件で「〜 LIKE ? OR IS NULL」としてるのですが。
最初に全件表示のときはこれで問題ないのですが、検索条件をきめたあとは、
その検索条件とその場所にNULL値が入ってるデータが検索されてしまいます。
検索条件を決めたときはNULL値が入ってるデータは要らないのです
これに対しての対処法をお願いします。ちなみに、検索させたい項目は10項目ほど有ります。

質問2:
本などを見て、データのエクスポートの方法はわかったのですが
インポートの方法がわかりません。
XML、CSVどちらの方法でもかまわないので、簡単な方法を教えてください。
_________________
VB.NET経験不足(初心者とも言う)
説明不足などがあれば指摘お願いします

[ メッセージ編集済み 編集者: 龍虎(たつとら) 編集日時 2005-06-09 02:44 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-06-09 04:26
まずは、SQLを勉強してはいかがですか?
回答だけをもらっても、次に現れる問題を解くことはできないままです。
http://www.google.co.jp/search?hl=ja&q=SQL&lr=

入力された条件によってSQLを変化させる必要があります。
ORで繋いでいるIS NULLあたりを修正することになるでしょう。


インポートについてもいろいろと参考になるサイトがありますので、まずはあちこち見てみて、自分がやろうとしていることに一番近いものを見つけてはいかがでしょう。
http://www.google.co.jp/search?hl=ja&c2coff=1&q=.NET+CSV+%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88&lr=


これでもわからないことがあったら再度質問を投げてみてください。

あと、タイトルは質問内容を簡潔に書いたほうが、答えられそうな人が読んでくれるので、回答を得られるのが早くなりますよ。

_________________
たつごろー
codeseek
こみゅぷらす
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2005-06-09 09:27
困っていらっしゃるようなのでお役に立てればと思ったのですが
質問の内容が煩雑すぎてなかなか答えにくいです。もっと質問をシンプルに組み立てなおしてはどうでしょうか?

質問1の件はもう少し問題点を絞った方がレスがつきやすいはずです。
一般的には条件に応じてSQL文を再生成することになると思います。
たとえば列ColAから「ア」を抽出するなら、SELECT ... FROM ... WHERE ColA LIKE '%ア%' のようなSQL文になります。

質問2の件は「インポート」といってもいろいろあるので一概には言えないのですが
私はファイルを開いて1行づつループをまわして解析しながらINSERT文またはDataTable.Rows.Addを使ってデータベースに書き込んでいくという昔ながらの手法を良く使います。
いげ太
常連さん
会議室デビュー日: 2004/10/27
投稿数: 32
投稿日時: 2005-06-09 14:19
> 質問2
インポートが何を指してるのか不明ですが、Access ってことなんで
[ファイル] メニューの [インポート] のことかな?と想像して。


- Access の COM を使って CSV ファイルをインポートする方法

まずは参照設定。
COM タブから Microsoft Access Object Library を追加。

で以下コード。
パスとかテーブル名は環境に合わせて変えてください。

コード:
Dim mdbPath As String = "C:\test\foo.mdb"   'mdbのパス
Dim oAccess As Access.ApplicationClass
oAccess = New Access.ApplicationClass()

oAccess.OpenCurrentDatabase(mdbPath)

Dim schemaFile As String = ""               'エクスポート定義ファイル名
Dim tableName As String = "ImportTable"     'テーブル名
Dim csvPath As String = "C:\test\bar.csv"   'CSVのパス
Dim hasFieldNames As Boolean = False        'ファイルの先頭行が列名の場合 True

oAccess.DoCmd.TransferText( _
    Access.AcTextTransferType.acImportDelim, _
    schemaFile, _
    tableName, _
    csvPath, _
    hasFieldNames)

oAccess.Quit()

龍虎(たつとら)
会議室デビュー日: 2005/06/01
投稿数: 7
投稿日時: 2005-06-09 16:21
早速の返答とご指摘ありがとうございます。
質問1なんですが
簡単に言うと最初の呼び出し時は全件読み込みで
その後検索によってデータ抽出をしたいのです。
で最初からパラメータを使って楽にやりたいと思ったので
「LIKE ? OR IS NULL」を使っていました。
ACCESSに限ったことではないかもしれませんが調べた結果
"%"はNULLを検索できないとのことで「OR IS NULL」を最初の呼び出しのためにつけました。
"%"はNULL値は検索できなくても文字列長0のものは検索できるとのことで、
登録時(アプリから登録します)文字列長0にする方法などは無いのかと思ったのですが・・・
コード:
If textBox1.text = Notthing then
    tourokuText=""
End If


見たいな感じにしても無理でしたので何かほかに方法があるのかと思い質問させていただきました。

質問2については
引用:

いげ太さんの書き込み (2005-06-09 14:19) より:
- Access の COM を使って CSV ファイルをインポートする方法

まずは参照設定。
COM タブから Microsoft Access Object Library を追加。

で以下コード。
パスとかテーブル名は環境に合わせて変えてください。

コード:
Dim mdbPath As String = "C:testfoo.mdb"   'mdbのパス
Dim oAccess As Access.ApplicationClass
oAccess = New Access.ApplicationClass()

oAccess.OpenCurrentDatabase(mdbPath)

Dim schemaFile As String = ""               'エクスポート定義ファイル名
Dim tableName As String = "ImportTable"     'テーブル名
Dim csvPath As String = "C:testbar.csv"   'CSVのパス
Dim hasFieldNames As Boolean = False        'ファイルの先頭行が列名の場合 True

oAccess.DoCmd.TransferText( _
    Access.AcTextTransferType.acImportDelim, _
    schemaFile, _
    tableName, _
    csvPath, _
    hasFieldNames)

oAccess.Quit()




こちらを試してみようと思います
長々と乱文しつれいしました。
今後ともよろしくお願いします
_________________
VB.NET経験不足(初心者とも言う)
説明不足などがあれば指摘お願いします
1

スキルアップ/キャリアアップ(JOB@IT)