2012年3月25日 星期日

ExecuteReader 必須有開啟與可用的連接。連接目前的狀態已關閉

conn 太早執行 conn.close(),所以後續要在執行reader 的動作就無法連線,通常出現在迴圈上或一開始就沒有open

2012年3月21日 星期三

並未將物件參考設定為物件的執行個體

發覺select 出來的第一個欄位都會出現此問題,不知為何?



別人都沒事,只有他搞怪??

竟然連欄位都找不到?
我知到了,因為在datatable 加入column(0)知指令,改變了select出來所設定的原來的名稱(若無先加入TABLE欄位,SQL出來會由0行開始
耶!完成
 sql_str = "select  新製令編號 'Column1',作業名稱 'Column2',sum(報工量) 'Column4',sum(使用時間)/60 'Column5'  from workorders where 日期 = '" & DateTimePicker1.Value.Date & "'" & _
            " group by 作業名稱 order by 新製令編號"

        da = New MySqlDataAdapter(sql_str, MDIParent1.conn)
        cb = New MySqlCommandBuilder(da)

        data.Columns.Add("Column3") 先加進去就先排
        da.Fill(data)  SQL出來的在排
後面再加
        data.Columns.Add("Column8")
        data.Columns.Add("Column9")
        data.Columns.Add("Column10")
        data.Columns.Add("Column11")

        DataGridView1.DataSource = data

        DataGridView1.Columns("Column3").HeaderText = " 品名"

        DataGridView1.Columns("Column8").HeaderText = " 單件工時"
        DataGridView1.Columns("Column9").HeaderText = " 標準工時"
        DataGridView1.Columns("Column10").HeaderText = " 效率%"
        DataGridView1.Columns("Column11").HeaderText = " 低於80%之異常處理"
        DataGridView1.Columns("Column2").HeaderText = " 工程名稱"
        DataGridView1.Columns("Column4").HeaderText = " 本日完工數量"
        DataGridView1.Columns("Column1").HeaderText = " 製令"
        DataGridView1.Columns("Column5").HeaderText = " 總工時"

無法在資料繫結 DataGridView 控制項上設定 ColumnCount 屬性

 DataGridView1.ColumnCount = 5
        sql_str = "select 新製令編號 'Column1',作業名稱 'Column2',sum(報工量) 'Column4',sum(使用時間)/60 'Column5'  from workorders where 日期 = '" & DateTimePicker1.Value.Date & "'" & _
            " group by 作業名稱 order by 新製令編號"
        Dim data As DataTable
        data = Nothing
        DataGridView1.DataSource = data
        data = New DataTable
        da = New MySqlDataAdapter(sql_str, MDIParent1.conn)
        cb = New MySqlCommandBuilder(da)
     
        da.Fill(data)
        DataGridView1.DataSource = data

        DataGridView1.Columns(0).Name = "Column3"
        DataGridView1.Columns(1).Name = "Column8"
        DataGridView1.Columns(2).Name = "Column9"
        DataGridView1.Columns(3).Name = "Column10"
        DataGridView1.Columns(4).Name = "Column11"
        DataGridView1.Columns("Column3").HeaderText = " 品名"
      .....
.......
.......
        DataGridView1.Columns("Column9").HeaderText = " 標準工時"
        DataGridView1.Columns("Column10").HeaderText = " 效率%"
        DataGridView1.Columns("Column11").HeaderText = " 低於80%之異常處理"
當取消'DataGridView1.ColumnCount = 5 時出現此錯誤:

索引超出範圍。必須為非負數且小於集合的大小。
參數名稱: index

  DataGridView1.Columns(0).Name = "Column3"
        DataGridView1.Columns(1).Name = "Column8"
        DataGridView1.Columns(2).Name = "Column9"
        DataGridView1.Columns(3).Name = "Column10"
        DataGridView1.Columns(4).Name = "Column11"
        DataGridView1.Columns("Column3").HeaderText = " 品名"

結果應該是這樣就OK了
 Dim data As DataTable
        data = Nothing
        DataGridView1.DataSource = data
        data = New DataTable '
        DataGridView1.ColumnCount = 5   注意此程式位置
        sql_str = "select 新製令編號 'Column1',作業名稱 'Column2',sum(報工量) 'Column4',sum(使用時間)/60 'Column5'  from workorders where 日期 = '" & DateTimePicker1.Value.Date & "'" & _
            " group by 作業名稱 order by 新製令編號"