แสดงกระทู้

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 ... 7
1
..
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

2
น่าสนใจมากเลยค่ะอาจารย์
ขออนุญาตคุณ001jetnipitด้วยนะคะ

รบกวนอาจารย์ OddyWriter ขอไฟล์ตัวอย่างแบบ 32 bit ด้วยได้ไหมคะ
หนูจะเอาไปปลุกผีงานเก่าที่เคยถอดใจล้มเลิกไปแล้วค่ะ

แต่หนูลองเอาไฟล์ตัวอย่าง64bit ของอาจารย์ไปรันกับ 32bit มันก็ทำงานได้ปกตินะคะ
ไม่ทราบว่าจริงๆแล้วจะมีผลแตกต่างอื่นๆหรือเปล่าคะ

จริงดิ ผมส่งผิดไฟล์เหรอเนี่ย ดันส่ง 32 Bit ไปซะงั้น ถ้าจะ Run บน 64 Bit ให้แก้โค้ด Function เป็น PtrSafe Function ครับ



windows คุณเป็น 64 Bit ไม่ได้หมายความว่า Access คุณจะเป็น 64 bit หรือ 32 Bit นะครับ โปรดเข้าใจให้ถูกต้อง

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

3
เราสามารถใช้ & เพื่อใช้ Control ในการค้นหาตัวเดียวกันได้ครับ เช่น


Code : sql = "SELECT * FROM Q_PI WHERE [ID_Card] & [NameTH] like '*" & Nz(Me.TextSearch, "*") & "*' AND [Position] like '" & Nz(Me.CmdPosi, "*") & "' AND [Section] like '" & Nz(Me.CmdSec, "*") & "'"

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

4
คิดอยู่นานว่าจะตอบอย่างไรไม่ให้ทำร้ายจิตใจ

1. ควรออกแบบตารางใหม่ โดยแบ่งเป็นตารางดังนี้
1.1 ตารางเรือ (หมายเลขเรือ, ชื่อเรือ)
1.2 ตารางค่าใช้จ่าย (ID, หมายเลขเรือ, วันที่ใช้จ่าย, ประเภทค่าใช้จ่าย, จำนวนที่ใช้จ่าย)
1.3 ตารางการใช้น้ำมัน (ID สำหรับอ้างอิงกับข้อ 1.2 เฉพาะรายการน้ำมัน, ราคาต่อหนวย, จำนวนหน่วย)
1.4 ตารางประเภทค่าใช้จ่าย (ประเภทค่าใช้จ่าย, ตัวคูณที่ค่าเป็น +1/-1 เพื่อนำไปคำนวณกับข้อ 1.2 ในกรณีคิดเป็นกำไร/ขาดทุนในแต่ละเดือน)

2. นำตารางในข้อ 1.2 มาทำ Crosstab Query ก็จะได้ข้อมูลตามที่คุณต้องการครับ
3. ชื่อฟิลด์ทั้งหมด ควรเป็นภาษาอังกฤษ

ปล. Access เป็นฐานข้อมูล ไม่ใช่ Excel ดังนั้นถ้าเปิดตารางดูแล้วให้อารมณ์ Excel แสดงว่ามาผิดทาง
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

5
ห้อง MS Access / : export to excel
« เมื่อ: 30 มิ.ย. 64 , 10:39:25 »
ทำไงก็ไม่ได้ครับ ลองทำหมดแล้ว ท่าน อาจารใดมีวิธีขอคำชี้แนะด้วยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

6
ลองดูนะครับ


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

7
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

8
ผมแปะลิงค์ช่องยูทูปของอาจารย์ TTT ใว้ใน กล่องข่าวด้านบน กับ แหล่งความรู้ & ประชาสัมพันธ์ ด้านล่างกดตามเข้าไปดูกันได้เลยครับผม :yuush:

หรือกดลิงค์จากที่นี่เลยก็ได้ครับ ->> ช่องยูทูปเรียนรู้การพัฒนาซอฟแวร์ฐานข้อมูล MS Access ด้วยตัวเอง By อ.TTT(Access-Creator)
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

9
ห้อง MS Access / : Auto number ไม่ทำงานบน Form
« เมื่อ: 14 พ.ค. 64 , 22:34:04 »
กดเลื่อนไป New Record ยังครับ เครื่องหมาย |> ด้านล่างฟอร์ม
กดแล้วค่ะก็ยังเป็นเลขเดิม
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

10
สอบถามการอัพโหลดไฟล์ 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

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

11
ทำการย้ายชุดคำสั่ง"แนบไฟล์"ออกมาใว้ข้างนอกด้านล่างกล่องข้อความเพื่อให้ใช้งานได้ง่ายขึ้นแล้วนะครับ :prettiness:

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

12
ใน Access ไม่มีความสามารถนี้ครับ
มีเฉพาะในฐานข้อมูลใหญ่ๆ อย่าง Oracle

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

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

13
สมมุติตาราง 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

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


โค๊ด: [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

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

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

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


แต่ถ้าการสร้างข้องมูลไปวางในตาราง อีกอันนั้นผมใช้แบบนี้ครับ
ตารางหลักชื่อ 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

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