แสดงกระทู้

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 - Jiw Jewel

หน้า: 1 [2] 3
19
สวัสดีค่ะ เรากำลังทำการบันทึกข้อมุลโดยมีโครงสร้างโปรแกรม คือ มีฟอร์มย่อย 1 ฟอร์มในฟอร์มหลักค่ะ
ตัวอย่างโปรแกรมนะคะ



ต่อไปเป็นโค้ดที่ใช้นะคะ

Option Compare Database
Option Explicit
Dim Prefix As String
Dim vLast As Variant
Dim iNext As Integer
Dim msg As Integer
Dim Saved As Boolean
Dim runNo As Variant
Dim tradeID As String
Dim doc_id As String

Private Sub C_cancelF_Click()
        DoCmd.OpenForm "Home", acNormal, "", "", , acNormal
        DoCmd.Close acForm, "form_proRequest"
End Sub


ส่วนนี้ไม่มีอะไรค่ะ แค่โค้ดกำหนดค่าตัวเลขเอกสารเฉยๆค่ะ
Private Sub DistChannel_AfterUpdate()
    If Not IsNull(Me.DistChannel.Value) Then
        Prefix = Me.DistChannel.Value
        'find max value of runing_NO in table ProRequest
        vLast = DMax("[runing_NO]", "[ProRequest]", "[runing_NO] LIKE '" & Format([proReq_date], "yy\*\'"))
        If IsNull(vLast) Then
            iNext = 1
        Else
            vLast = Val(Right(vLast, 3))
            vLast = vLast + 1
            iNext = vLast
        End If
        runNo = Format([proReq_date], "yy") & Format(iNext, "000")
        Me.run_Number = runNo
        Me.proReq_ID = Prefix & Me.run_Number
        'set button enable
        Me.next_btn.Enabled = True
        Me.save_btn.Enabled = True
    Else
        Me.run_Number = ""
        Me.proReq_ID = ""
        'set button enable disable
        Me.next_btn.Enabled = False
        Me.save_btn.Enabled = False
    End If

End Sub


ส่วนตรงนี้เป็น Table ของ sub form ค่ะ Form ค่ะ
Private Sub Form_Current()
'Set Me.sub_proRequrest_Detail.Form.Recordset = CurrentDb.OpenRecordset("SELECT * FROM [proRequest Detail] WHERE proReq_ID = '" & Me.proReq_ID & "'", dbOpenDynaset, dbAppendOnly)
End Sub

Private Sub Form_Dirty(Cancel As Integer)
    If Me.Dirty = False Then
        DBEngine.BeginTrans
    End If
End Sub

ส่วนตรงนี้เป็น Table ของ Main Form ค่ะ
Private Sub Form_Open(Cancel As Integer)
Set Me.Recordset = CurrentDb.OpenRecordset("SELECT * FROM ProRequest", dbOpenDynaset, dbAppendOnly)
End Sub


ปุ่มกด save ซึ่งสามารถทำงานได้ แต่เมื่อกดเพิ่มข้อมูลในsubform แล้ว ไม่สามรถบันทึกได้ค่ะ เพิ่งแต่ที่ตรงนี้เยอะเพระต้องการบังคับใส่ข้อมูลเฉยๆค่ะ
Private Sub next_btn_Click()
On Error GoTo Save_Error
        If IsNull(Me.DistChannel) Then
        MsgBox "กรุณาเลือกช่องทางการขาย (1)", vbCritical
        Me.DistChannel.SetFocus
        Exit Sub
    End If
    If IsNull(Me.forecast_dist) Then
        MsgBox "กรุณาเลือกช่องทางการขาย (2)", vbCritical
        Me.forecast_dist.SetFocus
        Exit Sub
    End If
    If IsNull(Me.Empp_ID) Then
        MsgBox "กรุณาเลือกพนักงานขาย", vbCritical
        Me.Empp_ID.SetFocus
        Exit Sub
    End If
    If IsNull(Me.proReq_name) Then
        MsgBox "กรุณาใส่ชื่อกิจกกรม", vbCritical
        Me.proReq_name.SetFocus
        Exit Sub
    End If
    If IsNull(Me.proReq_start_date) Then
        MsgBox "กรุณากรอกวันที่เริ่มโปรโมชั่น", vbCritical
        Me.proReq_start_date.SetFocus
        Exit Sub
    End If
    If IsNull(Me.proReq_end_date) Then
        MsgBox "กรุณากรอกวันที่สิ้นสุดโปรโมชั่น", vbCritical
        Me.proReq_end_date.SetFocus
        Exit Sub
    End If
    If IsNull(Me.proReq_date_sum) Then
        MsgBox "กรุณากรอกวันที่สรุปรายการกับฝ่ายขาย", vbCritical
        Me.proReq_date_sum.SetFocus
        Exit Sub
    End If
    If IsNull(Me.proReq_date_confirm) Then
        MsgBox "กรุณากรอกวันที่ฝ่ายขายยืนยันรายการ", vbCritical
        Me.proReq_date_confirm.SetFocus
        Exit Sub
    End If
    If (Me.C_discoubt = False) And (Me.C_exchange = False) And (Me.C_getfree = False) And (Me.C_set = False) And (Me.C_spacial = False) And (Me.C_other = False) Then
        MsgBox "กรุณาเลือกประเภทกิจกรรม", vbCritical
        Exit Sub
    End If

    If IsNull(Me.FrontMargin) Then
        MsgBox "กรุณากรอก Front margin/ส่วนลด", vbCritical
        Me.FrontMargin.SetFocus
        Exit Sub
    End If
    Me.Status_ID = 81
   CurrentDb.Execute "INSERT INTO proAssess (proAssess_ID, Sale_EMP_ID) VALUES ('" & Me.proReq_ID & "' , '" & Me.Empp_ID & "')"
    DBEngine.CommitTrans
    doc_id = Me.proReq_ID
    DoCmd.GoToRecord , , acNewRec
    DoCmd.OpenForm "Efrm_proAssess", acNormal, , "[proAssess_ID]='" & doc_id & "'"
    DoCmd.Close acForm, "form_proRequest"
    Exit Sub
   
Save_Error:
DBEngine.Rollback
MsgBox "error จ้าาาา", vbOKOnly
End Sub


ตรงนี้เป็น โค้ดสำหรับการใส่ข้อมูลในเอกสารเฉยๆค่ะ
Private Sub proReq_date_confirm_BeforeUpdate(Cancel As Integer)
minimum_date = DateAdd("m", -2, Me.proReq_start_date)
    If (Me.proReq_date_confirm >= minimum_date) Then
        MsgBox "วันที่ไม่ถูกต้อง", vbCritical
        Cancel = True
    End If
End Sub
Private Sub proReq_date_sum_BeforeUpdate(Cancel As Integer)
    If Me.proReq_date_sum <= Me.proReq_date Then
        MsgBox "วันที่ไม่ถูกต้อง", vbCritical
        Cancel = True
    End If
End Sub

Private Sub proReq_end_date_BeforeUpdate(Cancel As Integer)
    If (Me.proReq_end_date < Me.proReq_start_date) Then
        MsgBox "วันที่ไม่ถูกต้อง", vbCritical
        Cancel = True
        Me.proReq_end_date.Undo
    End If
End Sub


ตรงนี้เป็น โค้ดสำหรับการใส่ข้อมูลในเอกสารเฉยๆค่ะ
Private Sub proReq_start_date_AfterUpdate()
    Me.proReq_date_confirm = DateAdd("m", -2, Me.proReq_start_date)
End Sub

ปุ่มกด save ซึ่งสามารถทำงานได้ แต่เมื่อกดเพิ่มข้อมูลในsubform แล้ว ไม่สามรถบันทึกได้ค่ะ
Private Sub save_btn_Click()
On Error GoTo Save_Error
    If IsNull(Me.DistChannel) Then
        MsgBox "กรุณาเลือกช่องทางการขาย (1)", vbCritical
        Me.DistChannel.SetFocus
        Exit Sub
    End If
    If IsNull(Me.proReq_start_date) Then
        MsgBox "กรุณากรอกวันที่เริ่มโปรโมชั่น", vbCritical
        Me.proReq_start_date.SetFocus
        Exit Sub
    End If
    If IsNull(Me.proReq_end_date) Then
        MsgBox "กรุณากรอกวันที่สิ้นสุดโปรโมชั่น", vbCritical
        Me.proReq_end_date.SetFocus
        Exit Sub
    End If
    Me.Status_ID = 81
    DBEngine.CommitTrans
    Saved = True
    MsgBox "บันทึกแล้ว", vbOKOnly
    Exit Sub
   
Save_Error:
DBEngine.Rollback
Saved = False
MsgBox "error จ้าาาา", vbOKOnly
End Sub


สิ่งเราต้องการคือการกด save แล้วมันบันทึกตารางค่ะ แต่ทำไม่ได้ค่ะ ช่วนด้วยนะคะ งมมา 3 วันแล้วค่ะ
ส่วนด้านล่างเป็น ref ที่ดูมาเป็นไกด์ค่ะ
https://codekabinett.com/rdumps.php?Lang=2&targetDoc=how-to-access-transaction

20
ห้อง MS Access / transection table สอบถามค่ะ
« เมื่อ: 11 มี.ค. 64 , 09:32:05 »
คือเรากำลังเก็บข้อมูลอยู่ค่ะเป็นข้อมูลใบเนสอราคาสินค้า ซึ่ง ตอนนี้ มี 2 table(อย่างคร่าวๆ นะคะ ) คือ
1. order จะเก็บ 1.เลขที่เอกสาร 2.วันที่
2. order detail  จะเก็บ 1.ID 2.เลขที่เอกสาร 3.รหัสสินค้า 4.ราคาที่เสนอ

ทีนี้ประเด็นคือ ราคาที่เสนอน่ะค่ะ อาจมีการมาแก้ไขได้ ทีนี้เลยอยากเก็บข้อมูลค่ะว่า ราคาก่อนหน้านี้คืออะไร แล้วเปลี่ยนเป็นอะไรน่ะค่ะ (tracking การแก้ไขข้อมูล) ทีนี้อย่าได้แนวคิดค่ะว่าจะทำยังไงต่อ ควรสร้างtable ออกมายังไงคะ หลักการคิดคืออะไร

21
ห้อง MS Access / : สอบถาม error flow error 6
« เมื่อ: 08 ก.พ. 64 , 08:27:36 »
ตอบคำถามค่ะ การกำหนดขนาดขอข้อมูลนั้น เป็น double ค่ะ โดยขั้นตอนการทำงานนั้น เป็นการให้โปรแกรมคำนวณค่า sum จาก continuous form แล้วเอาค่า ที่ได้นี้ไปเป็นตัวหารของ data ที่ dlookup มาจากใน table อีกทีค่ะ

ตัวอย่าง 1.  กำหนดให้ a = ค่าที่ dlookup มาจาก table
          2.  กำหนดให้ b = ค่า sum ที่ได้จาก textbox ใน form

ขั้นตอนการดำเนินการของโปรแกม         (a/b)*100

ตอนนี้จากที่สังเกตุนะคะ เหมือนว่า b จะมาค่าเป็น 0 ค่ะ เวลาที่ส่งให้โปรแกรมทำงานเอง ดังนั้น เวลาที่ เอามาหารกับ a จึงเกิด error ขึ้น เพราะ ไม่สามารถมีเลขตัวใดที่หารด้วย 0 ได้ค่ะ

แต่

เวลาที่debug โปรแกรมไปด้วย แม้จะใช้ตัวชุดข้อมูลเดียวกัน แต่ b จะไม่เป็น 0 ค่ะ


ซึ่งได้ลองทำการหน่วงเวลาแล้วแต่ยังไม่ได้ผลค่ะ


22
ห้อง MS Access / สอบถาม error flow error 6
« เมื่อ: 05 ก.พ. 64 , 17:40:09 »
รบกวนสอบถามหน่อยค่ะ
 
โปรแกรมขึ้น   error flow error 6 แต่พอ debug error แล้ว error ไม่แสดงค่ะ ก็คือผลลัพธ์ตามที่ต้องการต้องค่ะ แตพอเวลา run เองโดยไม่มีเบรกพ้อย์ ขั้น error ค่ะ
ปล.อันนี้เป็ฟอร์ม ที่อยู่ในsub form อีกทีค่ะ ซึ่งตัวที่มีปัญหาคือ textbox ที่คำนวณค่า sum จากตารางใน continuous ฟอร์มอิกทีค่ะ

23
ถ้า client 1 แก้ไข record เดียวกัน กับ client 2 โดยทั่วไปจะขึ้น error write conflict ค่ะ ซึ่ง error นี้จะให้เราเลือกว่า Copy to Clipboard หรือ Drop Changes ซึ่งไม่อนุญาติให้ client ที่มาทีหลังแก้ไขค่ะ

24
update นะคะ

ตอนนี้แก้ได้แล้วค่ะ เรื่องของเรื่องเนี่ย เหมือนว่าเวลาคำนวณมันจะมีช่องที่เป็น 0 อยู่ เพราะคำนวณพร้อมกัน แล้วก่อนหน้านี้มีโค้ดให้ save record ก่อนค่ะ ทำให้เวลาsave ไปแล้วค่าตัวอื่นมันรีเซ็ทใหม่มันเลยกลายเป็น 0 แล้ว 0 เนี่ยมันก็เอามาหารไม่ได้มันเลยขึ้น error ค่ะ ซึ่งวิธีแก้นะคะ ก็คือต้องลำดับcode ใหม่ ให้โปรแกรมมันคำนวณให้เสร็จก่อนแล้วค่อยsave ค่ะ เพราะที่มันจะได้ไม่เอา 0 มาหาร  :zzz:

ยังไงก็ขอบคุณ คุณ PNR มากนะคะที่มาตอบ ได้คิดอะไรหลายอย่างเลยค่ะ  :fake smile:

25


ตามนี้เลยค่ะ

26
ตอนนี้ค่อนข้างมั่นใจแล้วค่ะว่าสาเหตุน่าจะมาจากการที่  textbox ที่ให้คำนวณนั้นเกิดมาจาก การเอา % + ตัวเลขธรรมดาค่ะ เลขทำให้เกิด error นี้ขี้น

แต่ตอนนี้ลองแปลงทั้งการ ทำ % เป็นตัวเลขแล้ว เอามาบวกกันผลก็ยังคงเดิมค่ะ error ยังไม่หายไปค่ะ

27
อ้ออ เข้าใจแล้วค่ะ แต่ว่าไม่เกี่ยวกันค่ะ เพราะว่า ตัวโค้ดมีเท่านั้นเลยค่ะ ลองสร้าง textbox อีกตัวขึ้นมาแล้วใส่ค่าที่ทศนิยมเยอะๆลงไป ไม่เกิด error ค่ะ ถ้าเป็นเป็น textbox ตัวอื่น แต่ถึงอย่างนั้นก็ไม่รู้ว่าจะพลิกแพลงแก้ปัญหาอย่างไรดีค่ะ

28
ตอบคำถามนะคะ 
proRequest_ID เป็น string ค่ะ ก่อนหน้าลองเทสดูแล้ว error มาจาก ค่าใน textbox ที่สั่งให้โปรแกรมคำนวณให้อย่างแน่นอนค่ะ เพียงแต่ว่ายังหาสาเหตุไม่ได้ค่ะว่าทำไมถึงขี้นแบบนั้นค่ะ

ขอสอบถามอีกเรื่องนะคะ จากคำถามก่อนหน้าที่ถามมาว่าเป็นsubform หรือไม่ มันเกี่ยวข้องอะไรกันหรือเปล่าคะ

29
ตอบคำถามนะคะ
1. datatype เป็น double format เป็น percent กำหนด จุดทศนิยม 2 ตำแหน่งค่ะ
2.form ที่คำนวนอยู่ในฟอร์มย่อยอีกทีค่ะ
3. ลองแล้วค่ะ ยังขึ้นเหมือนเดิมค่ะ


30
โปรแกรมแจ้งเตือนว่า error 13 'type mismatch'

code ตัวอย่าง

    CurrentDb.Execute "UPDATE [proAssess Detail] SET [proAssess Detail].backmargin_sum_percent = " & aaa & "  WHERE ((([proAssess Detail].proRequest_ID)='" & Me.proRequest_ID & "'))"

ซึ่งตรง aaa ค่ะ คือค่าที่รับมาจากการคำนวณในform ซึ่งมาจากการหารแล้วทำเป็นเปอร์เซ็นต์ค่ะ มีจุดทศนิยมเป็น 10 ตัวเลยทีเดียวค่ะ

ทีนี้อยากสอบถามว่าที่เกิดerror ขึ้นเป็นเพราะทศนิยมเยอะเกินไปหรือเพราะกำหนดอะไรปิดกันแน่
ก่อนหน้านี้ ลองแปลงformat ดูค่ะ แต่ตัวเลขที่แปลงมามี "" ติดอยู่ด้วย จึงคิดว่าที่error เพราะเช่นนี้หรือเปล่า และขอให้ช่วยแนะนำการตัดทศนิยมด้วยนะคะ ขอบคุณล่วงหน้าค่ะ

31
ห้อง MS Access / set style ใน excel ผ่าน access vba
« เมื่อ: 14 ธ.ค. 63 , 10:41:41 »
รบกสรสอบถามค่ะ คือพอดีว่าจะเปลี่ยนสีตรง conditional formatting ใน cell ตามเงื่อนไขให้เป็น  style Bad ค่ะ แต่ไม่ทราบcode ว่าทำอย่างไรหาในเน็ตแล้วไม่เกิดผลเลยค่ะ

ปล.ลองเทียบสีปกติแล้วเพี้ยนค่ะ ซึ่งไม่ทราบว่าเพราะอะไรค่ะ

32
เราทำโปรแกรมค่ะ แล้วความจริงตัวโปรแกรมจะต้องกรอกข้อมูลลงทีละบรรทัดค่ะ (กรอกรหัสสินค้าแล้วข้อมูลอื่นๆที่จำเป็นจะเด้งขึ้นมาค่ะ) แต่เนื่องจากว่า ข้อมูลที่ต้องกรอกบางครั้งมีมากถึง 100 กว่ารายการค่ะ เราเลยอยากทราบว่ามันสามารถดึงเอาข้อมูลไปลงในฟอร์มบางส่วน อย่างน้อยก็รหัสสินค้า สามาถทำได้ไหมคะ รบกวนผู้รู้บอกทางสว่างให้ทีค่ะ

ส่วนข้างล่างเป็นตัวอย่างหน้าจอค่ะ


33
ขอบคุณมากค่ะ ทำได้แล้วค่ะ ช่วยได้มากจริงๆค่ะ

34
มีตัวอย่าง code หรือเว็บไซต์แนะนำไหมคะ

แต่ขอลองสอบถามตามความเข้าใจก่อนนะคะ ว่าเข้าใจถูกไหม

ก็คือ ให้เอาค่า age จาก 2 ตารางมาเปรียบเทียบกัน แล้วให้เลือกตัวที่มีค่ามากที่สุดมา มาทำเป็น 1 column ต่อจาก ID และ name ถูกต้องไหมคะ

35
คืออยากให้query แสดงข้อมูลตามนี้ค่ะ
ถ้าเรามี table 1 และ table 2 ตามนี้
Table1
Id|Name |age
1 | Hill    | 3
2 | Golf   |
3 | Soya  | 5

Table2

Id|Name|age
1 | Hill   | 5
2 | Golf  | 4
3 | Soya |
4 | Jin    | 9


Query Results

Id|Name|age
1 | Hill   |5
2 | Golf  |4
3 | Soya |5

ต้องทำอย่างไรคะ ทางนี้ลอง Left Join แล้ว Union ค่าที่ออกมาซ้ำเป็น2 แถวค่ะเช่น

Id|Name|age
1 | Hill   |3
1 | Hill   |5
2 | Golf  |
2 | Golf  |4
3 | Soya |5
3 | Soya |


รบกวนผู้รู้ช่วยทีนะคะ

36
อัปเดตเพิ่มเติมนะคะ ตอนนี่สามารถอัปเดตข้อมูลได้แล้ว โดยการสร้าง temp table รองรับข้อมูลจาก oracle ก่อน แล้วจึงใช้คำสั่งอัปเดตค่ะ

หน้า: 1 [2] 3