แสดงกระทู้

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

หน้า: [1]
1
ลองดูครับ เขียนแบบลูกทุ่งและรวบรัดครับ

ที่ Sheet นั้นๆ
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$A$1" Then ' $A$1 ตำแหน่งที่ต้องการดัก
       If Len(Target) > 4 Then   'มากกว่า 4 ตัวอักษร
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       "ระบุได้แค่ 4 ตัวอักษร", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
           Exit Sub
       End If
       
       If Not isNumEN(Target.Value) Then
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       " ระบุได้แค่ ตัวเลข และตัวภาษาอังกฤษ(พิมพ์เล็กหรือพิมพ์ใหญ่ก็ได้)", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
       End If
   End If
End Sub


ที่ Module หรือในชิตนั้นๆ ถ้าใช้แค่ชีตเดียว
Function isNumEN(xTarget As String) As Boolean
   Dim i As Long
   Dim j As Long
   Dim x As String
   Dim isOk As Boolean
   
   isOk = True
   j = Len(xTarget)
   For i = 1 To j
        x = Mid(xTarget, i, 1)
        If (Asc(x) >= 48 And Asc(x) <= 57) Or _
           (Asc(x) >= 65 And Asc(x) <= 90) Or _
           (Asc(x) >= 97 And Asc(x) <= 122) Then
           '  48=0  57=9
           '  65=A  90=Z
           '  97=a  122=z
        Else
            isOk = False
            Exit For  'เจอไม่ใช่ ให้ออกมาเลย
        End If
   Next i
   isNumEN = isOk
End Function

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

2
ไม่รู้แบบนี้ไหมนะครับ ผมสมมุติ table1 คือชื่อตารางนะ

โค๊ด: [Select]
SELECT Table1.EBELN, Table1.EBELP, Table1.BELNR
FROM Table1
WHERE ((Not (Table1.VGABE)=2 And Not (Table1.VGABE)=[EBELP]) AND ((Table1.BWART)="101"));
โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz

3
1. ลองดูว่าไฟล์ฐานข้อมูลของ Access มีขนาดใกล้ 2 GB ซึ่งเป็นขนาดสูงสุดที่ Access ให้ใช้ได้หรือเปล่า ถ้าใกล้หรือเต็มแล้ว ก็ต้องทำ Compact and Repair Database ของตัว Access เพื่อกระชับฐานข้อมูลให้เล็กลงก่อนครับ เพราะการลบเรคอร์ด,เทเบิล หรืออะไรต่างๆในไฟล์ Access จะไม่ได้ทำให้ขนาดของไฟล์ลดลงไปในทันทีครับ

2. อยากให้ปรับ SQL จากการอ้างหลายๆเทเบิลใน FROM cluase โดยไม่มีการ JOIN กันเลย แต่ไปใช้เงื่อนไขใน WHERE clause เป็นตัวจับคู่เรคอร์ดระหว่างเทเบิล S,B,W,T แทน ซึ่งผลของ FROM cluse แบบนี้ เป็นไปได้ว่า Oracle จะหาผลทุกเรคอร์ดจากทุกเทเบิลจับคู่กันหมดก่อน แล้วค่อยเอาผมมากรองโดย WHERE cluase เป็นลำดับถัดไป (ลำดับการทำงานของ Oracle-SQL https://oracle.readthedocs.io/en/latest/sql/basics/query-processing-order.html) ถ้าแต่ละเทเบิลมีแค่ 100 เรคอร์ด เราจะได้ 100x100x100x100 = 100 ล้านเรคอร์ดออกมาก่อน ถึงจะค่อยถูกกรองโดย WHERE cluase อีกที ดังนั้นอยากให้ใส่ JOIN ใน FROM cluase เพื่อเชื่อมเรคอร์ดที่สัมพันธ์กันของแต่ละเทเบิลให้เสร็จก่อนจะมีประสิทธิภาพกว่าครับ ... ***แต่***ก็ไม่แน่ครับ ถ้าตัว Query Processing ของ Oracle ฉลาด มันก็จะไปเอาเงื่อนไขใน WHERE cluase ผนวกเข้าไปคิดพร้อมขั้นตอน FROM cluase เลยก็ได้
โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz

4
ต้องใช้การเขียนโค้ดเพื่ออ่านเรคอร์ดจากคำสั่ง SQL แล้วนำค่าของฟิลด์ที่ต้องการ ไปต่อๆกันให้ครบทุกเรคอร์ด เก็บลงตัวแปร แล้วจะเอาตัวแปรไปแสดงบนหน้าฟอร์ม หรือไปเขียนลงเท็กซ์ไฟล์ก็แล้วแต่ต้องการ

ตย.โค้ด

Dim RS As DAO.Recordset ' ชุดของเรคอร์ดที่อ่านได้
Dim SQL As String
Dim S As String  ' เก็บผลลัพธ์

' สร้าง SQL
SQL = "select ชื่อฟิลด์ as F from ชื่อเทเบิลหรือคิวรี่ where เงื่อนไข order by ฟิลด์ที่ใช้เรียงลำดับข้อมูล"

' เปิดชุดเรคอร์ดที่ได้จาก SQL
Set RS = CurrentDB.OpenRecordset(SQL)

' ทำจนกว่าจะอ่านเรคอร์ดไม่ได้แล้ว
Do Until RS.EOF

     If S = "" Then
          S = RS!F
     Else
          S = S & "," & RS!F  ' ต่อเท็กซ์ในตัวแปรด้วยเครื่องหมาย "," ถ้าก่อนหน้านี้ ตัวแปรมีค่าอยู่ก่อนแล้ว
     End If

     ' อ่านเรคอร์ดต่อไป
     RS.MoveNext

' วนลูปต่อไป
Loop

' ปิดชุดเรคอร์ด
RS.Close

' ต่อจากนี้ก็เอาตัวแปร S ไปใช้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz

หน้า: [1]