แสดงกระทู้

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

หน้า: [1] 2 3 4 ... 6
1
ใน Access ไม่มีความสามารถนี้ครับ
มีเฉพาะในฐานข้อมูลใหญ่ๆ อย่าง Oracle

ขออธิบายให้เข้าใจง่ายๆ ถึงการทำงานที่แตกต่างกันนะครับ
ใน Oracle นั้น เวลาที่เราสั่ง Delete Data นั้น จะเป็นการปิด Record ที่ลบเท่านั้น (ใส่ Time Stamp เอาไว้ด้วย) แต่ข้อมูลยังไม่ถูกลบ จึงสามารถสั่ง Rollback ได้ แต่ก็ต้องแลกมาด้วยการใช้พื้นที่ ที่เพิ่มขึ้นมาเรื่อยๆ
การสั่งลบข้อมูลจริงๆ ของ Oracle ต้องใช้คำสั่ง Pack เพื่อทำการลบข้อมูลออกจริงๆ

ส่วน Access เมื่อเราสั่ง Delete โปรแกรมจะทำการ Pack ให้ทันทีเลย ทำให้ไม่สามารถดึงข้อมูลกลับมาได้
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

2
สมมุติตาราง A ชื่อ Mytable
1.สร้างคิวรี่ใส่ SQL เข้าไป ตั้งชื่อ Q1
SELECT Idnumber, LV  FROM MyTable GROUP BY Idnumber, LV HAVING ((Not (LV) Is Null));

2.สร้างปุ่มขึ้นมา 1 ปุ่ม
ใส่โค้ดนี้เข้าไป
Private Sub Command0_Click()
Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("Mytable", dbOpenDynaset)
   
    rst.MoveFirst
    Do Until rst.EOF
    If IsNull(rst!LV) Or rst!LV = "" Then
    rst.Edit
    rst!LV = DLookup("LV", "Q1", "Idnumber =" & rst!Idnumber & "")
    rst.Update
    End If
       rst.MoveNext
    Loop
   
    rst.Close: Set rst = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

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


โค๊ด: [Select]
Option Compare Database

Private Sub SLBoss1_Click()
Call unOption
Me.SLBoss1 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30021.jpg"
End Sub
Private Sub SLBoss2_Click()
Call unOption
Me.SLBoss2 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30017.jpg"
End Sub
Private Sub SLBoss3_Click()
Call unOption
Me.SLBoss3 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30015.jpg"
End Sub
Private Sub SLBoss4_Click()
Call unOption
Me.SLBoss4 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30011.jpg"
End Sub
Private Sub SLBoss5_Click()
Call unOption
Me.SLBoss5 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30006.jpg"
End Sub

Sub unOption()
'ชุดคำสั่งเพี่อให้ตัวเลือกทั้งหมดถูกยกเลิก
Dim ctl As Control
    For Each ctl In Me.Controls
     Select Case ctl.ControlType
       Case acOptionGroup, acOptionButton
           ctl.Value = Null
       Case acCheckBox
          ctl.Value = False
    End Select
   Next
   Set ctl = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

4
จากการไล่ดูพบว่าในบางตารางท่านมีการใช้ชื่อฟิวล์เป็นภาษาไทยครับ เช่น คิวรี่ ManCustomer เชื่อมตาราง CodePAT ในนั้นมีฟิวล์ภาษาไทย
แต่ลองแก้ชื่อฟิวล์ภาษาไทยในทุกตารางแล้วก็ยังใช้ไม่ได้ จึงดึงข้อมูลทั้งหมดไปใส่ในไฟล์ใหม่ถึงจะใช้งานได้ครับ

สรุปที่ผมแก้คือ แก้ชื่อฟิวล์ภาษาไทยในทุกตารางเป็นภาษาอังกฤษ(a1,a2,a.../c1,c2,c...) --> สร้างไฟล์ใหม่แล้วดึงตาราง,คิวรี่,หน้าฟอร์มไปใส่ = combo box ทุกตัวขึ้นรายการตามที่พิมพ์
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

5
ในคิวรี่ คงต้องเขียนฟังชั่นนะครับ แล้วมาเรียกใช้ในคิวรี่แต่ผมไม่เคยลอง รออาจารย์ท่านอื่นๆ


แต่ถ้าการสร้างข้องมูลไปวางในตาราง อีกอันนั้นผมใช้แบบนี้ครับ
ตารางหลักชื่อ MyTable
มีฟิลล์ ID,ITEM (ตามตัวอย่าง)
--------------------------------------------------
มีตารางแสดงผลชื่อ TblResult
มีฟิลล์ ID,ITEM (ตามตัวอย่าง)
โค้ด

โค๊ด: [Select]
Private Sub concatenateString()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rstOut As DAO.Recordset
Dim strID As String
Dim strITEM As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("SELECT Mytable.ID, Mytable.ITEM FROM Mytable GROUP BY Mytable.ID, Mytable.ITEM ORDER BY Mytable.ID, Mytable.ITEM DESC;", dbOpenDynaset)

If Not rst.BOF And Not rst.EOF Then
  rst.MoveFirst
  strID = rst!ID
  strITEM = rst!Item
 
  rst.MoveNext
   
  Do Until rst.EOF
    If strID = rst!ID Then
      strITEM = strITEM & ", " & rst!Item
    Else
    Set db = CurrentDb()
    Set rstOut = db.OpenRecordset("tblResult", dbOpenDynaset)
    rstOut.AddNew
    rstOut!ID = strID
    rstOut!Item = strITEM
    rstOut.Update
       
      strID = rst!ID
      strITEM = rst!Item
        rstOut.Close
        db.Close
    End If
    rst.MoveNext
  Loop
    Set db = CurrentDb()
    Set rstOut = db.OpenRecordset("tblResult", dbOpenDynaset)
    rstOut.AddNew
    rstOut!ID = strID
    rstOut!Item = strITEM
    rstOut.Update
      strID = rstOut!ID
      strITEM = rstOut!Item
    rstOut.Close
    db.Close
End If
Set rst = Nothing
Set db = Nothing
Set rstOut = Nothing
End Sub
ที่ปุ่มใส่โค้ดเพื่อเรียกใช้งาน

โค๊ด: [Select]
Private Sub Command0_Click()
concatenateString
End Sub

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

6
ตัวอย่างแบบง่ายๆ ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

7
แนะนำว่าหาตัว Converter Com1 to USB มาใช้เถอะครับ ราคาไม่แพง ลง Driver ก็น่าจะใช้ได้แล้วครับ

https://smallbusiness.chron.com/update-driver-dell-usb-mouse-54449.html link

คำค้น "convert RS232 to usb"



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

8
ที่ Module

Option Compare Database
#If Win64 Then
    Private Declare PtrSafe Function PlaySound Lib "winmm.dll" _
        Alias "PlaySoundA" (ByVal lpszName As String, _
        ByVal hModule As LongPtr, ByVal dwFlags As Long) As Boolean
#Else
    Private Declare Function PlaySound Lib "winmm.dll" _
        Alias "PlaySoundA" (ByVal lpszName As String, _
        ByVal hModule As Long, ByVal dwFlags As Long) As Boolean
#End If
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000

Function SoundMe() As String
    Call PlaySound("c:\windows\media\policesiren.WAV", 0, SND_ASYNC Or SND_FILENAME)
    SoundMe = ""
End Function

Public Sub StopSound()
    PlaySound vbNullString, 0, 0
End Sub


ที่ command button
เพิ่ม
  SoundMe 'เมื่อเล่นเสียงแล้ว ต่อไปจะเด้ง msgbox ก็ดักเงื่อนไขการกด OK
  If MsgBox("ข้อมูลซ้ำกัน กรุณาตรวจสอบ", vbOKOnly, "program") = vbOK Then
    StopSound
  End If

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

9
ปัณหามีอยู่ว่า  1)เมื่อขึ้นRecordไหม่ ฟอร์มจะบันทึกอัตโนมัติทุกครั้ง เนื่องจากการตั้งTime Interval ถ้าตั้งTime Interval =0 จะไม่เป็นครับ แต่ความต้องการคือตั้ง Time Interval 1000 และไม่ต้องการให้ฟอร์มบันทึกอัตโนมัติ ยกเว้นมีข้อมูลครบแล้วทำการSave ฟอร์มจึงจะบันทึกครับ
2) ฟอร์มบันทึกข้อมูลล่าลุดเมื่อมีข้อมูลแสดงครบแล้วทำการบันทึกและกดไปหน้าถัดไปหรือกดNew Record แต่พอย้อนกลับมาดูข้อมูลหน้าก่อนหน้านั้นข้อมูลในส่วน Tab Detail จะไม่แสดงจนกว่าจะเลื่อนย้อนกลับไปอีกครั้งแล้วกดเดินหน้ากลับมา ข้อมูลใน Tab Detail จึงแสดงขึ้นมา ต้องการทราบว่าจะแก้ตรงส่วนไหนครับ
3) ต้องการสร้างปุ่มที่กดแล้วไม่สามารถกดซ้ำได้อีกครั้ง หรือกดแล้วให้ปุ่มนั้นหายไป ยกเว้นขึ้นบันทึกไหม่และทำตามเงื่อนไขครบและกดแล้วหายไปครับ
การเขียนCode อาจะดูไม่เรียบร้อยผมอ่านจากในเว็ปนี้แล้วนำมาลองทำและแก้ไปเรื่อยๆครับ
ขอขอบคุณล่วงหน้าครับ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

10
ลองดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

11
1.ตั้งค่า Format เป็น 000

2.ตัวอย่างวิธีทำปุ่มค้นหา Multiple Field search box บนหน้าฟอร์มครับ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

12
น่าจะแบบนี้ครับ
โค๊ด: [Select]
Sub FieldNames()
    Dim rst, rstOut, strTable  As Recordset
    Dim f As Field
    Dim SQL, RecordName As String
   
    Set rst = CurrentDb.OpenRecordset("tbTarang1")
    Set rstOut = CurrentDb.OpenRecordset("tbfild1")
        rst.MoveFirst
        Do Until rst.EOF
            RecordName = rst!fname
    Set strTable = CurrentDb.OpenRecordset(RecordName)
            For Each f In strTable.Fields
                rstOut.AddNew
                rstOut![tarang] = RecordName
                rstOut![fild] = f.Name
                rstOut.Update
            Next
        rst.MoveNext
        Loop
    rst.Close: Set rst = Nothing
    rstOut.Close: Set rstOut = Nothing
    strTable.Close: Set strTable = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

13
ให้ใช้ Image control สำหรับแสดงรูปภาพ โดยกำหนด Control Source ของ Image control ให้เป็น ="ไดร์ฟ:\พาธ\...\...\พาธ\" & [ชื่อเท็กซ์บ็อกซ์ของ Picturetest]
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

15
ผมพิมพ์คำว่า เอนก Access มันแก้ไขให้เอง เป็น อเนก
ปกติก็ไปแก้ที่การตั้งค่า แต่พอเป็น Access คั้งแต่ 2010 ขึ้นไป แก้ที่ตรงไหนครับ
ผมลองไปที่ ตั้งค่า > ฐานข้อมูลปัจจุบัน > ตัวเลือกการแก้ไขชื่อัตโนมัติ คลิกที่กล่องคำสั่งออก
แล้วปิดโปรแกรม เปิดใหม่ แต่มันไม่หายครับ ใครรู้ช่วยหน่อยครับ

อยู่ตรง ตั้งค่า > การพิสูจน์อักษร มันจะมีปุ่ม ตัวเลือกการแก้ไขอัตโนมัติ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

16
มีตาราง A และตาราง ฺB เหมือนกัน แต่ตาราง B ขาดรายการบิลที่ป้อนในเดือนมีนาคม 63(date_sale) ทั้งเดือน เราจะใช้ query แบบ append ได้ไหมครับ และ criteria จะระบุช่วงเดือนอย่างไร?

ใช้Append ได้ครับแต่เงื่อนไขก็คือ ที่ Field date_sale ของตาราง A
โดยใช้การระบุช่วงเดือนโดยใช้ Between

สมมุติชื่อฟอร์ม ชื่อ FormName
มี textbox 2 ตัวชื่อ DateStart และ DateEnd เพื่อใช้ในการระบุวันที่เริ่มต้น และวันที่สิ้นสุด

สร้างปุ่มขึ้นมา 1 ปุ่ม ใส่โค้ดนี้เข้าไป

Dim strSQL As String
strSQL = "INSERT INTO TableB SELECT TableA.* FROM TableA  WHERE TableA.date_sale Between [forms]![FormName]![DateStart] And [forms]![FormName]![DateEnd];"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

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