プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。CSVファイル(1レコード9項目、平均50レコード)を何らかのオブジェクトに格納し、各レコードの項目を編集・一括更新を行う方法はないか、現在模索しております。以前のスレッドではOLEのエンジンを使用してCSVファイルを模擬的にDBとしてデータグリッドに表示させる方法を確認し、試行しましたが、編集できない&レコード読み飛ばしができないなど、不都合があったため、改めて質問させていただきました。一番思いつくのは、テキストボックスを2次元に並べて、コマンドボタンで一括保存などがありますが、コントロール数やオブジェクト数にも配慮した方法がありましたら、お教えください。

A 回答 (8件)

DBは持っているのでしょうか?


とりあえずDBにデータを蓄積してSQLで管理するのが、
いいと思います。
その後、DBから構造体でデータを取ってきて、そのままCSVに出力したら良いのではないでしょうか?
    • good
    • 0
この回答へのお礼

tak2003さん、ごかいとうありがとうございます。DBはACCESSしかありません・・・しかも表示の元ネタはかならずCSVファイルでなければいけません・・・CSVファイルの内容を表示する過程で、一度MDBファイルに落としてグリッドへ関連付けるやり方も考えています。この場合、速度面では劣ってしまうのでしょうか?実はCSVファイルをリストから選択し、リアルタイムで各ファイル内容の表示切替を行っています(意外と肝心なことをお伝えしてませんでした)恐らくここで表示ラグがあるかも・・・

お礼日時:2004/07/27 07:40

ACCESSやEXCELでやるというのはどうでしょう?

    • good
    • 0
この回答へのお礼

palmmyさん、ご回答ありがとうございます。OLEを使用する、ということでしょうか?スキル的なものもあってその領域の情報は全くないのですが、EXCELワークシートをオブジェクト化してデータを格納し、編集・保存するという参考になるサイトを検索してみましたが・・・見付かりませんでした・・・良かったら教えてください。

お礼日時:2004/07/27 07:43

50行9列程度なら


フレキシブルグリッドが使えると思います。(VB6の場合)

CSVファイルをOpenして1行ずつ読込、
Spritで各項目に分けてグリッドに格納します。

編集はTextBoxを使った裏技で行います。(詳細は検索してください)

編集が終了したら同じファイル名で上書きします。
    • good
    • 0
この回答へのお礼

Hayashi Trekさん、ご回答ありがとうございます。実は現状でフレキシブルグリッドに読み取り専用で表示させています。恐らくクリックされたセルをテキストに転送するのですね?ロジックも非常に簡単にできそうなので、切り札としてとっておこうとおもいます。

お礼日時:2004/07/27 07:46

こんばんは


ぼくがよくやる方法をひとつ。
テキストボックスを2次元に並べてはそのままですが、50行も並べるとコントロールの数だけでたいへんなことになってしまいます。
一度に表示するのを仮に10行としたら、9×10のテキストボックスを並べて、横にスクロールバーを10行分の高さで配置しておきます。

CSVのデータは2次元配列なり構造体なりに入れてあげます。レコードの移動削除を考えると構造体の方があとあと楽ですよね。ここでは仮に[Array(49)]とします。

実際にデータをテキストボックスに表示する方法-----------
レコードが10を超えたら、レコード数-10をスクロールバーのMaxプロパティに入れてあげます。
テキストボックスに表示するのは専用のプロシージャ(仮に[hyouji]とします)で行い、引数が[3]なら[Array(3)]から1行目に表示、以下10行目まで繰り返します。

スクロールバーのチェンジイベントで、[hyouji] プロシージャにスクロールバーのValueを渡してあげれば、見えていなかったデータを表示します。

※注意点---------------------------------------
●データを表示するのに配列の存在しないインデックスを指定しないよう適宜対応してください。
●テキストボックスの位置を動かすわけではないので、スクロール時の動作感は、いまいちです。

※利点------------------------------------------
●コーディングが割りと簡単です。
●標準コントロールだけでできます。
    • good
    • 0
この回答へのお礼

freezemoonさん、ご回答ありがとうございます。名案ですね!実はCSVファイルレコードの項目に、0から3までの値を"する"、"しない"などの選択肢に使ってコンボ化したかったので、コントロール配列数が10くらいで収まれば、これも可能になりそうです。注意書きも大変助かります。スクロール時の見映えのみ気にしなければ、何とかいけそうです。

お礼日時:2004/07/27 07:53

CSVファイルを一度DBに落としてDBで問い合わせや削除などを行なった方が楽だと思います。



以前に組んだシステムでは、
CSVから直接データを1件ずつ取ろうとしていたのですが、2000件を超えたあたりから時間がめちゃくちゃ掛かる事に気がついて、DBで一括管理に変わりました。

CSVファイルを必要な分だけ先にDBに読ませて、加工後にCSV出力する方がいいんではないでしょうか?
1件ずつファイルを読んで加工して出力を繰り返したら、プログレスバーが止まってしまいます。
VBよりもSQLの方が簡単で高速なので、(ストアドなど)
お勧めです。

データグリッドはOCXを使ったので苦労はあまりなかったですよ。(画面制御でフォーカスが悪戯される不具合はありました。)
    • good
    • 0
この回答へのお礼

tak2003さん、再度ご回答感謝いたします。データグリッドにこだわった場合、仰るとおりCSVファイルを一括読出し->mdbへレコード格納->mdbをデータグリッドへ連結がベストなようですね。表示する項目に、CSV内部は0-3の数値で、意味が"しない""する"などになっている箇所があり、グリッドのヘッダにこの数値説明を記述し、編集可能とする方法も考えてます。余談になってしまいますが、Accessでストアドを持つことは可能なんでしょうか?ストアドそのものの知識も乏しいので、どういうことができるのか分かりません・・・

お礼日時:2004/07/27 11:12

>OLEを使用する、ということでしょうか?


いえ、VBではなくACCESSやEXCELでCSVを読んで、そこで修正しCSVにもどしては?というご提案です。

ユーザーが使用するアプリでデータの修正を任意に行なうのであればVBにこだわることも無いのかな、と思ったので。
    • good
    • 0
この回答へのお礼

palmmyさん、再度ご回答ありがとうございます。実は現時点で(1)Excel上での編集・保存(2)VBソフト上での編集・保存の2通りの方法を要求されていて、(1)は先頭レコードをヘッダ代わりにして各カラム(項目)の説明(入力値の範囲など)を記述しすることで、実機以外でのデータ編集方法がユーザレベルで理解可能にしてあります。しかし、やはり使い勝手を考えると、編集対象のCSVファイルは上記のVBソフトで運用するので、VBソフト側では表示のみで、編集を市販のアプリケーションに頼るのはちょっとかっこ悪いですよね・・・

お礼日時:2004/07/27 11:22

>VBソフト側では表示のみで、編集を市販のアプリケーションに頼るのはちょっとかっこ悪いですよね・・・



あまり気にしませんが…
費用対効果もありますし、苦労してVBで作っても、ユーザーから"EXCELの方が使いやすい"と言われればそれはそれでかっこ悪い気もします。

ERPでも、EXCELへの出力/入力はありますよ。

修正内容・修正頻度などにもよると思うので一概にはいえませんが、

修正が一点一様であればEXCEL+VBA
修正がパターンかできるならACCESSや、VB+DBGRID
修正が毎回同じならVBで自動化
とか

EXCEL側をVBAで作りこむというのも選択肢としてあっても言いと思います。
[CSV読み込みボタン]で読み込んで、ヘッダーはVBAでセット。
異常値のチェックもVBAで仕込む。
[CSV書き出しボタン]で書き込み。
書き込み後VBアプリの起動というのもできます。

VBから、[EXCELで修正するボタン]で
・CSVデータ作成
・EXCELの起動
・EXCEL起動時にCSVを自動読み込み
とか連携をするとかっこ悪くはないと思います。


とりあえず、そんな考えもありますよ、ということで。
    • good
    • 0
この回答へのお礼

palmmyさん、具体的な運用を提示いただき、大変ありがとうございます。正直言って、"VBAがあったかぁ"という心境です・・・VBソフトをインストールするパソコンにはOffice製品は入ってないのですが、ユーザ個々の端末では使用されているかもしれません。仰るとおり、一つの選択肢(ユーザへの提案)として、熟慮してみたいと思います。ありがとうございました。

お礼日時:2004/07/27 17:18

#5です。


お礼に書かれていた質問についての解答です。
ストアドプロシージャはオラクルでは組むことができますが、MSアクセスでは残念ながら無理です。
ストアドとはPL/SQLで、ある程度のブロックを関数化したようなものです。
Cと同じ位の実行速度が出ますので、処理速度も速いです。
一度作ってしまえば他のPGでも流用ができるので重宝します。
    • good
    • 0
この回答へのお礼

tak2003さん、説明ありがとうございます。ストアドってAPIみたいですね。オラクルで組むんですかぁ・・・大規模システムなどで発行する共通関数などに使われてそうですね。ちょっと敷居が高いやり方ですが、関連サイトを調べてみます。ありがとうございます。

お礼日時:2004/07/28 08:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!