แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Niky@cm5

หน้า: [1]
1
ผมมี code vba อยู่อันนี้ ผมมีรายงานอยู่ 2 แบบ แต่รับค่าจากตารางเดียวกัน คือรายงานแบบที่ 1 มีตารางรายงานครบทุกช่อง แต่ รายงานแบบที่ 2 มีตารางน้อยกว่าแบบที่ 1 (เพราะตารางแบบที่ 2 มีค่าว่างอยู่ผมเลยทำแสดงเฉพาะที่มีข้อมูลเท่านั้นตารางว่างไม่แสดง ประเด็นผมอยากจะให้ code vba เลือกที่รายงานแบบที่ 2 หากผมเลือกค่า ใน combobox (มีอยู่ 1 ค่า(Province)) ให้แสดงรายงานรแบบที่ 2 หากเป็นค่าอื่นให้แสดงรายงานแบบที่ 1 ปกติ มันจะได้หรือไม่ครับ จะต้องเพิ่ม code ตรงไหน  code vba มีดังนี้ครับ
Private Sub cmdPrint_Click()
   On Error GoTo Err_cmdPrint_Click
   Dim Mysql As String, i As Integer
   Dim mydb As DAO.Database, myquery As DAO.QueryDef, Td As DAO.Recordset, tpo As DAO.Recordset, qryage As DAO.Recordset
   Set mydb = CurrentDb
   Set myquery = mydb.CreateQueryDef("", "Delete * from DETAILPOSITDEPT")
   myquery.Execute
   myquery.Close
   Mysql = "SELECT Positid.ID_POSIT, Positid.POSITING, Positid.DEPTING, Positid.ID, POSITION.POSIT, DEPART.PROVINCE, Level.LEVELNAME, Level.LEVEL ,DEPART.DEPT"
   Mysql = Mysql & " FROM ([Query49])"
   Mysql = Mysql & "Where Province = '" & NProvince & "' Order by Positid.Depting;"
   Set qryage = mydb.OpenRecordset(Mysql)
   Set Td = mydb.OpenRecordset("DETAILPOSITDEPT", dbOpenDynaset) 
   qryage.MoveFirst
   With qryage
   Do While Not .EOF
          If .Fields(7) = "1" Then
               i = 2
          End If
          If .Fields(7) = "2" Then
               i = 5
          End If
          If .Fields(7) = "3" Then
               i = 8
          End If
          If .Fields(7) = "4" Then
               i = 11
          End If
          If .Fields(7) = "5" Then
               i = 14
          End If
          If .Fields(7) = "6" Then
               i = 17
          End If
          If .Fields(7) = "7" Then
               i = 20
          End If
          If .Fields(7) = "8" Then
               i = 23
          End If
          If .Fields(7) = "9" Then
               i = 26
          End If
          Td.FindFirst "DEPTID = '" & qryage("DEPTING") & "' "
          If Td.NoMatch Then
              Td.AddNew
              Td("DEPTID") = qryage("DEPTING")
              Td("DEPTNAME") = qryage("DEPT")
          Else
               Td.Edit
          End If
 Td.Fields(i) = Td.Fields(i) + 1
          Td.Fields(29) = Td.Fields(29) + 1
          If qryage("ID") <> 0 Then
             Td.Fields(i + 1) = Td.Fields(i + 1) + 1
             Td.Fields(30) = Td.Fields(30) + 1
          Else
             Td.Fields(i + 2) = Td.Fields(i + 2) + 1
             Td.Fields(31) = Td.Fields(31) + 1
          End If
         Td.Update
          .MoveNext
Loop
End With
qryage.Close
Td.Close
mydb.Close
DoCmd.OpenReport "report1", acPreview

Exit_cmdPrint_Click:
    Exit Sub

Err_cmdPrint_Click:
    MsgBox Err.Description
    Resume Exit_cmdPrint_Click
   
End Sub



2
ผมสอบถามผู้รู้ว่ากรณีการใช้ frontend โดยเชื่อม linking table มาทุกตารางที่เกี่ยวข้อง เวลาแก้ไขข้อมูลสามารถทำได้ในฟอร์มได้ทุกอย่างแต่ เมื่อทำจะทำการอัพเดทโดยการรันคิวรีอัพเดทหลายตารางพร้อมกันไม่สามารถทำได้ โปรแกรมจะฟ้องว่า การดำเนินการที่ไม่ถูกต้อง  ซึ่งกรณีดังกล่าวหากดำเนินการใน file back end ทำได้ทุกฟังก์ชั่น เมื่อแยก frontend ออกมาแล้วเชื่อม ทำไม่ได้ในรูปแบบที่กล่าว เพราะเหตุใดครับอยากถามมานานมากแล้ว เพราะไม่สามารถแก้ไข หรือเป็นเพราะ permission แต่สิทธิผมก็แก้ไขตารางได้ทุกอย่างนะครับ ยกเว้นแค่รันคิวรีอัพเดทแบบที่ผมบอกไม่สามารถทำได้เวลากดปุ่ม บันทึก ลืมบอก backend ผมเป็น access นะครับไม่ได้ใช้ sql แบบธรรมดาปกติ backend อยู่ drive z (แบ่งพาสที่ชั่นใหม่) ตัว frontend อยู่ หน้า desktop ส่วนในวงแลนผม map drive ไว้ที่ z เหมื่อนกันเผื่อให้  user ใช้ร่วมกัน ผมต้องเพิ่มอะไรไหมครับมันถึงจะได้ เบื้องต้นออกตัวไว้ก่อนนะครับผมไม่ได้เรียนมาด้านนี้เลยแต่อาศัยครูพักลักจำสามารถเขียนใช้ได้ในระดับหนึ่งครับ ต้องเพิ่มคำสั่งตรงไหนโปรดชี้แนะครับ
 
คำสั่ง vba command button ใช้ชุดนี้ครับ
Private Sub cmdsave_Click()
On Error GoTo Err_Command139_Click
If IsNull(Me!POSIT_DT) Then
   MsgBox "**** กรุณาบันทึกข้อมูลวันที่ ****"
   Exit Sub
End If
DoCmd.SetWarnings False
Dim db As Database, Td As Recordset
Dim ds As Recordset, ttran As Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set ds = db.OpenRecordset("positid", DB_OPEN_TABLE)
Set Td = db.OpenRecordset("person", DB_OPEN_TABLE)
Set ttran = db.OpenRecordset("tranpolice", DB_OPEN_TABLE)
Td.Index = "Primarykey"
ds.Index = "Primarykey"
'Update person file
Td.Seek "=", mid
If Td.NoMatch Then
   MsgBox "ไม่มีข้อมูลรหัสตำแหน่ง " & mid_posit & " ในตาราง Person"
Else
Td.Edit
Td.Update

   Td.Edit
   Td("id_posit") = Null
   Td.Update
End If
Td.Close
'criterion = "id_posit = mid_posit"
ds.Seek "=", mid_posit
If ds.NoMatch Then
   MsgBox ("ไม่มีข้อมูลรหัสตำแหน่ง " & mid_posit & " ในตารางเลขตำแหน่ง")
Else
   ds.Edit
   ds("id") = 0
   ds.Update
End If
ds.Close
ttran.AddNew
ttran("id") = mid
ttran("id_posit") = mid_posit
ttran("trncode") = Me![trncode]
ttran("trndate") = Me![POSIT_DT]
ttran("destination") = Me![destination]
ttran("lastupdate") = Me![lastupdate]
ttran.Update
ttran.Close
Forms![POLICE]![search_text] = Null
Forms![POLICE]![MAIN_ID] = Null
Forms![POLICE]![by_code] = Null
Forms![POLICE]![by_name] = Null
Forms![POLICE]![by_name].RowSource = "SELECT DISTINCTROW Person.NAME, Positid.ID_POSIT, Person.ID FROM Positid LEFT JOIN Person ON Positid.ID_POSIT = Person.ID_POSIT ORDER BY Person.NAME;"
DoCmd.Close acForm, "out_Police"
Exit_Command139_Click:
    Exit Sub

Err_Command139_Click:
    MsgBox Err.Description
    Resume Exit_Command139_Click
   
End Sub

3

  ผมติดปัญคือคนเก่าเขาเขียนโปรแกรม access 2003 ไว้และตอนนี้เริ่มจะมีปัญหา ผมจึงกำลังเขียนขึ้นใหม่แต่ติดปัญหาอยากทราบว่ากรณีผมอยากจะให้โปรแกรมเปิดเขามาครั้งแรก ยังไม่ให้ subforms ขึ้นมาทันที่จนกว่าผมจะไปคลิก combo ค้นหา คนเก่าโปรแกรมเวลาเปิดมายังจะเป็นเงาอย่างภาพครับ แต่ของผมเวลาเขียนแล้วมันขึ้นมาเลย แต่ข้อมูลยังใน subform ยังไม่มีนะครับ เมื่อผมไปคลิกค้นหาถึงจะมี แต่อย่างได้ตอนเปิดฟอร์มขึ้นมานั้นหละครับเขาทำกันยังไง


 โปรแกรมที่ผมทำขึ้นมันขึ้นมาทั้งบล๊อคเลยครับ มารอไว้ก่อนเลย

หน้า: [1]