แสดงกระทู้

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 5 ... 46
19
ห้อง MS Access / : การใช้ Do While Loop
« เมื่อ: 27 ธ.ค. 64 , 15:33:55 »
ฟิลด์ Salary มาแสดงที่ฟิลด์ ID ทุกๆเรคคอร์ด

ผมไม่แน่ใจเกี่ยวกับการนำไปใช้งานในอนาคต
กรณีที่มี salary เหมือนกัน ข้อมูล ID ที่เก็บเข้าไปก็จะซ้ำกันนะครับ

วิธีทำง่ายๆใช้ gotoRecord มาช่วยได้ครับ

โค๊ด: [Select]
Dim rst As Recordset
Dim strFirstSalary As String
Set rst = Me.RecordsetClone
If rst.RecordCount = "0" Then
MsgBox "No record"
Else
rst.MoveFirst
strFirstSalary = rst!Salary
DoCmd.GoToRecord , , acFirst
Do Until rst.EOF
Me.ID = strFirstSalary
DoCmd.GoToRecord , , acNext
rst.MoveNext
Loop
End If

20
อ้างถึง
ขอบคุณมากเลยครับ แต่ผมอาจจะอธิบายไปชัดเจน ผมอยากให้ lock record วันที่ 3 ในเดือนถัดไปครับ จะใช้วิธีนี้ได้ไหมครับ?? แล้วมันจะใช้ได้ทุกเดือนไหมครับ??
เช็คเฉพาะวันที่ 3 ของทุกเดือนใช้แบบนี้
SELECT IIf(Day(Mydate)=3,1,0) AS CheckMonth, *  FROM Mytable;

ถ้าอยากให้ วันที่ 3 ของเดือนนี้สามารถเพิ่มหรือแก้ไขข้อมูลได้แต่ของเดือนอื่นๆ ที่ไม่ใช่เดือนนี้ห้ามแก้ไขใส่แบบนี้
SELECT IIf(Day(Mydate)=3 And Not Month(Mydate) = Month(Date()),1,0) AS CheckMonth, *  FROM Mytable;



21


โค๊ดจะประมาณนี้นะครับ
โค๊ด: [Select]
On Error Resume Next
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rstOut As DAO.Recordset
Dim strStudentNumber, StrStudentName As String

Set db = CurrentDb()
Set rst = db.OpenRecordset("sortNoEachClass", dbOpenDynaset)

If Not rst.BOF And Not rst.EOF Then
  rst.MoveFirst
  strStudentNumber = rst!roomNo
  'rst.MoveNext
   
  Do Until rst.EOF
    If strStudentNumber = rst!roomNo Then
      StrStudentName = Trim(StrStudentName & "  " & rst!FirstOffname)
    Else
    Set db = CurrentDb()
    Set rstOut = db.OpenRecordset("TblResult", dbOpenDynaset)
    rstOut.AddNew
    rstOut!StudentNum = strStudentNumber
    rstOut!StudentName = StrStudentName
    rstOut.Update
       
       strStudentNumber = rst!roomNo
       StrStudentName = rst!FirstOffname
     
        rstOut.Close
        db.Close
    End If
   
    rst.MoveNext
  Loop
    Set db = CurrentDb()
    Set rstOut = db.OpenRecordset("TblResult", dbOpenDynaset)
    rstOut.AddNew
    rstOut!StudentNum = strStudentNumber
    rstOut!StudentName = StrStudentName
    rstOut.Update
       
       strStudentNumber = rst!roomNo
       StrStudentName = rst!FirstOffname
     
    rstOut.Close
    db.Close
   MsgBox "ออกข้อมูลเรียบร้อย", vbInformation, "แจ้งเตือน"
End If
Set rst = Nothing
Set db = Nothing
Set rstOut = Nothing

22
ใช้ Loop ในการต่อประโยค โดยแสดงฟิลล์ชื่อ ตามเลขที่ๆมีอยู่ในห้องนั้น

คล้ายๆ กับโพสนี้นะครับ
https://www.thai-access.com/index.php?topic=1090.msg4873#msg4873

23
อ้างถึง
สิ่งที่หนูต้องการคือจะแยกเอาเฉพาะ ข้อความแรก มาใช้เท่านั้น
โดยหนูคิดวางแผนว่าจะดักจับเอาช่วงที่เขาเริ่มเว้นวรรคหรือช่วงที่เขาเริ่มใส่วงเล็บ ประมาณนี้ค่ะอาจารย์

ใช้การสร้างฟังชั่นในการแสดงผลในคิวรี่นะครับ
วิธีการ
1 สร้าง Module ใส่ Code
โค๊ด: [Select]
Public Function GetString(FieldTarget As String) As String
Dim CuttingString As String

If Not (InStr(FieldTarget, "(") = 0) Then
CuttingString = Left(FieldTarget, InStrRev(FieldTarget, "(") - 1)
ElseIf Not (InStr(FieldTarget, " ") = 0) Then
CuttingString = Left(FieldTarget, InStrRev(FieldTarget, " ") - 1)
ElseIf Not (InStr(FieldTarget, "") = 0) Then
CuttingString = FieldTarget
End If

GetString = Trim(CuttingString)
End Function

2.ที่คิวรี่ใส่แบบนี้
โค๊ด: [Select]
คำทักทาย: GetString([ทักทาย])

24
ที่ท่านต้องการคืออัพเดท ฟิลล์ [Type1] [Type2] ของตาราง Main ที่นำเข้ามาจาก Excel โดยอ้างอิงจาก รหัส ใช่ไหมครับ

SELECT TblMain.Code, TblMain.Name, DLookUp("TypeV1","tbltype","CodeV = '" & Code & "'") AS Type1, DLookUp("TypeV2","tbltype","CodeV = '" & Code & "'") AS Type2
FROM TblMain;

โค๊ดนี้ ไว้สำหรับดูข้อมูลก่อนอัพเดทนะครับ เอาไว้ตรวจเช็คหรือแสดงข้อมูลก่อนอัพเดท
โดยใช้ Dlookup มาแสดง โดยอ้างอิงจากรหัส

หรือจะใช้การสร้างการเชื่อมความสัมพันธ์ ฟิลล์ รหัส แล้วดึงข้อมูลมาแสดงก็ได้ครับ

25
ว่าจะไม่ยุ่งกับกระทู้นี้ เพราะเห็นคุณ PNR ตอบอยู่
แต่อดไม่ได้จริง เพราะรู้สึกว่ากำลังจะทำให้ได้ฐานข้อมูลที่สร้างปัญหาได้ในอนาคต

คำถามคือสาเหตุที่ต้องการฐานข้อมูลแบบในข้อความแรกคืออะไร
ทั้งนี้เพราะในระบบฐานข้อมูลนั้นควรจะเก็บข้อมูล Non Key แบบเชิงเดี่ยว

เพราะถ้ามีข้อมูลชุดเดียวกันอยู่ใน 2 ตาราง มันจะทำให้เกิดความสับสนเมื่อใช้งานไปนานๆ ได้

สำหรับการแก้ปัญหาของคุณนั้น ทำได้ง่ายมากคือ
1. ลบฟิลด์ "ชนิด" ในตารางหลักออกไป
2. ถ้าต้องการรู้ว่าคนไหนมีชนิดอะไร ให้สร้างคิวรี ที่เชื่อมข้อมูลรหัสของทั้ง 2 ตาราง แล้วดึงฟิลด์ รหัส,ชื่อ,ชนิด มาแสดงผล ก็จะได้อย่างที่คุณต้องการแล้วครับ

ทั้งนี้ยกเว้นคุณมีจุดประสงค์อื่น เช่นต้องการบันทึกการเปลี่ยนแปลงชนิด แบบนี้ก็ต้องสร้างตารางบันทึกการเปลี่ยนแปลงชนิด ซึ่งก็ต้องมีฟิลด์วัน-เวลา เพื่อเก็บข้อมูลด้วย
ผมได้รีโมทไปทำแบบนั้นให้เขาแล้วครับอาจารย์
โดยใช้คิวรี่ในการเชื่อมข้อมูลมาแสดงครับ
1.ตอนแรกไม่ค่อยเข้าใจโจทย์เมื่อได้เห็นการออกแบบก็ทำให้แล้วเป็น ถ้าแสดงข้อมูลธรรมดา
โค๊ด: [Select]
SELECT [TBLข้อมูลหลัก].[รหัส], [TBLข้อมูลหลัก].[ชื่อ], [TBLชนิด].[ชนิด]
FROM TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส];



26
งั้นของผมควรใช้วิธีแรกใช่ไหมครับ

แล้วแต่การใช้งานครับ ลองสร้าง คิวรี่ใหม่แล้วเอา SQL นี้ไปวางแล้วรันดูครับ

โค๊ด: [Select]
SELECT DLookUp("ชนิด","TBLชนิด","รหัส = '" & [รหัส] & "'") AS ชนิด, [TBLข้อมูลหลัก].*
FROM TBLข้อมูลหลัก;

27
จากตัวอย่างนั้น มี 2 ตาราง
การที่จะแสดงข้อมูลได้นั้นสามารถทำได้ 2 แบบ คือ
1. ใช้คิวรี่ในการแสดงผล (แบบนี้ใช้การ Dlookup ก็ได้ครับ) ถ้าอยากได้แบบใช้คิวรี่แสดงผล เดี่ยวทำให้ดู

2.คือให้อัพเดทข้อมูล ชนิด  ในตารางข้อมูลหลัก
โค๊ด sql ที่ให้ไปนั้นจะต้องสร้าง query ใหม่ขึ้นมาใช้งาน จะใช้สำหรับอัพเดทข้อมูลให้ตารางข้อมูลหลักก่อนการแสดงผลครับ

28
ใช้ Update Query ได้ครับ

เช่น
โค๊ด: [Select]
UPDATE TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส] SET [TBLข้อมูลหลัก].[ชนิด] = [TBLชนิด]![ชนิด];

29
เนื่องจาก ผมศึกษาแต่ access เพราะชื่อเว็บก็บอกอยู่ว่า Thai access
เลยไม่ถนัด Excel เท่าไร นานๆจะได้ศึกษาจากเพื่อนสมาชิกที่ถามซักครั้ง แต่จะพยายามดูให้นะครับ

จากโจทย์
อ้างถึง
สร้าง sheet
ต้นแบบไว้ แล้วค่อยเอาข้อมูลมาหยอด
จะได้หรือเปล่า และจะต้องแก้ code อย่างไรครับ


Dim xlapp As Object
Dim sPath, sFile As String
    sPath = "C:\"
    sFile = sPath & "MyExcelFile.xls"
Set xlapp = CreateObject("excel.application")
With xlapp
.Visible = True
.workbooks.Open (sFile)
.sheets("MysheetName").select 'กำหนดให้เลือก Sheet ที่เราสร้างไว้
.ActiveSheet.Range("A2") = "CCC" 'กำหนดค่าที่จะจัดวางข้อมูลตามใจชอบเลย

End With

ขั้นตอนการทำงาน
1.เปิดไฟล์ Excel ตาม Path ที่เรากำหนดไว้
2.เปิดไฟล์มาแล้วไปยัง Sheet ที่เราสร้างไว้
3.นำข้อมูลมาวางใน sheet ตามต้องการ

ส่วนขั้นตอนการนำข้อมูลมาวางเนื่องจากไม่มีตัวอย่างข้อมูล
ท่านเลยต้องเขียนต่อจากนี้ตามความต้องการของท่านได้เลย


30
เป็นมือใหม่ค่ะ หาไม่เจอเลยค่ะ ตามที่สอน เป็นภาษาไทยด้วยค่ะ รบกวนชี้แนะ เพิ่มได้มั้ยคะ
ทำได้ 2 แบบด้วยกัน

1.ตรง textbox เลขที่บิลในรายงานในส่วนรายละเอียด
กดคลิ๊กขวาเลือก เรียงลำดับจากน้อยไปหามากครับ




2.วิธีกำหนด Record Source ของ Report เป็น Query แล้วสั่ง Sort แบบ Ascending ที่ฟิลด์ "เลขที่บิล" ที่อาจารย์บอกมาก็สามารถทำดังนี้




31
ขอบคุณค่ะอาจารย์
ก่อนหน้านี้หนูได้ทดลองใช้วิธีลักไก่หลอกโปรแกรมโดยสร้างฟิลด์ใหม่ [Notจังหวัด] ที่คิวรี่ขึ้นมาอีกหนึ่งฟิลด์ค่ะ
แล้วแยกใส่คำสั่งทั้งสองลงไป สามารถตอบโจทย์ที่ต้องการได้แล้วค่ะอาจารย์



สุดยอด สาย DIY อีกคนเปล่าครับนี้  :shout:

32
ถ้าเป็น [Forms]![frmค้นหา]![text1] or Not [Forms]![frmค้นหา]![text2]
จะสามารถทำได้ แต่ถ้ามี Like ด้วยผมไม่เคยทำครับ
โดยปกติจะสร้างเงื่อนไข โดยใช้ IF check เช่น

IF ISnull(text1) and Not isnull(Text2) then
            กำหนด sql ของ Like "*" & [Forms]![frmค้นหา]![text1] & "*"

elseIF  ISnull(text2) and Not isnull(Text1) then
            กำหนด sql ของ Not [Forms]![frmค้นหา]![text2]
end if

33
ขออนุญาตเพิ่มเติมค่ะ
เบื้องต้นลองตั้งค่าตัวเลือกของ Access ดูก่่อนนะคะว่าได้ไหม ตามในรูปค่ะ


1.เปิด active x ก็พอครับ
2.ส่วนการเปิด macro ทั้งหมดนั้นตอนนี้ไม่แนะนำแล้วครับ เพราะมีอันตรายต่อโปรแกรมฐานข้อมูลได้ครับ
   ตรงส่วนของ Macro จะมีแจ้งเตือนให้กดเป็นแถบสีเหลืองสามารถกดยืนยันตรงนั้นได้เลย
   

34
สมมติว่าเรามีรายชื่อลูกค้ากระจายอยู่ในหลายจังหวัด ทีนี้หนูอยากจะให้ค้นหาโดยละเว้นเฉพาะจังหวัดที่เราระบุใน textbox บนหน้าฟอร์มแล้วสั่งไปที่คิวรี่ให้แสดงข้อมูลทุกจังหวัด ยกเว้นจังหวัดที่เราระบุค่ะ
เช่นระบุว่า กรุงเทพฯ ก็ให้ละเว้นเฉพาะกรุงเทพฯอย่างเดียว นอกนั้นแสดงจังหวัดอื่นขึ้นมาทั้งหมดเลยค่ะ

ในคิวรี่ ที่ฟิลล์ของจังหวัด เราสามารถใส่ Criteria
Not Forms![ชื่อฟอร์ม]![ชื่อtextboxบนฟอร์ม]
เท่านี้ ข้อมูลที่จะนำมาแสดง ก็จะไม่มีจังหวัดนั้นแล้วครับ

35
กำหนดให้เป็นเส้นประแบบไหนครับ

ปกติสามารถกำหนดแบบของเส้นได้โดยไปที่ Tab รูปแบบ >> เส้นกรอบรูปร่าง >> ชนิดเส้น ได้เลย

36
ตอนนี้ ข้อความอยู่ใน ส่วนท้ายของหน้า
ให้ลองเอาไปไว้       ส่วนท้ายของรายงาน    ดูนะครับว่าได้ไหม

ถ้ายังไม่ได้กำหนดให้แสดงส่วนท้ายก็กดคลิ๊กขวา แล้วเลือกส่วนหัวและท้ายรายงานด้วย


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