2013-11-25 5 views
0

이것은 내가 속해있는 수업의 사전 할당입니다. 예쁘기 만하고 예열로 활동하지만, 제대로 작동하지는 않습니다. 기본적으로 코드는 테스트 데이터베이스를 가져 와서 계산을 수행합니다. 이 경우 야구 선수 세트에서 가장 높은 평균 타격 평균을 찾으려고합니다.VB.Net에서의 SQL 계산이 작동하지 않습니다.

그래서 나의 최종 결과는 가장 높은 타격 평균을 가진 선수의 이름이어야하며, 가장 높은 평균을 위해 묶이는 선수는 몇 명이어야합니다. 여기

코드입니다 :

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim dt As DataTable = New DataTable() 
    Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Baseball.accdb" 
    Dim sqlStr As String = "SELECT * FROM Players" 
    Dim dataAdapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sqlStr, connStr) 

    dataAdapter.Fill(dt) 
    dataAdapter.Dispose() 

    Dim average, pastAverage, highestAverage As Double 
    For i As Integer = 0 To dt.Rows.Count - 1 
     average = CDbl(dt.Rows(i)("hits/atBats")) 
     If average > pastAverage Then 
      highestAverage = average 
     End If 
     pastAverage = average 
    Next 

    For i As Integer = 0 To dt.Rows.Count - 1 
     If dt.Rows(i)("hits/atBats") = highestAverage Then 
      lstBoxHighest.Items.Add(dt.Rows(i)("name")) 
     End If 
    Next 

    End Sub 
End Class 
디버거는 "평균 = CDbl에는 (dt.Rows (I) ("히트/atBats "))"루프에 대한 첫 번째 라인을지나 가지 않을 것이다

. 루프에서 계산을 할 수 없습니까?

 
name    Team    atBats  hits 

Derek Jeter  New York Yankees 511   158 
Joe Mauer   Minnesota Twins 545   174 
etc... 

감사 : 나는 열 제목은 (안타 atBats이 올바른지)

데이터베이스는 당신이 궁금해 경우 다음과 같습니다 확신합니다!

+0

안타는 열 이름이고, atBats는 열 이름입니다. 나는 타율을 atBats로 나눔으로써 타율을 찾아 내려고 노력 중이다. 그래서 그것은 계산이어야합니다. SELECT 이름을 써서 새로운 열을 만들어야하나요, 타격 평균/평균 타수로 타격을합니다. – user3029567

+0

데이터베이스 모양을 추가하여 atBats 및 조회수 열을 볼 수 있습니다. – user3029567

답변

1

일부 개체 심판 누락 :

average = CDbl(dt.Rows(i).item("hits")/dt.Rows(i).item("atBats")) 

하고 나머지처럼. 이 두 가지 열이 있기 때문에 VB dt.Rows(i) 참조가 필요합니다. "hits/atBats"를 사용하면 개별 열임을 알 수 없습니다.

average = CDbl(dt.Rows(i)("hits")/dt.Rows(i)("atBats")) 
+0

VB.Net에는 실제로 'Item'속성이 필요하지 않습니다. 'dt.Rows (i) ("hits")/dt.Rows (i) ("atBats")는 완벽하게 유효한 구문입니다. – pete

+0

알아. OP가 DT의 내부 구조/내용을 이해하고 obj refs를 일반적으로 이해할 수 있도록 명시 적으로 설명했습니다. 고마워요. – Plutonix

+0

고마워요! 나는 매우 좌절감을 느끼고 있었다. – user3029567

0

면책 조항 : 당신이 그것을 가지고 같은 서로 다른 COLS/항목입니다

속기 만 종류의 마스크는이 질문에 직접 대답이 아니다.

모든 데이터를 클라이언트로 가져 오지 않고 이름을 찾기 위해 두 개의 루프를 사용하는 대신 db-side에서 모든 계산을 수행하고 필요한 행과 열 (경우에 따라 name) 만 가져올 수있는 쿼리를 사용할 수 있습니다.

SELECT name 
    FROM Players 
WHERE atBats/hits = 
(
    SELECT MAX(atBats/hits) 
    FROM Players 
) 

출력과 같이 :

 
|  NAME | 
|-------------| 
| Derek Jeter | 
관련 문제