2006年12月13日

VBでファイルのフルパス名からファイル名とパスを分割する方法がやっとわかりました〜

疲れた脳みそには、だれかがWeb上に書き残してくれたプログラムのコードは非常にありがたく思えます。
ついついそのまま使ってしまって・・・

・・・ん? あれ?
書いてあるとおりに動かない・・・

まあよくある話です。
サンプルコードなんて所詮そんな物。
ちょっといじればなんとかなるだろうと思っていたのに、何ともならないこともあるんですね〜

フルパス+ファイル名の文字列を、パスとファイル名に分割したかったんですけど、自分で考えたくなくて楽する方法をさがしてました。

何種類かのサンプルを試した結果、結局FileSystemObjectで・・・


Dim hFso As FileSystemObject
Dim sFileName As String 'パス
Dim sFilePath As String 'ファイル名

Set hFso = New FileSystemObject
sFilePath = hFso.GetParentFolderName("分割したいファイルのフルパス文字列")
sFileName = hFso.GetFileName("分割したいファイルのフルパス文字列")

とすれば、分割できました。
なんだ。

ただし、存在しているファイルに限られます。
これからこのファイルを作る・・・なんて時には役にたちません。

あらかじめ、FileExistsで存在確認しておきましょう。





posted by やすだ at 12:00| Comment(0) | TrackBack(0) | プログラム VB | このブログの読者になる | 更新情報をチェックする

2006年06月13日

初心者にはつらいVBのデータベースって・・・Part2





前回のADODCのプロパティ・・・とかDataGridが・・・とか、
なにせ初心者の作るVBデータベースは、
うまくいかないことだらけです。

もうちょっと、ほんとにわかりやすい解説書とか
ちょっと知ってる先生がいたらいいんですけどね。


さて・・・

ADODCのプロパティで、ConnectionStringを変更する
というところまでやりました。

ところが、開発環境と実行環境の違いで
ADODCがうまくいかないわけでした。

いろいろ教えてもらったところ、
ADODCは、動的にDBへ接続するほうが得意(?)らしく
ADODCのプロパティにある、ConnectionStringも
動的に書き換えればうまくいく。

ということがわかりました。

・・・動的(どうてき)って?????

つまり、プログラムが実行しながら書き換える。
(動きながら・・・ってことか?)
ということです。


これに対して性的というのは
・・・いや、静的(せいてき)の間違いです。

プログラムが動いてないときに(静かなときに?)ということ
ですね。



・・・で、話を戻して「動的」に書き換えるわけですが
プログラムを実行したとたんにエラーが出てもらっては
困ります。

なので、ADODCのConnectionStringは「 空白 」のままで
保存してください。(下記赤枠部)

ADODCのプロパティ

データグリッドのプロパティも「 空白 」にしておきます。
これをやっておかないと、フォームをロードしようとしたとたんに
エラーになります。

DataGridのプロパティ



・・・で、どんなふうにするかというと
ちょっと実際のコードに近い物で書いてみます。



Private Sub Form_Load()

Dim strADOCS As String 'Connection String
Dim strADORS As String 'ADODC Record Source

strADOCS = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\[ここにデータベース名];" & _
"Persist Security Info=False"
strADORS = "select * from [ここにDBのテーブル名]"

With datPrimaryRS
.RecordSource = strADORS
.ConnectionString = strADOCS
Set grdDataGrid.DataSource = datPrimaryRS
.Enabled = True
End With

End Sub




・・・ちょっと実際のコードそのままではないですが
こんな感じでやるとうまくいきました。

動的に(プログラムを実行して)フォームがロードされたときに
全ての接続を設定してやるわけです。
最初はDataSouce も ConnectionStringも「空白」。

ここがポイントかもしれませんね。


とにかく開発環境でADODCのプロパティに設定したデータベースに
いつ接続されるのか? それがわかりませんでした。
フォームのロードより、イニシャライズよりも先にDBへ
接続されてしまうので、接続文字列は空白にしておく必要があります。


ということで、初心者には分かるはずもない
VBのデータベースだったのでした。

そうそう、コメントはご自由にお願いしますね!


posted by やすだ at 00:00| Comment(0) | TrackBack(0) | プログラム VB | このブログの読者になる | 更新情報をチェックする

2006年06月02日

初心者にはつらいVBのデータベースって・・・





最近また、VBやってます。
とにかく1年に一回くらいしか仕事しないので、
さっぱり覚えがないことだらけです。

VB6を使っていてかなり前に、
データベース(以下、DBと省略)を使いたくて
ADODCとDataGridを使ったことがあります。

とりあえず一覧表が出せて、編集や確認ができれば・・・
ということで作りました。

フィールド件数なんかも100有るかないかぐらいで
多くないし、スタンドアロンでPC1台こっきりで使うので
まあこれでよかったです。

ところが、その時に困ったのは
開発環境と運用環境が違うと、DBへアクセスできない・・・
DBはmdb形式のACCESSで作ったテーブルが3つほどの
単純なもの。

そこでまずフォームを作りました。
フォームにはDataGridコントロールとADODCが貼り付けてあります。
あとはDB用のボタン・・・

DataGridとADODCのフォーム


・・・で、いろいろ勉強しながらやったんですが、開発環境で
プロジェクトやフォーム、DBをまとめて一つのフォルダで管理しようと
一カ所にまとめていました。
でもそれで「F8」キーなんかでステップ毎に実行していくと
DBが見つからないというエラーが。

DBへの接続文字は、ADODCのプロパティにある ConnectionStringで
指定しますが、これを今の一括管理しようとしているフォルダ内の
DBに割り当てると動きません。

・・・なんで????

ちなみにその時は、DBファイル名をフルパス(C:\○○\▲▲\DB.mdbのように)
指定せず、DB.mdbというファイル名だけにしていました。
それでDBが見つからない・・・?

どうやら、アプリケーションパス(App.Path) は、
プロジェクトのあるフォルダを読んでくるみたいですが
実行ファイルはVB98フォルダ内のVB6.EXE・・・
この違いがうまくいかないようです。
ということは開発環境での問題みたいです。

そこで・・・

■対策1■
プロジェクト一括管理フォルダ内のDBを、
VBのインストールされたフォルダへコピーしておく。

これでエラーが出なくなりました。

よしよし・・・っと。


ん? これは?

ははぁ〜???・・・

これって、管理フォルダの中のDBを読んでないことになるんでは?


いや全くそのとおりでした。失敗です。

そこで
■対策2■
ADODCのプロパティからConnectionStringを変えてみました。
ConnectionStringはADODCをDBに接続するための文字列です。

ADODCのプロパティ

ここに、
Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\○○\▲▲\DB.mdb";Persist Security Info=False

という感じで入力します。

するとこんどはVB98フォルダ内にDBがなくても、ちゃんとアクセスできます。
じゃあ、これをバックアップのために別のフォルダ名で保存して・・・

よしよし・・・っと。


ん? これは?

ははぁ〜???・・・

これって、フォルダ名を変えたら使えないんじゃないか?!


いや全くそのとおりでした。
DB.mdbを絶対パスで指定したので、コンパイルしてEXEを作ったとしても
これじゃあ動きません。

とほほです。

このときはここであきらめましたんですが、実は解決策がまだあったんです。

続きは別記事で。





posted by やすだ at 00:00| Comment(0) | TrackBack(0) | プログラム VB | このブログの読者になる | 更新情報をチェックする

2006年04月04日

VB2005っていいんでしょうか???





いままでパソコン向けのちまちましたソフト開発では、エクセル&VBA、アクセス&VBA、VB6、LOTUS123のDOS版(古っ!)などをやってました。
VB.Netはどうも噂では取っつきにくいような感じだったので、あえて取り入れてなかったのですが、VB2005とやらがあるそうで、どんなものなのか・・・といろいろ読んでみました。

参考に@ITのページ「VB2005は.NETへの移行を加速できるのか!?」へ


マイクロソフトのVB6サポートが終わったと言っても、今のところ私が作ってるソフトは、そんなたいしたものではないので不都合はないんだけど・・・

それともどこかのタイミングであ切り替えた方がいいのでしょうか???
posted by やすだ at 00:00| Comment(0) | TrackBack(0) | プログラム VB | このブログの読者になる | 更新情報をチェックする

ブログ村ランキングはこちら!
ブログランキング・にほんブログ村へ

RSS取得
Copyright(C)シーケンス制御で好きなだけPLC,PC,NCを使ってみよう
 by アネックソフト(株)安田

FANUC製のラダーで困ったらこちらをどうぞ→ PMCラダー屋.COM
ブログ記事は著作物です。記事や写真・デザインの無断引用・転用は法律で処罰されます。具体的には「10年以下の懲役若しくは1千万円以下の罰金又はその併科、法人は3億円以下の罰金3年以下の懲役もしくは300万円以下の罰金」が課せられます! 気をつけましょう!
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。