DrASAG 0 Report post Posted March 22, 2008 A'kum.ada masalah sket la. aku ada satu form. dlm form tu aku letak satu datagridview untuk paparkan rekod dari database. dalam datagridview tu aku ada 4 kolum.1. NoID (textbox)2. Nama (textbox)3. Status (checkbox)4. Negeri (combobox)so, untuk paparkan rekod dalam datagridview tu, dah OK. untuk update rekod yang aku ubah dalam datagridview tu pun dan OK. tapi macam mana aku nak simpan rekod tu semua dalam table yang lain. maksud aku, aku retrieve rekod kat datagridview tu dari table1, now aku nak simpan semua rekod yang dipaparkan tu dalam table2. aku dah puas tanya incik google, macam2 solution depa bg tapi aku tak dpt jgk nak buat. Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 22, 2008 (edited) A'kum. ni kod yg aku dah buat.Public Class Form5 Dim bindingSourceStaf As BindingSource Dim dstbl1 As DataSet Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click isigrid() End Sub Private Sub isigrid() dstbl1 = LoadDB() If dstbl1 IsNot Nothing Then bindingSourceStaf = New BindingSource(dstbl1, "tbl1") SetupGrid2() End If End Sub Private Function LoadDB() As DataSet Try Dim Dset As New DataSet() sql = "SELECT * FROM tbl1" If ConnectionState.Open Then con.Close() con.Open() Dim task As New OleDb.OleDbCommand(sql, con) Dim rd As OleDb.OleDbDataReader = task.ExecuteReader() Dset.Load(rd, LoadOption.OverwriteChanges, New String() {"tbl1"}) sql2 = "SELECT Negeri FROM tbl3" Dim task2 As New OleDb.OleDbCommand(sql2, con) Dim rd2 As OleDb.OleDbDataReader = task2.ExecuteReader() Dset.Load(rd2, LoadOption.OverwriteChanges, New String() {"tbl3"}) rd.Close() rd2.Close() con.Close() Return Dset Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Error") Return Nothing End Try End Function Private Sub SetupGrid2() DG2.AutoGenerateColumns = False DG2.DataSource = bindingSourceStaf Column1.DataPropertyName = "NoID" Column2.DataPropertyName = "Nama" Column4.DataPropertyName = "Ada" Column3.DataPropertyName = "Negeri" Column3.DataSource = dstbl1.Tables("tbl3") Column3.ValueMember = "Negeri" Column3.DisplayMember = "Negeri" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click cuba() End Sub Private Sub cuba() If dstbl1.HasChanges() Then Dim da As OleDb.OleDbDataAdapter Dim cb As OleDb.OleDbCommandBuilder da = New OleDb.OleDbDataAdapter("Select * From tbl1", con) da.TableMappings.Add("Table", "tbl1") Try cb = New OleDb.OleDbCommandBuilder(da) da.Update(dstbl1) MessageBox.Show("Dah kemaskini", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MessageBox.Show(ex.Message, "Data Error", MessageBoxButtons.OK) Finally cb.Dispose() da.Dispose() End Try Else Exit Sub End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim intcount As Integer = 0 For Each Row As DataGridViewRow In DG2.Rows If DG2.Rows(intcount).Cells(1).Value = txtcari.Text Then DG2.ClearSelection() DG2.Rows(intcount).Selected = True DG2.FirstDisplayedScrollingRowIndex = intcount Exit Sub Else DG2.ClearSelection() intcount += 1 End If Next Row End Sub Private Sub DG2_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DG2.CellValueChanged If DG2.Columns(e.ColumnIndex).Name = "Column4" Then DG2.Rows(e.RowIndex).Cells("Column3").ReadOnly = True Dim checkcell As DataGridViewCheckBoxCell = _ CType(DG2.Rows(e.RowIndex).Cells("Column4"), DataGridViewCheckBoxCell) DG2.Rows(e.RowIndex).Cells("Column3").ReadOnly = CType(checkcell.Value, Boolean) DG2.InvalidateRow(e.RowIndex) End If End Sub Private Sub DG2_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DG2.CurrentCellDirtyStateChanged If DG2.IsCurrentCellDirty Then DG2.CommitEdit(DataGridViewDataErrorContexts.Commit) End If End Sub End Class tu kod yg aku buat. untuk update rekod2 tu, aku letak dalam Private Sub cuba() If dstbl1.HasChanges() Then Dim da As OleDb.OleDbDataAdapter Dim cb As OleDb.OleDbCommandBuilder da = New OleDb.OleDbDataAdapter("Select * From tbl1", con) da.TableMappings.Add("Table", "tbl1") Try cb = New OleDb.OleDbCommandBuilder(da) da.Update(dstbl1) MessageBox.Show("Dah kemaskini", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MessageBox.Show(ex.Message, "Data Error", MessageBoxButtons.OK) Finally cb.Dispose() da.Dispose() End Try Else Exit Sub End If End Subso, macam mana aku nak dia masukkan rekod2 tu dlm table lain, bukan dalam tbl1 tu? penin2.. tulung aku wahai otai2 .net. jasamu dikenang... Edited March 22, 2008 by DrASAG Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 24, 2008 A'kum. aku ada tukar kod untuk save tu cenggini..Try Dim data_adapter As OleDb.OleDbDataAdapter Dim command_builder As OleDb.OleDbCommandBuilder Dim select_string As String = "Select * From tbl2" data_adapter = New OleDb.OleDbDataAdapter(select_string, con) data_adapter.TableMappings.Add("Table", "tbl2") command_builder = New OleDb.OleDbCommandBuilder(data_adapter) data_adapter.Update(ds, "tbl2") Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Error") End Trytakder error tapi tak berlaku apa2 pun, update tak, insert pun tak... tulun aku.... Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 24, 2008 oo senang jerrtapi before that table kedua ko tu apa. kasi aa aku detail dia kang baru aa aku kasik solution diayahaaaa - Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 24, 2008 (edited) A'kum. camni. ada 2 tabletable 11. NoID (PK) <-- text2. Nama <-- text3. Status <-- yes/no4. Negeri <-- texttable 21. ID (PK) <--autonumber1. NoID <-- text2. Nama <-- text3. Status <-- yes/no4. Negeri <-- textso, aku amik rekod dari table 1, papar kat datagridview. then bila nak save, aku nak save dalam table 2 tu... tulun bro... jasamu dikenang... Edited March 24, 2008 by DrASAG Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 24, 2008 ok cam niii.actually ko leh guna dua teknik1. sqlbulkcopytapi yg ni akan sejibik macam table 1 tadi. yg ni ok gakk. aku suka cara yg ni2. ko cut paste source code aku ni yehaaa. (demon devil bat)tapi b4 that aku nak tanya satu soalanheheheko nak buat apa ko save dlm table yg lain sedangkan table tu dah samaexplain sikitmaybe aku ada cadangan yg lain lakkmacam tak practikal lakk ko niwahahahahah Quote Share this post Link to post Share on other sites
thalz142 0 Report post Posted March 24, 2008 tah ni msti nk letak kat temp tbl nih huhu..ko letk jela fuction save lps save pertama td pstu kutip balik 11 data ko yg masuk tbl first td ape susah.kan dah siap hehhe Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 25, 2008 A'kum. hehehehe... mmg tak praktikal pon... org soh buat, aku buat jer benda alah ni. kuakuakua... camni citer sebenarnya. pada suatu hari, hehehehe, bos aku yg sgt sombong tu telah soh aku buat sistem kluar masuk, walaupon ini bkn kejer aku, disebabkan kejer tader, dia aim aku la... kuikuikui.. walaupon ramai lg yg goyang kaki kat opis ni. hehehehe dahler sengsorang...sedey tol...1. pertamanya aku nak staf isi borang untuk rekod peribadi...2. keduanya borang utk keluar masuk. bos aku nak staf buleh masuk byk kali, kuar pon byk kali. lepas seminggu dia leh check time masuk, time keluar, sapa lambat, sapa kluar byk kali, sapa kluar tak clock out... etc...3. time masuk ni ada 2. pertama staf yg terlibat dgn senaman pg, satu lg yg tak terlibat. maksudnya staf yg terlibat dengan senaman ni akan ada 2 time masuk. 6.30 - 8.30 dan 9.00 - 5. staf yg tak terlibat ada 1 time masuk, 8.00 - 5.00... gitula adanya... then, senaman ni pulak ada sekali seminggu. maksudnya 4 kali dalam sebulan. dlm 4 kali tu, mungkin staf yg terlibat bertukar2... minggu ni terlibat, maybe minggu depan plak tak terlibat.. gitu ler..4. sekarang ni, knp aku wat 2 table yg ada field sama? hehehe.. sbb aku tak reti dah nk pk macam mana nak buat staf yg terlibat dgn senaman tu atau tak. aku tnya staf sini pon, cakap taktau.. sumer tanak sumbang idea.. so jadilah table yg 'sumbang' ni. huhuhuhu... padan muka bos aku...5. maksudnya skang, tbl 1 akan ada maklumat staf yg ada info peribadi yg melambak2 tu. tbl 2 plak akan ada maklumat staf yg terlibat dan tak terlibat ngan senaman tu. dlm tbl 2 ni ada tmbhn field cam status terlibat ke tak, sebab tak terlibat, trkh senaman 1, 2, 3 dan 4. penin dah aku nak citer..6. cenggini, aku nk buat form yg ada datagridview yg paparkan semua staf berdasarkan trkh senaman. so dlm datagridview tu ada info dia, dan jgk ada checkbox status terlibat ke tak serta sebab tak terlibat. ha ada idea nak buat caner? idea aku, aku amik rekod dari tbl 2 untuk papar kat datagridview tu. then bila aku edit kat datagridview tu, dia update kat tbl 2. korang paham ke tak ni? hehehe susahnya nk bgtau.. kalo aku amik rekod dr tbl 1, nnt takder plak pasal status, sebab , tarikh 1,2,3,4 tu semua... 7. kod yg aku bg kat sini, aku cuba buat yg dummy dulu, aku cuba masuk rekod yg tak byk... itu jer.. bila dah bleh kat sini, baru nk apply kat program sebenar tu... tulun.. aku bukan programmer.. hehehehe... korang dpt tangkap tak apa aku nk ni... Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 25, 2008 (edited) Akum. ni aku bg cth form yg aku nk buat..bila user masukkan tahun, bulan dan sama ada PT1, 2 ,3 atau 4, baru rekod keluar kat datagridview tu. rekod NoID, Pangkat, Cawangan, Nama tu dari tblstaf. status, bulan, tahun, trkh PT 1,2,3,4 dan sebab dari tblsenaman dan rekod sebab tu dari tblsebab.kalo aku retrieve rekod dr tblsenaman, in case tbl tu takder rekod lg, so dia tak paparkan rekod staf, caner aku nak edit dan save kan? kalo aku retrieve dari tblstaf, nnt takder lak rekod pasa status, bulan etc tu semua... ikut logik buleh relate kan? tu lg satu masalah, lg penin aku nk buat. hehehehe.... so apa yg sepatutnya ada dlm tblsenaman selain status, bulan.. etc tu semua? aku tambah field NoID, Nama.. harap korang dpt bg idea.... aku buntu pikir sorang2 ni.katakan tblsenaman masih kosong. aku masuk tahun 2008, bulan mac, then tarikh PT 1 31-03-2008. kalo aku retrieve dr tblsenaman takan ada rekod dipaparkan. carian aku based on tarikh tu... so, caner aku nk tambah rekod dalam tblsenaman utk data2 kat atas tu kalo rekod tak dipapar? aku rasa macam tetinggal sesuatu, tapi aku tak nmpk apa dia.... Edited March 25, 2008 by DrASAG Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 25, 2008 oo sian koo.ni masalah senang jerrrkalau ko jumpa aku sure terus leh siap.aku kasik idea n solution sekali1 table pun dah cukupkalau nak normalize pun leh.kalau ko nak aaako duduk manaaku duk klkalau nak leh aa jumpa kat starbuck kerrrtapi ko banje aku laawakakakakakka. heheheehamacamada beraniiihehehsiap aku kasik sample sistem lagihehehehe Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 25, 2008 A'kum..uikk.. hang ni banjer sajer... huhuhuhu... cakap tadik nk bg cth kod. hehehehe.. aku dah ubah kod aku tu. aku retrieve rekod dari dua tbl guna JOIN. buleh ler papar. tapi problem nak save rekod tu ler. dia ckp takleh save utk multiple table.. huhuhuhu...bro kl area mn? aku dok bt cave, sebelah giant tu. hehehehe.. starbuck? aku tak penah masuk tmpt2 cenggitu. kfc giant leh la. hahahaha... serius ni... Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 25, 2008 hahahhaku duduk depan giant tuuwakakakkaleh aa no halll. mlm ni pun tak perrwakakakakaka. banje minum jerrmurah jerrrrkat starbuck sebab internet freeekfc tak der internetlagipun kfc mahal sikithehehehehkalau ok ok lewheheheh Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 25, 2008 lor, org bt cave gak ka? kuakuakua... mlm ni? ok jer... bkn masalah mahal ke apa, aku tak penah g tmpt2 gitu.. hehehe lgpon aku takleh kuar lama2, anak aku kecik2 lg, org umah aku kursus... hehehehe... mlm ni kfc giant weii.. kol waper nak turun.. kol 8 bleh ka. sbb 9.30 nk kn blk, kn tidokan anak2 lak. huhuhu... Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 25, 2008 ok ok no halllhehehehehok no hallhehesian kat kooo hehehehaku tolong aaakat mamak banje aku roti ngan teh o pun dah okhehehehe Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 25, 2008 A'kum.hehehe.. tenkiu.. mamak mana? kol 8 arr... byk oo kedai mamak kat bt cave.. hehehehe Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 25, 2008 kat depan toyota aaaa. amacam, yg jalan masuk taman bolton tuhehehehke nak blah koaku ok jerr Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 25, 2008 ooo ok jer. seeeet.. mlm ni arr.. caner nak kenal hang.. Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 25, 2008 aku naik putra biru. jumpa kat sana aaaok.tahukan kat nerrrtaman bolton bintang tujuh restorN KOTTT Quote Share this post Link to post Share on other sites
DrASAG 0 Report post Posted March 26, 2008 A'kum... hehehe.. wei tak email lagik arr cth kod tu? hehehe... ekcelli aku dah bleh buat. lega sioottt.. tima kasih idea ko semalam. macam ko cakap guna parameter tuh... aku wat tak menjadik lak. aku ubah sket.. tatau la aku guna parameter ke tak.. coba tgk kat bwh ni...Private Sub btnsimpan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsimpan.Click Dim strID, strStatus, strSebab As String Dim n As Integer = 0 For n = 0 To DG.RowCount - 1 strID = DG.Rows(n).Cells("Column1").Value.ToString strStatus = DG.Rows(n).Cells("Column4").Value.ToString strSebab = DG.Rows(n).Cells("Column3").Value.ToString If CheckUser(strID) = True Then updatePT(strID, strStatus, strSebab) Else insertPT(strID, strStatus, strSebab) End If Next End Sub Function CheckUser(ByVal strUserID As String) As Boolean Dim dsUser As New DataSet Dim daUser As OleDbDataAdapter sConn.Open() Try sql = "SELECT * FROM tblPT WHERE Tahun='" & txttahun.Text & "' AND Bulan='" & cbobulan.Text & "'" Dim cmd As New OleDbCommand(sql, sConn) daUser = New OleDbDataAdapter(cmd) daUser.Fill(dsUser, "tblPT") For Each Drow In dsUser.Tables(0).Rows If Drow("NoID") = strUserID Then sConn.Close() Return True Else sConn.Close() End If Next Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Error") End Try End Function Function updatePT(ByVal strID As String, ByVal strStatus As Boolean, ByVal strSebab As String) Dim sCmd As String If klik = 1 Then sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT1=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'" Dim cmd As New OleDb.OleDbCommand(sCmd, sConn) cmd.Parameters.AddWithValue("Status", CBool(strStatus)) cmd.Parameters.AddWithValue("Sebab", strSebab) cmd.Parameters.AddWithValue("PT1", t1.Text) sConn.Open() cmd.ExecuteNonQuery() sConn.Close() ElseIf klik = 2 Then sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT2=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'" Dim cmd As New OleDb.OleDbCommand(sCmd, sConn) cmd.Parameters.AddWithValue("Status", CBool(strStatus)) cmd.Parameters.AddWithValue("Sebab", strSebab) cmd.Parameters.AddWithValue("PT2", t2.Text) sConn.Open() cmd.ExecuteNonQuery() sConn.Close() ElseIf klik = 3 Then sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT3=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'" Dim cmd As New OleDb.OleDbCommand(sCmd, sConn) cmd.Parameters.AddWithValue("Status", CBool(strStatus)) cmd.Parameters.AddWithValue("Sebab", strSebab) cmd.Parameters.AddWithValue("PT3", t3.Text) sConn.Open() cmd.ExecuteNonQuery() sConn.Close() ElseIf klik = 4 Then sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT4=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'" Dim cmd As New OleDb.OleDbCommand(sCmd, sConn) cmd.Parameters.AddWithValue("Status", CBool(strStatus)) cmd.Parameters.AddWithValue("Sebab", strSebab) cmd.Parameters.AddWithValue("PT4", t4.Text) sConn.Open() cmd.ExecuteNonQuery() sConn.Close() End If End Functionuntuk function insertPT tu sama gak cam update tu, cuma tukar command INSERT jer... aku rasa mcm panjang kod ni, leh pendekkan lg ker? kalo guna parameter cam ko tunjuk semalam caner? thanx 4 da ideas... Quote Share this post Link to post Share on other sites
DevGuy 0 Report post Posted March 26, 2008 (edited) hehhe aku dah hantar daasemalam aku tertidooo penat daaok leh kurangkan coding niitak perr aaakalau yg parameter tu aku dah send dahhtgk aa kangokhehehanyway thank for the mee goreng mamak n teh oheheeh Edited March 26, 2008 by DevGuy Quote Share this post Link to post Share on other sites