痔になりやすい生活習慣とは?

データベースをEOFまでループさせたい

今までVB6.0上で下記のようなコーディングをしておりましたが
初VB.NET上コーディングで、参照にしたプログラムもがらっと変わり
四苦八苦しています><;

今まで
*********
Do Until rs.EOF
   aaa=rs("Log_Time")
   rs.MoveNext
Loop
*********

これを Do~Loop でなく、For Each で書きたいと思うのですが
下記コーディングでエラーとなります。
エラー「型'System.Data.Datarow'の値を'integer'に変換できません」


For Each row As DataRow In rs.Tables(dataTableName).Rows
   aaa = Me._rs.Tables(dataTableName).Rows(row)("Log_Time")
Next

やりたいことは単純にEOFまでループし、値を取得したいということなのですが・・・
うまくいきません。 EOFという概念もない様子?!

どなたかヨロシクお願いします!

このQ&Aに関連する最新のQ&A

A 回答 (1件)

VB.Netは詳しくないですが、パッと見てわかるのは「aaa=・・・」の行の誤りです。



For Each row As DataRow In rs.Tables(dataTableName).Rows
   aaa = row("Log_Time")
Next
    • good
    • 0
この回答へのお礼

ありがとうございます!
「rs.Tables(dataTableName).Rows」
までを持つことができるので
「aaa = row("Log_Time")」という記述になるのですね!!!
おかげさまで解決いたしました!

お礼日時:2010/08/18 09:48

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?

VB6.0で、例:StrConv(Text, vbFromUnicode)とかで使用する、
「vbFromUnicode」(文字列を Unicode からシステムの既定のコードページに変換する)
は、VB.NETでは使用できないようです。(相当する定数はない?)

「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、
どうすれば良いでしょうか?

Aベストアンサー

思いっきり、例文に「COM1」と書いてますが、USBに書き換えてくださいね^^;

それとふと思ったのですが
udtReaderWriterModeWithoutEncryption
変数は構造体ですよね?

メンバが
lngPortName
lngBardRate
というのは、型宣言をINTEGERに変換してますよね?

ちょっとばかり不安に思ったので、追記しておきました。

参考URL:http://okweb.jp/kotaeru.php3?q=1257613

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

Q文字列の後ろから必要分だけ削除したい。

例1 Dim str As String = "あいうえお1234"

文字列の中の1234だけ削除したい場合は、
str = str.Remove(5,4)
という風に、5文字目の後から4文字削除にすればよいのですが、

例の"あいうえお"の部分の長さが毎回処理する度に異なる場合は、
文字列の頭から何文字目という指定ができないので、”後ろから4文字を削除したい”となります。その場合は、どのようなプロパティを使えばいいのでしょうか。

.NET環境です。

Aベストアンサー

Length(str)で文字数を取得できますので、後ろから4文字目は先頭から何文字目かは計算できると思いますが、どうでしょうか?

QVB.NET データセットとADOレコードセットについて。

最近.NETの勉強を始めました。質問なのですが
(1)参考書として買った本にはデータセットが基本の構文がずらりと載っているのですが、
(2)勉強用に貰ったVBデータはADOで基盤が作ってあり、データセットは1つも出てきていません。例えばデータグリッド等は無しです。
(1)と(2)は、今後プログラムを書くにあたり、どうとらえていけばよいんでしょうか?

大きいシステムの流れはVBデータでつかめますが、細かい、(例えば、コンボボックスの値をデータから抽出したい)等の事が分からなくてネットでも見つける事ができません。データグリッドも使いたいのですが。
参考書には載っていますが、全てデータセットを使ってあります。
データセットとADOレコードセットは共に書くことは不可なのですか?
テーブルごと仮で持ってくる時、こっちはデータセットでこっちは違うとかだやはり困りますよね。
実際のお仕事の現場ではどのようにされていますか?
明確なADOの使い道(こんな時はADOだ。など)も簡単に教えていただけるとありがたいです。

Aベストアンサー

>ADOレコードセット
VB6ユーザですね?

ADOではなくADO.NETを利用する話ですよね?
まずデータセット構造に慣れましょう

データセット
├データテーブル1
├データテーブル2
・・・
└データテーブルX

データテーブル構造
X方向:データカラム(ズ)/旧で言うとフィールド的イメージかな?
Y方向:データロウ(ズ)/旧で言うとレコード的イメージかな?
┌┬┬┬┬┬┬┐
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
・・・・・・・・
└┴┴┴┴┴┴┘

さらにデータセットには、リレーショナルを追加したり、各データテーブルには、キーを張ることもできます。

データセットはXMLへの入出力が容易で、データ内容をファイルに出力したり、テストデータの読み込みをするのに非常に便利です。
複数のテーブルデータを保持しているデータセットは、複数テーブルの情報をそのままXML出力できます。もちろん複数テーブルの読み込みも可能です。

データの更新や追加などは、パラメータとしてデータセットを利用することにより、1セッションで複数の更新/追加を行います。

データグリッドを利用するには、データテーブルからデータビューを生成し、バインドします。
http://okweb.jp/kotaeru.php3?q=1583980


簡単に書きましたが、私は.NET関連の本を一冊も買っていません。
あなたも他の言語経験があれば、ここの掲示板の履歴やそのリンク先を見ながら、ひたすら実践で慣れることの方が、覚えが早いと思います。

>ADOレコードセット
VB6ユーザですね?

ADOではなくADO.NETを利用する話ですよね?
まずデータセット構造に慣れましょう

データセット
├データテーブル1
├データテーブル2
・・・
└データテーブルX

データテーブル構造
X方向:データカラム(ズ)/旧で言うとフィールド的イメージかな?
Y方向:データロウ(ズ)/旧で言うとレコード的イメージかな?
┌┬┬┬┬┬┬┐
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
・・・・・・・・
└┴┴┴┴┴┴┘

さらにデータセットには、リレーショナルを追加したり、各データテーブル...続きを読む

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Qデータセットのレコード更新がしたい

VB .Netでデータベースの追加・変更をしています。
データセットのレコードを追加できたのですが、変更がわかりません。
追加は・・・dtrow = dttable.NewRowで始まり、追加したい項目を書いています。
そして終わりは・・・
''行を追加
dttable.Rows.Add(dtrow)
''データソースを更新
oleDa.Update(dttable)

変更はどうしたらよいのでしょうか?

Aベストアンサー

>データセットのレコード更新がしたい

データセット?データセットにはレコードはありません
データテーブルにレコードがあります
こんな感じ
Dataset
└─DataTable
  └─DataRowCollection

新規追加ができているなら更新は簡単です

まず更新したいレコードを検索する
検索できたら、そのレコードをDataRowにて取得する

その後、対象フィールドを上書きしてからDataTableのUpdateメソッドにて更新する

[例]
Dim dRow As DataRow

'主キーにて検索(※123は検索項目値)
dRow = dTbl.Rows.Find(New Object() {123})

If Not dRow Is Nothing Then

  'フィールド更新
  dRow.Item("hogehoge") = "ほげほげ"

  dTbl.Update()

End If

QVB.NET LeftBの代用

こんにちわ。
文字列を、バイト数でカットしたいのですが、方法がわかりません。

例えば、
"1あ2い3う4え5お"という文字列があるとすると
この文字列の4バイト分の"1あ2"を取り出したい
と言ったケースです。

ヘルプを調べたら、
LeftB,MidB,RightBの関数は、VB.NETから、
文字列が、Unicodeの2バイト扱いになるので、
サポートされていないと記述されていました。

LeftB関数と同じような事を、VB.NETでも行いたいです。
どなたか、アドバイスお願致します。

Aベストアンサー

>文字列が、Unicodeの2バイト扱いになるので、
>サポートされていないと記述されていました。

無かったら、作るしかないですね。
私も最初、はまりました。

Public Shared Function MidB(ByVal value As String, ByVal start As Integer, ByVal length As Integer) As String
'バイト数に応じた部分文字列を取得する
Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim bytes As Byte() = encod.GetBytes(value.PadRight(start + length))
Return encod.GetString(bytes, start - 1, length)
End Function

Public Shared Function LeftB(ByVal value As String, ByVal length As Integer) As String
'バイト数に応じた部分文字列を取得する
Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim bytes As Byte() = encod.GetBytes(value.PadRight(length))
Const start As Integer = 0
Return encod.GetString(bytes, start, length)
End Function

Public Shared Function RightB(ByVal value As String, ByVal length As Integer) As String
'バイト数に応じた部分文字列を取得する
Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim bytes As Byte() = encod.GetBytes(value.PadLeft(length))
Dim start As Integer

start = UBound(bytes) + 1 - length 'バイト数

Return encod.GetString(bytes, start, length)

End Function


Public Shared Function LenB(ByVal vstr As String) As Integer

If vstr = "" Then
Return 0
Else
Return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(vstr)
End If

End Function

>文字列が、Unicodeの2バイト扱いになるので、
>サポートされていないと記述されていました。

無かったら、作るしかないですね。
私も最初、はまりました。

Public Shared Function MidB(ByVal value As String, ByVal start As Integer, ByVal length As Integer) As String
'バイト数に応じた部分文字列を取得する
Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim bytes As Byte() = encod.GetBytes(value.PadRight(start + le...続きを読む

Q複数SQL発行について

お世話になります。

VB.NET2003とSQLServer2005にて開発を行っております。

Aテーブルからデータを取得してその取得データを元にBテーブルを参照する。
と、言うのがあるのですが、
Bテーブル参照時に「この接続に関連付けられている DataReader が既に開いています。この DataReader を最初に閉じる必要があります。」の
エラーとなってしまいます。

複数SQLを発行する場合、再度接続を行わなければならないのでしょうか?
同一接続内で複数のSQLを発行することは出来ないのでしょうか?

どなたかご存知でしたらお教え願います。

以下、ソース

' 変数宣言
Dim objDBConnect As SqlConnection
Dim objDBTran As SqlTransaction
Dim objSqlCmd As SqlCommand
Dim objSqlDRA As SqlDataReader
Dim objSqlDRB As SqlDataReader

' データベース接続
objDBConnect = New SqlConnection("接続文字列")
objDBConnect.Open()

' トランザクション開始
objDBTran = objDBConnect.BeginTransaction(IsolationLevel.ReadCommitted)

' SQL発行
objSqlCmd = New SqlCommand("SELECT * FROM A_TABLE", objDBConnect)
objSqlDRA = objSqlCmd.ExecuteReader()

While objSqlDRA.Read()

objSqlCmd = New SqlCommand("SELECT * FROM B_TABLE", objDBConnect)
objSqlDRB = objSqlCmd.ExecuteReader() ←ここで、エラーとなってしまいます。

End While

お世話になります。

VB.NET2003とSQLServer2005にて開発を行っております。

Aテーブルからデータを取得してその取得データを元にBテーブルを参照する。
と、言うのがあるのですが、
Bテーブル参照時に「この接続に関連付けられている DataReader が既に開いています。この DataReader を最初に閉じる必要があります。」の
エラーとなってしまいます。

複数SQLを発行する場合、再度接続を行わなければならないのでしょうか?
同一接続内で複数のSQLを発行することは...続きを読む

Aベストアンサー

#1です。
ごめんなさい。1接続に対して1つだけみたいです。

▼MSDN引用
DataReader の終了
DataReader を使い終えたら、Close メソッドを呼び出す必要があります。

Command に出力パラメータや戻り値が含まれていても、DataReader が終了するまでは使用できません。

DataReader が開いている間、Connection はその DataReader によって排他的に使用されています。元の DataReader が終了するまでは、その Connection に対してはどのコマンドも実行できません。別の DataReader を作成することもできません。

参考URL:http://msdn2.microsoft.com/ja-jp/library/haa3afyz.aspx

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング