2017-03-20 3 views
0

조인 테이블에서 데이터를 수집하려고하는데 현재는 null 표시 (오류 없음)가 있습니다. 나는 내 코드가 효율적으로 힘들지 않다고 생각한다. 하지만 여기에 내가 뭘하려고하는지 :VB.Net) 조인 테이블에서 조건 데이터 판독기 사용

conn.Open() 
    sqlcmd = New MySqlCommand("select tabsen.id_absen, tsiswa.NIS, tsiswa.nama, tabsen.alpa, tabsen.izin, tabsen.sakit, tabsen.tahun_ajaran from tabsen join tsiswa on tabsen.NIS = tsiswa.NIS where tsiswa.NIS like '%" & txtnis.Text & "%'", conn) 
    dr = sqlcmd.executereader() 
    dr.Read() 
    If dr.HasRows Then 

     txtid.Text = dr.Item("id_absen") 
     txtnis.Text = dr.Item("NIS") 
     txtnama.Text = dr.Item("nama") 
     txta.Text = dr.Item("alpa") 
     txti.Text = dr.Item("izin") 
     txts.Text = dr.Item("sakit") 
     cmbtahun.Text = dr.Item("tahun_ajaran") 
     txta.Focus() 
     btnsave.Text = "UPDATE" 
     btndelete.Enabled = True 
     txtjumlah.Enabled = True 
     cmbpredikat.Enabled = True 
     cmbtahun.Enabled = True 
     txtnis.Enabled = False 
     dr.Close() 

    Else 
     While dr.Read() 
      txtnama.Text = dr("nama") 
     End While 
     dr.Close() 
     MsgBox("data absensi belum diisi") 
    End If 
    conn.Close() 

행이 발견되면 그것은 매력처럼 작동합니다. 그러나 'tabsen'테이블에서 비어있을 때 오류는 없지만 txtnama.Text에는 'nama'가 표시되지 않았습니다.

the problem

나는 모든 사람들이 코드를보고 이해할 것이라 생각합니다. 나는 내 영어가 충분하지 않아서 많은 것을 설명 할 수 없다.

+1

두 테이블을 [내부 조인] (https://www.w3schools.com/sql/sql_join_inner.asp) (암시 적)으로 조인했습니다. 'tabsen'이 빈 데이터를 생성 할 수 있다면 [외부 외부 조인] (https://www.w3schools.com/sql/sql_join_right.asp) (또는 테이블을 전환 할 때 왼쪽 외부 조인)을 수행해야합니다. 둘 다 비어있을 수 있다면 [전체 외부 조인] (https://www.w3schools.com/sql/sql_join_full.asp)으로 가야합니다. –

+0

* 빈 데이터 = 데이터 없음 –

+0

이제 고정. 감사합니다. – Ryan

답변

0
... from tabsen join tsiswa on ... 

이 두 테이블에 일치하는 데이터가있는 경우 결과 만 제공 할 것이다 두 테이블에 Inner Join를 생성한다.

사용 중 Right (Outer) Join

... from tabsen right join tsiswa on ... 

또는

... from tsiswa left join tabsen on ... 

Left (Outer) Jointabsen 경우 행 에게 NULL 값을 그 속성의 모든을하는 일치 포함하지 않는 것으로 알고 있다고 말했다 가졌어요.

Dim id_absen = dr.Item("id_absen") 
txtid.Text = If(id_absen<> DBNull.Value, id_absen.ToString(), String.Empty) 
... 

을 Btw은 ... 나는 당신이 당신의 VB 파일의 맨 위에 Option Strict On을 설정하는 것이 좋습니다 것입니다 :
그래서 당신은 텍스트 상자에 DataReader를의 값을 할당 할 때 확인해야합니다. 컴파일 오류가 발생하지만 나중에 평균적인 버그를 많이 줄일 수 있습니다.

+0

알렉스. 나는 정말로 mysql에 대해 깊이 배워야한다. 내 문제가 해결되었습니다. – Ryan