แสดงกระทู้

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.


Messages - Niky@cm5

หน้า: [1]
1
ห้อง MS Access / : สอบถาม code
« เมื่อ: 01 มิ.ย. 64 , 19:50:30 »
เรียบร้อยแล้วครับได้หละ ขอบคุณครับ :prettiness:

2
ห้อง MS Access / : สอบถาม code
« เมื่อ: 31 พ.ค. 64 , 13:11:31 »
ผมกำลังพยายามเขียน code dim adodb  ตามนี้ (code วางบนปุ่มในฟอร์ม frontend ตารางอยู่ backend 
Private Sub Command0_Click()
On Error GoTo ErrorHandler
Dim cn As New ADODB.Connection
Dim sql As String
Dim rs As New ADODB.Recordset
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\ASUS\Desktop\traning\Database17.accdb;Persist Security Info=False;"
sql = "SELECT * FROM tblTeachers WHERE TeacherID=5"
Set rs = New ADODB.Recordset
rs.Open sql, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
With rs
    If Not .BOF And Not .EOF Then
        .MoveLast
        .MoveFirst
        If .Supports(adUpdate) Then
            ![FirstName] = "x" & ![FirstName]
            .Update
        End If
    End If
    .Close
End With
ExitSub:
    Set rs = Nothing
    Exit Sub
ErrorHandler:
    Resume ExitSub
End Sub
 ประเด็นของผมคือผมอยากให้มันอัพเดท table ข้าม database คือ code อยู่บนฟอร์ม อีก database หนึ่ง (frontend) ตามรางอยู่ backend  ข้อมูลไม่ update ตามครับ แต่ถ้าเป็นตารางใน database เดียวกัน หรือ ตาราง link  ทำได้ครับ แต่ถ้าเป็นเอาแต่ code ล้วนๆไม่ได้ ปกติทำได้ไม่ครับ no table on database หรือ code ผิดพลาดตรงไหนช่วยชี้แนะหน่อยครับ :sweat:

3
ขอบคุณสำหรับคำตอบครับ ได้หละครับ ผมใช้ code  SELECT CASE  เลือกได้ครับทุกรายงาน

5
ผมมี 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



6
ขอบพระคุณมากครับท่านอาจารย์ ที่ให้วิทยาทานครับจะนำความรู้ไปเกิดประโยชน์ต่อไปครับ :love:

7
ผมสอบถามผู้รู้ว่ากรณีการใช้ 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

8
ได้แล้วเรียบร้อยครับตามวัตถุประสงค์ครับ ขอบคุณอาจารย์ ทุกท่านครับที่ให้วิทยาทาน

9
ืnikorn คนเดียวกับเจ้าของกระทู้นะครับ ผมลองเปิดดูแล้วไม่เหมือนกับตัวอย่างไฟล์ที่ท่าน อาจารย์ PNR ส่งให้ดูครับ แต่ก็มีเป็นอีก 1 ไอเดียขอบคุณครับ

10
เบื้องต้นผมลองทำตามคำแนะนำแล้วมันซ่อนไปเลยครับไม่เป็นเงาเหมือนของเขาครับ แต่ก็ขอขอบคุณสำหรับคำแนะนำครับ

11

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


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

หน้า: [1]