แสดงกระทู้

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 - PNR

หน้า: 1 ... 3 4 5 [6] 7 8 9 ... 32
91
ลองสร้างปุ่มขึ้นมาแล้วเอาโค้ดไปวางดูนะครับ

โค๊ด: [Select]
Private Sub Command0_Click()
Dim RecCount As Integer
Dim i, x As Long
Dim rst As dao.Recordset
RecCount = DCount("*", "TempToPrint")

Set rst = CurrentDb.OpenRecordset("TempToPrintWithStickerNo", dbOpenDynaset)
rst.MoveFirst

Do Until rst.EOF Or rst.BOF
For i = 0 To (RecCount - 1)

If i = 0 Then
x = 1
End If

rst.Edit
rst!stickerNo = x
rst.Update

rst.MoveNext
x = x + 1
If x > 52 Then
x = 1
End If

Next i
Loop
End Sub

แล้วดูการรันลำดับที่ตาราง TempToPrintWithStickerNo
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

92
ผมลองสร้าง รายงานโดย
ที่ตัวรายงานก็ออกแบบโดยใส่ Textbox ไว้ 56 อัน โดยสามารถตั้งชื่อไว้เช่น

L1C1   L1C2    L1C3    L1C4
L2C1   L2C2    L2C3    L2C4
L3C1   L3C2    L3C3    L3C4
...............................L14C4


และในEvent Report_Load ผมใส่โค้ดเข้าไป
โค๊ด: [Select]
Private Sub Report_Load()
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT [56].l_details, [56].LandC, [56].Print FROM 56 WHERE ((([56].Print)=True));", dbOpenDynaset)
   
    rst.MoveFirst
    Do Until rst.EOF
    If Not IsNull(rst!LandC) Then
    Me(rst!LandC) = rst!l_details
    End If
        rst.MoveNext
    Loop
   
End Sub
โดยเรากำหนด Recordsource ให้เอาเฉพาะ ข้อมูลที่ Print = true หรือถูกติ๊กเลือกอยู่มาเท่านั้น
และใช้ If กำหนด ว่าถ้า LandC นั้นมีอยู่
ก็ให้ textbox  Me(rst!LandC) ที่มีชื่อเหมือนกับ LandC ของตารางนั้นนำค่า l_details ลงไปแสดงที่ textbox นั้น

ไม่แน่ใจว่าท่านต้องการแบบนี้ไหมลองดูตัวอย่างนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa, Shutchan Gumpanavarawan

93
จากที่ดู LINE X และ COLUMN X เป็นตัวระบุ ตำแหน่งแนวตั้งและแนวนอนของ RecordSorce นั้น

วิธีการที่ให้แสดงเฉพาะ l_details ที่ Print = Yes นั้นสามารถทำได้ครับ ส่วนที่ Print = No ก็ให้ข้ามการแสดงไป
ใช้การ Loop Check ค่าและสั่งให้ไปแสดงในtextbox ที่เราตั้งชื่อเรียงไว้ ตั้งแต่ 1 - 56 ครับ
และที่ตัวรายงานก็ออกแบบจำนวนช่องไว้ทั้ง 56 ช่อง โดยสามารถตั้งชื่อไว้เช่น

L1C1   L1C2    L1C3    L1C4
L2C1   L2C2    L2C3    L2C4
L3C1   L3C2    L3C3    L3C4
...............................L14C4

ถ้ามีถ้าท่านส่งการออกแบบรายงานที่ทำเป็นช่องไว้ 56 ช่อง มาด้วยเดี่ยวผมเพิ่มโค้ดให้ครับ
ผมพอจะทำได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

94
คือ ทำฟอร์มขึ้นมา 1 ฟอร์มแล้วบันทึกไว้ในตาราง A
จากนั้นสร้างฟอร์มที่ 2 ขึ้นมาแล้วอยากดึงข้อมูล ID(บันทึกเลขออโต้) ของตาราง A ที่เพิ่งบันทึกไปจากฟอร์มที่แล้วขึ้นมา
ต้องเขียนยังไงคะ  :cry:

ปล.ดึงข้อมูลจากฟอร์มเก่าไม่ได้นะคะ

ใช้ Dmax() กรณีที่ ID คือตัวเลขก็จะได้ ID ที่มีตัวเลขมากที่สุด ลักษณะการใช้งานเช่น
Dmax("ID","[TableA]")

หรือถ้า ID ใน TableA ไม่ใช้ก็เลข ก็ใช้ Dlast เพื่อดึง ID ที่จัดเก็บไว้ล่าสุดมา ลักษณะการใช้งาน
DLast("ID","[TableA]")
โพสต์นี้ได้รับคำขอบคุณจาก: ิboonyarit, gitazasung

95
โค้ดที่ใช้ตอนแรกเอามาจากที่สอนในยูทูป 2 ท่านค่ะ

โค้ดหลายตัวแล้วที่ใช้แล้วไม่ได้ (ทั้งโค้ดบาท,แปลงอักษร,โค้ดปุ่มพิมพ์ ฯลฯ) ต้องได้จากหลายท่านในนี้ เป็นเพราะอะไรคะ ที่เค้าใช้ได้ แต่เราใช้ไม่ได้  ขึ้นอยู่กับเวอร์ชั่น Access หรือว่าอะไรคะ

แล้วพอเมื่อไม่ได้ ก็ไปต่อไม่เป็นค่ะ ถ้าอยากเป็น ต้องเริ่มจากอะไรคะ (ถ้าโค้ดนั้นใช้ไม่ได้ ควรใช้โค้ดไหนยังไง ต้องเรียนรู้จากอะไรคะ )

โค้ดพวกนี้สิ่งที่เราต้องรู้ก่อนก็คือชนิดของข้อมูลครับ เช่น ต้องดูว่า SaleNo นั้นชนิดข้อมูลเป็นอะไร

1.ถ้าเป็นตัวเลข หรือตัวแปรที่เป็นตัวเลข
ถ้าเป็นตัวเลขท่านจะใช้แบบที่ทำอยู่ได้เลย
1.ใส่โค้ดที่ macro Builder คือ
="[rpt_Sale_H2]![SaleNo]=" & [Forms]![fmSale_H]![SaleNo]
หรือ
="[rpt_Sale_H2]![SaleNo]=" & [Forms]![fmSale_H]![SaleNo] & ""

2. ใส่โค้ดที่ code Builder  คือ
if Not isnull(me.SaleNo) Then
DoCmd.OpenReport"rpt_Sale_H2",acViewPreview,,"[SaleNo]=" & me.SaleNo
End if
หรือ
DoCmd.OpenReport"rpt_Sale_H2",acViewPreview,,"[SaleNo]= " & me.SaleNo & ""

2.ถ้าเป็นข้อความ(text)
ปัญหาของข้อความคือต้องมีเครื่องหมาย ' หรือ single quote เพื่อบอกให้โปรแกรมทราบว่าเราอ้างอิง คอนโทรลที่เป็นข้อความ ในกรณี SaleNo ของคุณเก็บข้อมูล 0001 นั้นเป็นข้อความ โค้ดที่ใช้เลยต้องมี single quote ปิดหัวท้ายด้วยเช่น
1.ใส่โค้ดที่ macro Builder คือ
="[rpt_Sale_H2]![SaleNo]= '" & [Forms]![fmSale_H]![SaleNo] & "'"
2. ใส่โค้ดที่ code Builder  คือ
if Not isnull(me.SaleNo) Then
DoCmd.OpenReport"rpt_Sale_H2",acViewPreview,,"[SaleNo]='" & me.SaleNo & "'"
End if
หรือ
DoCmd.OpenReport"rpt_Sale_H2",acViewPreview,,"[SaleNo]='" & [Forms]![fmSale_H]![SaleNo] & "'"
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

96
ทำบิลภาษีเสร็จเรียบร้อยแล้วค่ะ

ถ้าต้องการพิมพ์ใบเสร็จหรือใบแจ้งหนี้ โดยอยากได้แบบ เลือกชื่อร้าน แล้วขึ้น เลขใบกำกับภาษี ไม่เอารายการค่ะ เช่น

เลือก ลูกค้า A เดือนที่แล้ว ออกบิลไปกี่ใบ ก็ขึ้นมาให้พิมพ์ใน 1 หน้ากระดาษ ว่า ลูกค้า A มีบิล เลขที่ xxxxx วันที่ xxxxxxx ยอดเงินรวม xxxxxx

ถ้าอยากได้แบบนี้ คือทำคิวรี่ใช่มั๊ยคะ แล้วต้องจับมาทำยังไง ทำแล้วได้เป็น เลขที่บิล 0001 ขึ้นมา 5 (เพราะบิล 0001 มี 5 รายการ)
ออกแบบฟอร์มไว้เลือกชื่อร้าน และใบกำกับภาษี ส่วนการนำไปออกรายงานเดี่ยวทำให้
ให้แนบไฟล์ตัวอย่างไว้นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

97
ขอบพระคุณอย่างสุดซึ้งค่ะ ได้ผลแล้วค่ะ ขอบคุณอย่างยิ่งค่ะ

รบกวนถามเพิ่มค่ะ

เราสามารถทำแบบใส่โค้ดที่ macro หรือ code Builder เลือกอย่างใดก็ได้ใช่มั๊ยคะ

ใช้ Code builder ได้คับ
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

98

ให้ใช้โค้ดคิวรี่ใหม่เป็นแบบนี้

โค๊ด: [Select]
SELECT DSum("[รวมเงิน]","[7prapa sum]","[ADDRMU] =" & [ADDRMU] & "") AS จำนวนเงินรวมในแต่ละหมู่, [7prapa sum].ADDRMU AS หมู่ที่, Count([7prapa sum].Addrmu) AS จำนวนสมาชิกในแต่ละหมู่
FROM [7prapa sum]
GROUP BY [7prapa sum].ADDRMU;

แล้วเอาคิวรี่นี้ไปสร้างรายงานนะครับ

วิธีการคือในหน้าออกแบบคิวรี่กด คลิกดูมุมมอง SQL แล้ว Copy Code ด้านบนไปวางแล้ว Run ดูนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: chonsod1221

99
ถ้า textbox รหัสบิลเป็น 0002 คือตัวอักษรครับโค้ดจึงควรจะเป็น
โค๊ด: [Select]
DoCmd.OpenReport "rpt_Sale_H2",acViewPreview,,"[SaleNo]= '" & me.SaleNo & "'"
หรือใช้แบบนี้
DoCmd.OpenReport "rpt_Sale_H2", acViewPreview, , "[SaleNo] ='" & Forms![ชื่อฟอร์ม]!SaleNo & "'"
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

100
DSum("Nz([s_vol]*[s_price])","fsale","[goods_id]"='" & [qry_จำนวนออก].[goods_id] & "'")
ขออนุญาตขอความรู้ส่วนนี้ว่า ทำไมเราต้องค่อมด้วย  '" &...............& "'    ครับ
ขอบพระคุณอย่างยื่งครับ

goods_id ที่อ้างอิงน่าจะ datatype เป็น text ครับ ไม่ใช้ตัวเลข
ถ้าเป็นตัวเลข เขาอาจจะใช้
DSum("Nz([s_vol]*[s_price])","fsale","[goods_id] =" & [qry_จำนวนออก].[goods_id] & "")

หรือถ้า goods_id เป็นตัวแปรก็ใช้
DSum("Nz([s_vol]*[s_price])","fsale","[goods_id] =" & strgoods_id)
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

102
ส่งตัวอย่างที่ทำไว้ มาให้หน่อยได้ไหมครับ
เดี่ยว เขียนเป็นโค้ดให้ครับ
ผมต้องการดูขั้นตอนการ ทำงานเพื่อแสดงผล

ช่วงนี้ไม่ค่อยได้ตอบด้วย ภาระงานเพิ่มขึ้นครับที่โรงพยาบาลมีผู้ป่วยโควิดเพิ่มมากขึ้นด้วย
งานที่ต้องประสานเลยเยอะขึ้นครับเลยไม่ค่อยได้มาตอบ แต่มีหลายๆท่านช่วยตอบอยู่ครับ

หมายเหตุ แต่ช่วงนี้ไม่ค่อยเห็นอาจารย์สันติสุขเลย คิดถึงเลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

103
ผมไม่แน่ใจเหมือนกันครับ ถ้าตารางใหม่ addnew ได้ปกติ
ข้อสันนิษฐาน
   1.การกำหนดประเภทของข้อมูลว่าเหมือนกันหรือไม่(ดูจากตารางใหม่ที่เพิ่งสร้างและเพิ่มได้)
      เพราะบางครั้งเกิดปัญหาการแปลงชนิดข้อมูลไม่ถูกต้องทำให้ไม่สามารถเพิ่มใหม่ได้
   2.ข้อมูลมี primary key แล้วหรือไม่
   3.เช็คการกำหนดค่าซ้ำ(ดูจากตัวที่เพิ่มได้ก็ได้ครัข)

รอน้าๆ ผู้ที่ใช้งาน SQL SERVER โดยตรงมาแชร์ประสบการณ์ตรงส่วนนี้
  :yuush:
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

104
สอบถามเพิ่มเติม
1.ให้เรียงลำดับ โดยไม่ได้จัดกลุ่มตาม invoice_id ใช่หรือเปล่า ?
2.สมมุติมี invoice_number 000001 , 000002 , 000003
   2.1ถ้าเราลบ 000003 เวลาเราจะเพิ่มใหม่ก็ให้แสดง 000003 กลับมาอีกครั้ง ใช่แบบนี้หรือไม่
   2.2ถ้าเราลบ 000002 ปกติมันจะรันเลขต่อไปคือ 000004 เพราะรันต่อจาก 000003 แบบนี้ไหม
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

105
โค๊ด Addnew
โค๊ด: [Select]
AddnewSQL = "INSERT INTO dbo_TestTP ( CardID, TPNo, TPIssueDate, TPExpireDate ) " _
& "SELECT dbo_TempImportTP.CardID, dbo_TempImportTP.TPNo, dbo_TempImportTP.TPIssueDate, dbo_TempImportTP.TPExpireDate " _
& "FROM dbo_TempImportTP WHERE (((dbo_TempImportTP.CardID) Not In (select CardID from [dbo_TestTP])));"

โค๊ด Update
โค๊ด: [Select]
UpdateSQL = "UPDATE dbo_TestTP INNER JOIN dbo_TempImportTP ON dbo_TestTP.CardID = " _
& "dbo_TempImportTP.CardID SET dbo_TestTP.TPNo = [dbo_TempImportTP].[TPNo], dbo_TestTP.TPIssueDate = " _
& "[dbo_TempImportTP].[TPIssueDate], dbo_TestTP.TPExpireDate = [dbo_TempImportTP].[TPExpireDate] " _
& "WHERE (((dbo_TestTP.TPNo)<>[dbo_TempImportTP].[TPNo]) AND ((dbo_TestTP.CardID)=[dbo_TempImportTP].[CardID])) " _
& "OR (((dbo_TestTP.TPIssueDate)<>[dbo_TempImportTP].[TPIssueDate])) OR (((dbo_TestTP.TPExpireDate)<>[dbo_TempImportTP].[TPExpireDate]));"

ปรับเป็นแบบนี้นะครับ เราจะไม่ใช้ And เราจะใช้ OR นะครับ
เช็คฟิลล์ TP7No เพื่อความถูกต้องนะครับว่าที่ถูกต้องคือ TP7No  หรือ TPNo
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

106
อ้างถึง
ชื่อนี้ค่ะ dbo_TempImport
เป็น Database ที่ลิงค์มาจาก SQL Server
หรือจะติดตรงนี้ค่ะ acSpreadsheetTypeExcel8 ต้องไปสร้างหรือกำหนด SpreadsheetType ที่ไหนคะ

ตาราง temp สร้างไว้ที่ front end ได้เลย ไว้วางข้อมูลชั่วคราวเท่านั้น
ไม่ต้องลิ้งมา

โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

107
Deletesql = "DELETE * FROM TempImport;"
ตารางชั่วคราวชื่ออะไรครับ
ตรงสีแดงใส่ชื่อตารางชั่วคราว
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

108
ตรง Tool >> Reference
เพิ่มตัว MS OFFICE XX Object libary ด้วยครับ ตามภาพ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

หน้า: 1 ... 3 4 5 [6] 7 8 9 ... 32