いつもお世話になります。良と申します。
Web上のDBにうまく接続してデータを取ってきたんですが
そのデータをスプレッドに表示するのに3行3列のデータを表示するのに
力技でやったんですがこれが取得したデータが尽きるまで項目別に
表示したい場合はどうしたらよろしいでしょうか?
Mid関数の中身とセットテキストをうまく変えればできるんでしょうか?
これまでのソース(少し長いですが)を表示します。
'ボタンを押下時のイベント
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
’変数の宣言
Dim strText As String
Dim strURL As String
Dim strData As String
Dim lngCnt As Long
Dim shtCnt As Object
'青森の取得するSQLのリクエストを設定
strText = "SELECT AREA_NAME, AREA_ID,KEN FROM ATD_AREA WHERE KEN = '青森'"
strURL = "ここにはWebDB上のアドレスを記載"
'Web上のデータベースに接続するクラスを宣言
Dim webClient As New System.Net.WebClient
'クエリ文字列用のコレクションを作成
Dim qc As New System.Collections.Specialized.NameValueCollection
'コレクションに追加する
qc.Add("sql", strText)
'コードを変換する
qc.Add("code", "UTF-8")
'クエリ文字列を設定する
webClient.QueryString = qc
'HTTPサーバーへ接続する
Dim sr As System.IO.Stream = _
webClient.OpenRead(strURL)
'StreamReaderを使って接続する。
Dim srRead As New System.IO.StreamReader(sr)
'cntの宣言
Dim cnt As Short
'文字列の宣言
Dim strMoji1 As String
Dim strMoji2 As String
Dim strMoji3 As String
Do
lngCnt += 1
’ループカウンター
For shtCnt = 1 To 3
'データを読み込む。一回目のループstrData="八戸,01000,青森"、二回目のループstrData="青森,01100,青森"、三回目のループstrData
="弘前,01200,青森"
strData = srRead.ReadLine
If Len(strData) > 0 Then
If InStr(strData, ",") > 0 Then
'Cntの中には","が何文字目に入っているかの文字数の値を格納。
cnt = InStr(strData, ",")
'strMoji1には左側のcnt-1文字目までの文字が入る。1回目strMoji1="八戸"2回目"青森"3回目"青森"
strMoji1 = Mid(strData, 1, cnt - 1)
'1回目strMoji2="01000"2回目"01100"3回目"01200"
strMoji2 = Mid(strData, cnt + 1, (cnt * 2) - 1)
'1回目strMoji3="青森"2回目"青森"3回目"青森"
strMoji3 = Mid(strData, (cnt * 2) + 4, (cnt * 3) - 1)
End If
'一覧にセットする
Me.AxvaSpread2.SetText(lngCnt, shtCnt, strMoji1)
Me.AxvaSpread2.SetText(lngCnt + 1, shtCnt, strMoji2)
Me.AxvaSpread2.SetText(lngCnt + 2, shtCnt, strMoji3)
End If
Next
Loop Until strData = ""
srRead.Close()
できれば知恵のほう貸していただきたく思います。よろしくお願いいたします。
えーと。開発環境は[VB.NET2005]でしたっけ?[VB.NET2003]でしたっけ?
[ASP.NET]でしたっけ?
基本的にそのオブジェクトに必要そうな機能は実装されている場合が
多いので、まずはヘルプを見てください。『メンバ』の一覧のページがあります。
説明も一覧になってます。全てチェックしても3分掛からないでしょう?
[StreamReader メンバ]
http://msdn2.microsoft.com/ja-jp/library/system.io.streamreader_members.aspx
>取得したデータが尽きるまで
EndOfStream で末尾かどうかチェックすれば良いのでは?
Mid や InStr は[VB6.0]時代の関数なので、[VB.NET]を意識するなら Substring や
IndexOf を使ってみるのも良いかも。
[String メンバ]
http://msdn2.microsoft.com/ja-jp/library/system.string_members.aspx
# カンマ区切りなら Split を利用するというのもあるよ。
>Mid関数の中身とセットテキストをうまく変えればできるんでしょうか?
そうですね。ループでまわせば良いんじゃないでしょうか。
こんにちは良です。
>特攻隊長まるるうさん
早速お返事のほうありがとうございます!
すみません。動作環境はVB.NET2003です。
とりあえずヘルプに目を通してみます。
ほかにもいろいろアプローチしてみます。
カンマ区切りでそれなりに動くっぽいサンプル。
[VB.NET2003]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strData As String = ",,八戸,01000,青森,"
Call Test(strData)
strData = ""
Call Test(strData)
strData = ","
Call Test(strData)
strData = "あ"
Call Test(strData)
End Sub
Private Sub Test(ByVal ReadLineText As String)
Call sample1(ReadLineText)
Call sample2(ReadLineText)
Call sample3(ReadLineText)
Debug.WriteLine("")
End Sub
Private Sub sample1(ByVal ReadLineText As String)
Dim intStart, col, i As Integer
With ReadLineText
If .Length > 0 Then
intStart = 0
col = 0
Do
i = .IndexOf(",", intStart)
If i = -1 Then
Debug.WriteLine(col.ToString("sample1_00:") & .Substring(intStart))
Exit Do
Else
Debug.WriteLine(col.ToString("sample1_00:") & .Substring(intStart, i - intStart))
intStart = i + 1
col = col + 1
End If
Loop
End If
End With
End Sub
Private Sub sample2(ByVal ReadLineText As String)
Dim strArray() As String
Dim i As Integer
With ReadLineText
If .Length = 0 Then Exit Sub
strArray = .Split(","c)
End With
For i = 0 To strArray.GetLength(0) - 1
Debug.WriteLine(i.ToString("sample2_00:") & strArray(i))
Next
End Sub
Private Sub sample3(ByVal ReadLineText As String)
Dim intStart, col, i As Integer
If Len(ReadLineText) > 0 Then
intStart = 1
col = 0
Do
i = InStr(intStart, ReadLineText, ",")
If i = 0 Then
Debug.WriteLine(col.ToString("sample3_00:") & Mid$(ReadLineText, intStart))
Exit Do
Else
Debug.WriteLine(col.ToString("sample3_00:") & Mid$(ReadLineText, intStart, i - intStart))
intStart = i + 1
col = col + 1
End If
Loop
End If
End Sub
こんにちは。良です。
<特攻隊長まるるうさん
サンプルありがとうございます!
早速質問なんですがサンプル1〜3というのは全部同じ
処理をしているんですか?
あとこのサンプルを視覚的に検証したい場合は
デザインにどんなツールを追加すれば見れますか?
わからない単語はヘルプを見ますのでそれだけ教えていただけませんか?
>早速質問なんですがサンプル1〜3というのは全部同じ
>処理をしているんですか?
『同じ処理』の定義は?
コードが違うんだから違う処理なのでは?
結果として、似たような出力が得られると思いますが、
サンプルなんてものは、その場で考えているので、
100%の動作保証をするものではありません。
必要な解析・検証は個人でやってください。
>あとこのサンプルを視覚的に検証したい場合は
視覚的???Debug.WriteLine の結果は『出力ウィンドウ』
に出力されていると思います。
http://support.microsoft.com/default.aspx?scid=kb;ja;313417
デバッグ作業は普通、『ブレークポイント』を設定して
『ステップ実行』しますが。。。『デバッグ』したことないですか?
http://msdn.microsoft.com/library/ja/vsdebug/html/_asug_How_Do_I_Topics3a_Debugging.asp
こんにちは良です。
ブレークポイントを作成してステップ実行して
見ていますが出力ウィンドウは見ていなかったです。
いつもテキストボックスかコンボボックスに
出力するようにしていましたので。
ありがとうございます。もう一度ステップ実行して
出力ウィンドウを見てみます。
お名前を忘れてしまいました。
>特攻隊長まるるうさん
いつもありがとうございます!
もっと自分で検証の仕方を勉強していきたいと思います。
こんにちは。良です。
出力ウィンドウでしっかり結果を見ることができました!
これをもっと自分で検証していきたいと思います。
ありがとうございましたm(__)m
ツイート | ![]() |