質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

解決済

VB.Netで SQL Server のテーブルを一行ずつ読み取って処理したいです

hrb
secret.invation

総合スコア2

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

2回答

-1評価

0クリップ

392閲覧

投稿2022/06/09 08:10

編集2022/06/10 18:08

まだ始めたばかりで、説明の足らない点があるかと思います。

考え方としては、VB上でデータの読み込みを一度に全部読み込むのではなく、
for each文などの繰り返し処理を使用して一行ずつ読み込みたいです。

下記のテーブルから、日付ごとに金額をまとめたテーブルを作成したいです。

| 日付コード | 売上金額 |   
|2022/04/05| 20000|
|2022/04/05| 20000|
|2022/04/06| 20000|
|2022/04/07| 20000|
|2022/04/07| 20000|

| 日付コード | 売上金額 |  
|2022/04/05| 40000|
|2022/04/06| 20000|
|2022/04/07| 40000|

現状、一度にすべてを読みこみ、書き出す形式のコードは書いてあります。

Using con As New SqlConnection(connect)

Dim cmd As New SqlCommand("SELECT date_code, sum(sales_amount) as Total FROM control_break group by date_code ORDER BY date_code ASC", con) Dim a As New SqlDataAdapter(cmd) Dim dt As New DataTable a.Fill(dt) DataGridView2.DataSource = dt End Using

行いたい想定の手順を一からまとめます。

1、計算前のtテーブルを一行読み取る
日付コードを変数に入れる、売上金額を別の変数に入れる。

2,次の行を読み取り、日付が一致していたら売上金額をプラスする。
不一致の場合、その時点での日付と売上金額を別のテーブルに出力し、売上金額を0にする。
その後、日付を新しく変数に入れ、売上金額を変数に入れる

3、 2を繰り返し行い、最後まで出力したら、計算後のテーブルをDataGridViewに出力する。

この流れを想定しています。
結果としては、今書いてあるコードであっているのですが、その過程を変更したいというところです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2022/06/09 11:19 編集

> VB.NetでDataTableを一行ずつ読み取りたいです。 あなたの言う DataTable とは何ですか? a.Fill(dt) でデータを読み込んだ dt のこと? 違いますか? 違うとすると、SqlDataReader を使って読んできたいということではなかろうかと想像してますが、だとすると何故そういうことがしたいのですか? それを書きましょう。
hrb

2022/06/10 00:42

ご指摘ありがとうございます。 自分の考えているものとしては、 | 日付コード | 売上金額 |    |2022/04/05| 20000| |2022/04/05| 20000| |2022/04/06| 20000| |2022/04/07| 20000| |2022/04/07| 20000| これを一行ずつ読み取り、日付ごとに計算したいという感じです。 目的としては、課題だからといったところです。。
SurferOnWww

2022/06/10 00:59

> | 日付コード | 売上金額 |    > |2022/04/05| 20000| > |2022/04/05| 20000| > |2022/04/06| 20000| > |2022/04/07| 20000| > |2022/04/07| 20000| > これを一行ずつ読み取り、日付ごとに計算したいという感じです。 回答いただいたのですが理解できません。質問者さんのコードで DataGridView には質問に書いてある 2 つ目のテーブルが表示されているのではないですか? もしそうであれば「これを一行ずつ読み取り、日付ごとに計算」は既にできていてその結果が表示されているということになりますけど。 そうではなくて、現状、質問のコードでは DataGridView には期待する結果(即ち、質問に書いてある 2 つ目のテーブル)が表示されてないということですか?
hrb

2022/06/10 01:16

自分の完全な言葉足らずでした。 行いたい想定の手順を一からまとめます。 1、計算前のtテーブルを一行読み取る 日付コードを変数に入れる、売上金額を別の変数に入れる。 2,次の行を読み取り、日付が一致していたら売上金額をプラスする。 不一致の場合、その時点での日付と売上金額を別のテーブルに出力し、売上金額を0にする。 その後、日付を新しく変数に入れ、売上金額を変数に入れる 3、 2を繰り返し行い、最後まで出力したら、計算後のテーブルをDataGridViewに出力する。 この流れを想定しています。 結果としては、今書いてあるコードであっているのですが、その過程を変更したいというところです。
SurferOnWww

2022/06/10 01:29

上のことを追加情報として質問欄を編集して追記願います。あと、表題も書き換えてください。 ×: VB.NetでDataTableを一行ずつ読み取りたいです。 〇: VB.Netで SQL Server のテーブルを一行ずつ読み取って処理したいです
SurferOnWww

2022/06/10 01:38

それから、その目的を果たすのに自分ではどこまでコードが書けていて、どこで躓いていて、何が分かれば解決するかを、自分が書いたコードを提示して説明してください。今の質問では丸投げでマイナス評価対象です。
SurferOnWww

2022/06/10 01:40

> 変更しました。 不十分です。上の 2022/06/10 10:16 のあなたのコメントをそのまま質問欄にコピペしてください。
hrb

2022/06/10 01:46

再度変更しました。 現状の自分の知識ではどこまでが理解していて、どこが理解できていないかを言葉として説明できるレベルではないため、このような質問文となりました。
sazi

2022/06/10 02:25

> for each文などの繰り返し処理を使用して一行ずつ読み込みたいです。 その為にはSQL文も変更しなければなりませんが、それは質問の範囲外ですか?
hrb

2022/06/10 02:39

この修正を行うための変更はすべて範囲内といえます。
matukeso

2022/06/10 03:05

いまgroup byでSQLでやっている部分をやめにして、同等の処理をvb.net側に移したい、ってことですか?
hrb

2022/06/10 04:10

まったくその通りです。 説明不足、言葉足らずで申し訳ないです。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。