แสดงกระทู้

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] 2 3 4 ... 20
1

ลองไปทดสอบดูนะครับ ผมใช้การจับลำดับของ combobox โดยใช้ Active Control
สาย DIY อีกแล้วนะครับอิอิ โดยใช้ Call select_case ใน Event AfterUpdate() ทุกอันนะครับ
โดยผมจะกำหนด combobox เป็น Nboss_1 แทนของเดิมคือ 01 นะครับ
ข้อดีมีโค้ดชุดเดียวมีกี่ combobox ก็ได้ครับไม่จำกัด

เช่น
Private Sub Nboss_1_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_2_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_3_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_ลำดับ N_AfterUpdate()
Call select_case
End Sub

โค๊ด: [Select]
Sub select_case()
Dim strTextName,GetString,GetNum As String

strTextName = ActiveControl.Name
GetNum = Right(strTextName, Len(strTextName) - InStrRev(strTextName, "_"))
Me("ne_" & GetNum) = Me(strTextName).Column(4)
GetString = Me(strTextName).Column(4)

Select Case GetString
        Case "Undead": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Earth": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Fire": Me("WinNE_" & GetNum).Value = "Water"
        Case "Water": Me("WinNE_" & GetNum).Value = "Wind"
        Case "Wind": Me("WinNE_" & GetNum).Value = "Earth"
        Case "Poison": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Shadow": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Holy": Me("WinNE_" & GetNum).Value = "Shadow"
       Case Else: Me("WinNE_" & GetNum).Value = ""
    End Select
 
End Sub

2
ดูจากธาตุแล้ว นึกถึง ragnarok ขึ้นมาเลยครับ Hunter สายล่าบอส  :cool: :cool:
ลองคิดแปปครับ
แต่อาจจะต้องใส่ Nboss_01_AfterUpdate() ด้วยคำสั่ง Call กับ textbox Nboss_01 ถึง 30 นะครับ

3
ห้อง MS Access / : ผมลองใช้สูตร DSUM แต่ ERROR ครับ
« เมื่อ: เมื่อวานนี้ เวลา 09:46:34 »
งั้นแก้จากแบบเดิมที่มีการอ้างอิง mainform มาใส่แบบนี้ครับ

=DSum("[Qty]","[IncomingMove]","[PartID]='" & [txt_PartID] & "'")

สาเหตุที่ค่าผิดพลาดเพราะเมื่อเราเปิดเฉพาะ Subform
การอ้างอิงผิดพลาดตรงที่เราจะอ้างอิง MainForm ด้วย
ให้แก้ใหม่ครับ

4
สอบถามการอัพโหลดไฟล์ Excel ใน MS Access ค่ะ อยากจะ อัพโหลดไฟล์ ได้โดยให้มีการตรวจสอบจากเลขที่บัตรประชาชน โดยเช็คว่า ถ้ามีข้อมูลที่เคยอัพโหลดอยู่แล้ว ให้อัพโหลดเฉพาะข้อมูลที่มีการเปลี่ยนแปลง ข้อมูลไหนไม่มีก็อัพโหลดเข้าตามปรกติ รบกวนแนะนำด้วยนะคะ ขอบคุณค่ะ

ถ้าทำแบบง่ายก็คือ
1.ให้นำเข้าข้อมูลตามบัตรประชาชนทั้งหมดเข้ามาก่อนไปยังตารางสำรอง สมมุติชื่อว่า TempImport นะครับ
2.ใช้การสร้างคิวรี่ โดยกำหนดให้เลือกเอาเฉพาะ รหัสที่ไม่มีในตารางหลัก สมมุติชื่อว่า tblDataMain นะครับ
3.มี Field เก็บเลขบัตรประชาชนชื่อเดียวกันคือ PersonalID


ผมสมมุติมีปุ่มที่ใช้สำหรับนำเข้า 1 ปุ่ม และให้แก้ไขชื่อตารางทั้งสองตามสีแดงที่ผมใส่ไว้ให้ตรงด้วยนะครับ

Private Sub Command0_Click()
'ตัวอย่างโค้ดการนำเข้าข้อมูลโดยมี Dialog ให้เลือกไฟล์เข้ามา
Dim dlg As FileDialog
Dim sql, Deletesql As String
Dim DB As DAO.Database
Set DB = CurrentDb
If MsgBox("คุณต้องการนำเข้าข้อมูลใหม่หรือไม่", vbQuestion + vbYesNo, "ระบบสอบถาม") = vbYes Then

Set dlg = Application.FileDialog(msoFileDialogFilePicker)

With dlg
.Title = "Select the Excel file to import"
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Excel Files", "*.xls*", 1
.Filters.Add "All Files", "*.*", 2

If .Show = -1 Then
StrFileName = .SelectedItems(1)

Deletesql = "DELETE * FROM TempImport;" 'สั่งให้ลบข้อมูลของตารางสำรองให้หมดก่อนเพื่อรอรับข้อมูลนำเข้าใหม่ที่จะเข้ามา
DB.Execute Deletesql

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "TempImport", StrFileName, True 'นำเข้าไปยังตารางชื่อ TempImport
Else
Exit Sub
End If
End With

'หลังจากนำเข้ามาเสร็จให้ทำการ Append ข้อมูลที่ รหัสประจำตัวประชาชนไม่ซ้ำกัน ไปยังตารางหลักของเรา
sql = "INSERT INTO tblDataMain SELECT * FROM TempImport WHERE (((TempImport.PersonalID) Not In (select [PersonalID] from [tblDataMain])));"
DB.Execute sql
If DB.RecordsAffected <= 0 Then
   MsgBox "ไม่มีข้อมูลที่นำเข้า."
Else
MsgBox "นำเข้าจำนวน " & DB.RecordsAffected & " เรคคอร์ด", vbInformation, "Myprogram"
End If
Set DB = Nothing
End If
End Sub



5
ลองดูตัวอย่างนี้

6
ลองอ้างอิง แบบนี้ดูครับถ้าตัว textbox อยู่ในซัพฟอร์มให้อ้าง Mainform ไปหา Subform และไปยังตัว Control ครับ
และในกรณีที่ PartID เป็นtext ให้ใส่ เครื่องหมาย '  (single quote) ด้วยครับ
โค๊ด: [Select]
=DSum("[Qty]","[IncomingMove]","[PartID]='" & [Forms]![frm_IncomingSheet]![frm_IncomingList].[Form]![txt_PartID] & "'")

7
หนูมีคิวรี่อยู่1ตัวนะคะ สมมติมีอยู่2คอลั่มคือ Exp1 กับ Exp2 ค่ะ

Exp1 ผูกกับตารางข้อมูลเป็นtext เก็บขัอมูล yes กับ no
ส่วน Exp2 นั้นไม่ได้ผูกกับตารางใดๆ

ความต้องการของหนูในการแสดงคิวรี่ก็คือ
เมื่อข้อมูลในExp1 เป็น yes ให้แสดงข้อความใน Exp2 ว่า "สินค้าพร้อมส่ง"
แต่หากข้อมูลในExp1 เป็น no ก็ให้แสดงข้อความใน Exp2 ว่า "สินค้าหมดแล้ว"
ประมาณนี้ค่ะอาจารย์ ขอรบกวนด้วยนะคะ
หนูต้องการเอาคิวรี่นี้ไปสร้างเป็นรายงานต่อค่ะอาจารย์

ในคิวรี่ใส่ SQL แบบนี้ได้เลยกรณีที่เก็บข้อความ Yes กับ No โดยอยู่ในตารางชื่อ Table1
โค๊ด: [Select]
SELECT IIf([Exp1]="yes","สินค้าพร้อมส่ง") & IIf([Exp1]="NO","สินค้าหมดแล้ว") AS Exp2, *
FROM Table1;

กรณีที่เก็บข้อมูลโดยใช้ Checkbox เก็บ Yes No ในคิวรี่ใส่แบบนี้
โค๊ด: [Select]
SELECT IIf([Exp1]=True,"สินค้าพร้อมส่ง") & IIf([Exp1]=False,"สินค้าหมดแล้ว") AS Exp2, *
FROM Table1;

8
ห้อง MS Access / : หาค่า Min จาก Query Access
« เมื่อ: 19 พ.ค. 63 , 21:46:49 »
ได้ความรู้ใหม่ครับอาจารย์สันติสุข คือการกำหนดเงื่อนไข ในวงเล็บไว้ก่อน F0 แล้วค่อยแสดงผล
ขอบคุณครับ
 :love: :love: :miao:

ผมเพิ่ม NZ() Function เพื่อให้ ฟิลล์ ที่มีค่า 0 ทุกฟิลล์ แสดง 0 ครับจะได้สมบูรณ์ยิ่งขึ้น

select ID, F1, F2, F3 , nz(min(F0),0) as FMin
from
(              select ID, F1, F2, F3, iif(F1 = 0, NULL, F1) as F0 from T
  union all select ID, F1, F2, F3, iif(F2 = 0, NULL, F2) as F0 from T
  union all select ID, F1, F2, F3, iif(F3 = 0, NULL, F3) as F0 from T)
group by ID, F1, F2, F3
order by ID

9
อ้างถึง
แต่ในชุดข้อมูลของผม ไม่มีอายุ 1 -5 ปีครับ 
แต่พอกรองข้อมูลแล้ว มันก็ยังขึ้นข้อมูลอื่นที่ อายุ มากกว่า 1 - 5 ปี

ลองอธิบายการกรองข้อมูลมานิดนึงนะครับ ว่าผิดตรงไหน

ที่ Criteria ของ Query ลองใส่ไปว่า  Between 1 and 5 
เพื่อให้ได้ อายุระหว่าง 1 ถึง 5 ปี

อีกอย่างหนึ่งที่เกิดขึ้นได้กับการกรอง
คือ Field อายุที่คุณกรองอยู่นั้น Datatype เป็น text ทำให้การกรองผิดพลาดได้ครับ
วิธีแก้คือใช้ Cint() แปลงเป็นตัวเลขก่อนแล้วใช้ Criteria ของ Query


สมมุติ Field Age คือ fieldอายุ datatype ไม่ใช่ตัวเลข
ตารางใช้กรองชื่อ table1

sql ก็ประมาณนี้

SELECT * FROM Table1 WHERE (((CInt([Age])) Between 1 And 5));

ข้อมูลในตาราง table1 จะแสดงทุกฟิลล์ และจะกรองฟิลล์อายุ ช่วง 1-5  หรือช่วงอายุที่เราต้องการให้เราครับ

10
ห้อง MS Access / : เปิด Query ไม่ได้
« เมื่อ: 18 พ.ค. 63 , 10:48:53 »
เจอปัญหาเปิด Query ไม่ได้ค่ะ ขึ้นแจ้งเตือนตามภาพค่ะ



1.เช็ค Network Drive ว่ายังเชื่อมต่ออยู่หรือไม่

2.compact and repair ใหม่ซักรอบ

3.เช็คว่าตำแหน่งของ File StockCard นั้นอยู่ในตำแหน่งนั้นจริงหรือไม่(เช็คที่ การจัดการการเชื่อมโยง)



11
สอบถามครับ โดยแยกเป็นคำถามดังนี้ครับ หลังการ เพิ่ม record ใหม่แบบ(Append) หลังจากนำเข้าข้อมูลเรียบร้อยแล้ว อยากให้มีข้อความแจ้งจำนวนที่นำเข้าไปครับ และ คำถามที่ 2 เป็นการ update เช่นกันครับ อยากให้แจ้งจำนวน record ที่ได้มีการ update เข้าไป  เช่น  นำเข้าทั้งหมด xxx Record เรียบร้อยแล้ว ,  ปรับปรุงข้อมูลจำนวน xxx Record เรียบร้อยแล้ว  ประมาณนี้ครับ   ขอบคุณครับ

ลองดูตัวอย่างจากกระทู้นี้ครับ

https://www.thai-access.com/index.php?topic=1231.msg5428#msg5428

12
รบกวนสอบถามอาจารย์ครับ ผมต้องการทำ ปุ่ม เพื่อจะลบ table ชื่อ table1 ออกจากฐานข้อมูล อยากให้โปรแกรมตรวจสอบก่อนว่ามีตาราง table1 อยู่หรือไม่ ถ้าไม่มี ให้ข้ามไปทำขั้นตอนต่อไป ถ้ามีให้ลบก่อน แล้ว ทำตามขั้นอื่นตอนต่อไป ขอบคุณครับ
ลองทดสอบดูนะครับ

Private Sub Command0_Click()
 call CheckTableToDelete
End Sub

Sub CheckTableToDelete
 Dim tbd As TableDef
  Dim msg As String
  For Each tbd In CurrentDb().TableDefs
    If tbd.Name = "table1" Then
     msg = MsgBox("ตรวจพบตาราง Table1" & vbCrLf & "คุณต้องการลบตาราง ? ", vbQuestion + vbYesNo, "ระบบสอบถาม")
     If msg = vbYes Then
        DoCmd.DeleteObject acTable, "table1"
     End If
End If
  Next tbd
End Sub

13
ขอบคุณครับอาจารย์ เดี๋ยวจะลองแบบนี้ดูครับ
จากโพสบนได้ปรับปรุงโค้ดนิดหน่อยนะครับ กรณีที่ครบ 15 ทุกหน้าก็ให้ทำงานตามปกติ ไม่ต้อง Addrow

14
อยากทราบแนวทางในการแก้ด้วยคนค่ะ  :prettiness:

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

https://www.thai-access.com/index.php?topic=1230.msg5454#msg5454

if me.TextAmt> me.Text_remain then
msgbox "คงเหลือไม่พอให้เบิก"
me.TextAmt = null   'เราทำให้มัน = null เพื่อจะได้ระบุใหม่ครับโดยความจริงถ้ายอดเบิกมันยังว่าง ยอดคงเหลือก็จะยังเท่าเดิม
else
'เงือนไขถ้าผ่านการตรวจสอบ
end if

15
ผม DIY เอานะครับ
ผมสมมุติตารางหลักชื่อ table1
          ตารางที่ออกรายงานชื่อ Table1Report โดยใช้การ Maketable โดยได้เพิ่ม Field Addrow มาด้วย
โดยใช้
totalRec = DCount("*", "table1") 'นับจำนวนแถวทั้งหมดของตาราง table1
totalRec = 15 - ([totalRec] Mod 15)  'เพื่อให้ได้ จำนวนแถวที่ขาดหายไป

แล้วใช้โค้ด Addnew เพื่อเพิ่มแถวที่ขาดหายไปยังตาราง Table1Report
เท่านั้นก็จะได้แถวครบ 15 แถวในหน้าสุดท้ายแล้วครับ โดยโค้ดสามารถดูได้จากปุ่ม เปิดรายงานบนฟอร์มนะครับ
โค๊ด: [Select]
Private Sub Command0_Click()
Dim totalRec As Integer
Dim RS As DAO.Recordset
Dim i As Integer
Dim sql As String
totalRec = DCount("*", "table1") 'นับจำนวนแถวทั้งหมดของตาราง table1
totalRec = 15 - ([totalRec] Mod 15)  'หาจำนวนแถวที่ขาดหายไปที่ไม่ครบ 15แถว
If Not totalRec = "15" Then
sql = "SELECT ' ' AS AddRow, Table1.* INTO Table1Report FROM Table1;" 'สั่งให้มีการสร้างตารางซัฟ ขึ้นมาเพื่อใช้แสดงรายงาน
        DoCmd.SetWarnings False
        DoCmd.RunSQL sql
        DoCmd.SetWarnings True

For i = 1 To totalRec
    Set RS = CurrentDb.OpenRecordset("table1Report", dbOpenDynaset) 'add แถวที่เหลือไปยังตาราง สำรอง
            RS.AddNew
            RS![Addrow] = " " & i
            RS.Update
  Next
    RS.Close
    Set RS = Nothing
   
    Else 'ถ้าเช็คแล้ว ไม่เกิน 15 คือครบทุกหน้าก็ให้ทำงานที่คำสั่ง ล่าง Else ครับ
    sql = "SELECT ' ' AS AddRow, Table1.* INTO Table1Report FROM Table1;" 'สั่งให้มีการสร้างตารางซัฟ ขึ้นมาเพื่อใช้แสดงรายงาน

        DoCmd.SetWarnings False
        DoCmd.RunSQL sql
        DoCmd.SetWarnings True

    End If
   
    DoCmd.OpenReport "rptdemo", acViewPreview
End Sub


และในส่วนของ รายงานแก้เป็นแบบนี้นะครับ
โค๊ด: [Select]
Private Sub รายละเอียด_Print(Cancel As Integer, PrintCount As Integer)
 If PrintCount = 1 Then curTotal = Nz(curTotal, 0) + Nz(Me.Amount, 0)
 End Sub

16
หน้าตารายงานหน้าสุดท้าย แสดงแบบไหนครับ
ขอดูรูปหน่อย

หน้า: [1] 2 3 4 ... 20