DOBON.NET DOBON.NETプログラミング掲示板過去ログ

相対パスの表し方U

環境/言語:[VB.NET XPPro]
分類:[.NET]

前回のトピ、相対パスの表し方 では沢山の方々からお返事いただき真にありがとうございます。
追加で質問を書きます。

T.前回教えていただいた、
"Data Source=" & System.IO.Path.Combine(Application.StartUpPath ,"Sample.mdb") & ";" _

という構文では、エラーが出ます。
「'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。」
(でもなぜかReleaseの中のexeファイルはエラーが起きません)

U.フルパスの中に全角文字が入っていると機能しません。
これを回避できる方法はありますか?
同じことの繰り返しでは時間の無駄ですので、どのようなデバッグを行い、どのような結果を得たのかを明記してください。当たり前のことですが、どのようなパスが取得され、そのパスが正しく、ファイルが存在することは確認しましたか?
2005/10/13(Thu) 00:35:17 編集(投稿者)
2005/10/13(Thu) 00:35:13 編集(投稿者)

先ずTからです。

'>>Declarations の部分
Private existmax As Integer
  Private Round As Short 'ラウンド判定
'<<ここまで
(中略)
Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
Dim oleCn = New OleDb.OleDbConnection
Dim oleCmd As New OleDb.OleDbCommand
'Dim da As New System.Data.OleDb.OleDbDataAdapter
Dim dt As Integer
Dim dr As String
Dim i As Short

'接続文字列を作成して接続を開始する

oleCn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Application.StartupPath & "\XXX.mdb;" & _
"Persist Security Info=False"

'選択SQL文を作成してデータを取得する
oleCmd = New OleDb.OleDbCommand("SELECT max(Round_ID) FROM Question", oleCn)
existmax = CInt(oleCmd.ExecuteScalar())
For i = 1 To existmax
cmbID.Items.Add(i)
Next i
' 接続を終了する
oleCn.Close()

XXX.mdbというアクセスファイルに Questionというテーブルがあり、その中のRound_ID という列の最大をとり、1から連続してその最大値までcmbIDというコンボボックスで選択できるようにします。

Round = Me.cmbID.Text その後cmbIDというコンボボックスの値をRound という値にセットします。

しかしcmdStartボタンをClickすると間もなく

「'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。」

という文だけでて 混合モード という画面からよくわからない文字の羅列が出てきます。

アドレスのパスについては とあるラベルに違うコマンドボタンを設定して
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.lblQuestion.Text = System.IO.Path.Combine(Application.StartupPath, "XXX.mdb")
If System.IO.Path.Combine(Application.StartupPath, "XXX.mdb") = _
"D:\VB\XXX\bin\XXX.mdb" Then
Me.lblQuestion.Text = Me.lblQuestion.Text & "〇"
End If
End Sub

という処理で 〇 が出ました。

Uについては一部SQL文のエラーがあったのでそこで混同してしまいました。
やはり一つずつ解決していきましょう。今回はいいです。

よろしくおねがいします。
お世話になります。

■No13249に返信(トッチーさんの記事)
ドロップダウンに設定するだけであれば
以下のような感じでできました。

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim oleConn As System.Data.OleDb.OleDbConnection

  Try
    oleConn = New System.Data.OleDb.OleDbConnection
    oleConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                + "Data Source=" + System.IO.Path.Combine(Application.StartupPath, "test.mdb")
    oleConn.Open()

    Dim selectCommand As System.Data.OleDb.OleDbCommand
    selectCommand = New System.Data.OleDb.OleDbCommand
    selectCommand.CommandText = "SELECT max(Round_ID) FROM Question"
    selectCommand.Connection = oleConn
    Dim ret As Object = selectCommand.ExecuteScalar()

    Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
    Me.ComboBox1.Items.Clear()
    For i As Integer = 0 To CType(ret, Integer)
      Me.ComboBox1.Items.Add(i)
    Next
  Catch ex As Exception
    Console.WriteLine(ex.StackTrace)
  Finally
    If Not oleConn Is Nothing Then
      oleConn.Close()
      oleConn.Dispose()
    End If
  End Try
End Sub
拝見しました。
明日仕事で普段より遠くに行くため、プログラミングは土日にします。

なおこさんありがとうございます。
なおこさんのソースは駄目でした。

で、元の
oleCn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Application.StartupPath & "\XXX.mdb;" & _
"Persist Security Info=False"

でExceptionを習得してみると

at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteScalar()
at X.Y.cmdStart_Click(Object sender, EventArgs e)

となります。

データベースの方が悪いのでしょうか?

あ、でもデータベースを
oleCn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=D:\XXX.mdb;" & _
"Persist Security Info=False"
の場合はきちんと処理されていたんだけど・・・


はてなです。
2005/10/16(Sun) 12:50:25 編集(投稿者)

お世話になります。

■No13292に返信(トッチーさんの記事)
> なおこさんのソースは駄目でした。
どこがどうだめだったのでしょうか。
トッチーさんのレスから推測すると、接続文字列のところですか?

ちなみに、Questionって
具体的にはどのようなデータ型のフィールドを持つ
テーブルなんでしょうか?

> はてなです。
管理人さんのレスにもありますが、
>同じことの繰り返しでは時間の無駄ですので、どのようなデバッグを行い、どのような結果を得たのかを明記してください。当たり前のことですが、どのようなパスが取得され、そのパスが正しく、ファイルが存在することは確認しましたか?

以下の2つのData Sourceって本当に同じものを指していますか?
接続文字列をセットした後に
Console.WriteLine(oleCn.ConnectionString)
で、出力してみて、同じものかどうか確認されては。

> oleCn.ConnectionString = _
> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=" & Application.StartupPath & "\XXX.mdb;" & _
> "Persist Security Info=False"

> oleCn.ConnectionString = _
> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=D:\XXX.mdb;" & _
> "Persist Security Info=False"

ちなみに、
> "Data Source=" & Application.StartupPath & "\XXX.mdb;" & _
で実行するときは、exeファイルがD:\にないと、下と同じ結果にはなりませんね。
この投稿はマルチポストです。

●マルチポストされている場所
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200510/05100077.txt

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。

●書き込みのマナーについて
http://dobon.net/vb/bbs/index.html
ルールを読んでいなかった私にも非がありますが、
マルチポストという理由(この言葉もついさっきはじめて知りました)で
凄く傷つきました。
こちらは当然、アドバイスを全て実行し、書籍も読みあさり、それでも動かない。
ネットも似たようなソースを見て参考にする。当然の行為と報いです。

それでもあかんかった。 だから追記質問しています。投稿者も遊び半分で来てるわけではございません。 世の中ルールっていいますが、私はそれで体と精神を壊し、それで融通を効かすという事を学びました。
まあここで言うことでは有りませんが、もう少し制約を緩めたらいかがだと思います。さもないと逆に世の中の真面目な人が減ってしまいます。

もういいです。ずっと一人で路頭に迷っています。

失礼します。 さようなら。
解決済み!
  • 題名: 【注意】自分勝手な投稿はご遠慮ください
  • 著者: 管理人
  • URL: http://dobon.net/
  • 日時: 2005/10/17 4:12:56
  • ID: 13298
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
この掲示板はプログラミングについて語る場ですので、私自身としてはこのようなことをここに書き込むことは気が進まないのですが、 No13296 の投稿があまりに自分勝手な言い分であり、多くの閲覧者から反感を買うことが必至ですので、一言言わせていただきます。

トッチーさんはあたかも自分が被害者であるかのような言い方をされていますが、この投稿がマルチポストとは知らずに、トッチーさんの質問を真剣に考え、助けようとした多くの閲覧者や回答者の方々のことを考えたことがあるでしょうか?彼らはまったく知らない赤の他人のあなたのために貴重な時間を削ったのです。彼らの努力を何とも思わず、逆に愚痴を並べるのは、あまりに自分勝手な逆切れです。本当の被害者はあなたではなく、閲覧者や回答者ではないですか?

マルチポストがなぜいけないかに関しては「書き込みのマナーについて」でも説明していますが、まだご理解いただけていないようで、残念です。

もしこのマナーに意見があるならば、「お気楽掲示板」へ投稿してください。またトッチーさんの投稿、またはこの管理人の投稿に対するご意見も、「お気楽掲示板」へお願いいたします。

とりあえず、このスレッドは終了にしましょう。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板