เคยดาว์นโหลด DynamicQuery ไปลองดูแล้วครับ แล้วผมนำเอาไปปรับปรุงแต่ว่า..
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 318   5
URL.หัวข้อ / URL
เคยดาว์นโหลด DynamicQuery ไปลองดูแล้วครับ แล้วผมนำเอาไปปรับปรุงแต่ว่า..

เคยดาว์นโหลด DynamicQuery ไปลองดูแล้วครับ แล้วผมนำเอาไปปรับปรุงแต่ว่า มันมีปัญญาตรงที่เวลาเลือก คอนดิชั่นแล้วกด รันคิวรี่ แล้วจะเกิด error ขึ้นนะครับ รบกวนช่วยดูด้วยนะครับ 
 
Option Compare Database 
Option Explicit 
 
Private Sub cmdExit_Click() 
On Error GoTo Err_cmdExit_Click 
 
 
    DoCmd.Close 
 
Exit_cmdExit_Click: 
    Exit Sub 
 
Err_cmdExit_Click: 
    MsgBox Err.Description 
    Resume Exit_cmdExit_Click 
     
End Sub 
 
Private Sub cmdMakeQuery_Click() 
Dim dbs As Database, qdf As QueryDef 
Dim strSQL As String 
 
strSQL = "" 
 
' 1. Check if cmbModelName empty or not 
If Me.cmbModelName = "" Or IsNull(Me.cmbModelName) Then 
    ' Do nothing here 
Else 
    strSQL = strSQL & " qryChooseRawData.MODEL NAME = '" & Me.cmbModelName & "' " 
End If 
 
' 2. Combo box cmbChassis 
If Me.cmbChassis = "" Or IsNull(Me.cmbChassis) Then 
    ' Do nothing here 
Else 
    If strSQL = "" Then 
        strSQL = strSQL & " qryChooseRawData.Chassis = '" & Me.cmbChassis & "' " 
    Else 
        strSQL = strSQL & " And qryChooseRawData.Chassis = '" & Me.cmbChassis & "' " 
    End If 
End If 
 
' 3. Combo box cmbBoardType 
If Me.cmbBoardType = "" Or IsNull(Me.cmbBoardType) Then 
    ' Do nothing here 
Else 
    If strSQL = "" Then 
        strSQL = strSQL & " qryChooseRawData.Board Name = '" & Me.cmbBoardType & "' " 
    Else 
        strSQL = strSQL & " And qryChooseRawData.Board Name = '" & Me.cmbBoardType & "' " 
    End If 
End If 
 
' 4. Combo box cmbDefectCode 
If Me.cmbDefectCode = "" Or IsNull(Me.cmbDefectCode) Then 
    ' Do nothing here 
Else 
    If strSQL = "" Then 
        strSQL = strSQL & " qryChooseRawData.Defect Code = '" & Me.cmbDefectCode & "' " 
    Else 
        strSQL = strSQL & " And qryChooseRawData.Defect Code = '" & Me.cmbDefectCode & "' " 
    End If 
End If 
 
' 5. Combo box cmbRefPart 
If Me.cmbRefPart = "" Or IsNull(Me.cmbRefPart) Then 
    ' Do nothing here 
Else 
    If strSQL = "" Then 
        strSQL = strSQL & " qryChooseRawData.Part Ref = '" & Me.cmbRefPart & "' " 
    Else 
        strSQL = strSQL & " And qryChooseRawData.Part Ref = '" & Me.cmbRefPart & "' " 
    End If 
End If 
 
' 6. Combo box cmbCustomerName 
If Me.cmbCustomerName = "" Or IsNull(Me.cmbCustomerName) Then 
    ' Do nothing here 
Else 
    If strSQL = "" Then 
        strSQL = strSQL & " qryChooseRawData.Customer = '" & Me.cmbCustomerName & "' " 
    Else 
        strSQL = strSQL & " And qryChooseRawData.Customer = '" & Me.cmbCustomerName & "' " 
    End If 
End If 
 
' Check if txtStartDate empty or not 
If Me.txtStartDate = "" Or IsNull(Me.txtStartDate) Then 
    ' Do nothing here 
Else 
    If Me.txtEndDate = "" Or IsNull(Me.txtEndDate) Then 
        If strSQL = "" Then 
            strSQL = strSQL & "qryChooseRawData.COMPLETE DATE >= #" & Me.txtStartDate & "# " 
        Else 
            strSQL = strSQL & " And qryChooseRawData.COMPLETE DATE >= #" & Me.txtStartDate & "# " 
        End If 
    Else 
        If strSQL = "" Then 
            strSQL = strSQL & " qryChooseRawData.COMPLETE DATE Between #" & Me.txtStartDate & "# And #" & Me.txtEndDate & "# " 
        Else 
            strSQL = strSQL & " And qryChooseRawData.COMPLETE DATE Between #" & Me.txtStartDate & "# And #" & Me.txtEndDate & "# " 
        End If 
    End If 
End If 
 
If Me.txtStartDate = "" Or IsNull(Me.txtStartDate) Then 
    If Me.txtEndDate <> "" Or Not IsNull(Me.txtEndDate) Then 
        If strSQL = "" Then 
            strSQL = strSQL & " qryChooseRawData.COMPLETE DATE <= #" & Me.txtEndDate & "# " 
        Else 
            strSQL = strSQL & " And qryChooseRawData.COMPLETE DATE <= #" & Me.txtEndDate & "# " 
        End If 
    Else 
        ' Do nothing 
    End If 
End If 
 
If strSQL = "" Then 
strSQL = "SELECT * " _ 
        & "FROM qryChooseRawData;" 
Else 
strSQL = "SELECT *  " _ 
        & "FROM qryChooseRawData WHERE " & strSQL & ";" 
End If 
 
Set dbs = CurrentDb 
 
' Check if the qrySQL query exists or not, if so, delete it 
For Each qdf In dbs.QueryDefs 
    If qdf.Name = "qrySQL" Then 
        dbs.QueryDefs.Delete qdf.Name 
    End If 
Next qdf 
     
' Create the query named srySQL 
Set qdf = dbs.CreateQueryDef("qrySQL", strSQL) 
 
' Open the newly created query 
DoCmd.OpenQuery "qrySQL", acViewNormal, acReadOnly 
 
Set dbs = Nothing 
 
End Sub 
 
 
พอเรากำหนดคอนดิชั่นที่ chassis อันเดียว หรือ ไม่กำหนดอะไรเลย จะรันได้ไม่มี error  
แต่พอเลือกคอนดิชั่นอื่น ด้วย นี่สิ เกิด error ขึ้นที่  
' Create the query named srySQL 
Set qdf = dbs.CreateQueryDef("qrySQL", strSQL) 
ทำไงดีอ่ะครับ.....

5 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R00272
ฟอร์มจะมีรูปร่างดังนี้ครับ ---cmbModelName----------- ----cmbDefectCode------------ ---cmbChassis----------- ----cmbRefPart------------ ---cmbBoardType----------- ---cmbCustomerName------------- about the time : --txtStartDate------------ --txtEndDate-------------- ----cmdRunQuery---- --------------------------------------------------------------------------------------------------------------- p.s. cmb = comboBox txt = textBox cmd = command Button
2 @R00273
น่าจะเกิดปัญหาอยู่ 2 จุด คือ 1. ถ้าฟีลด์เป็นแบบ Number ให้เอาเครื่องหมาย ' ออกจากโค้ด ดังนี้ If Me.cmbModelName = "" Or IsNull(Me.cmbModelName) Then ' Do nothing here Else strSQL = strSQL & " qryChooseRawData.MODEL NAME = " & Me.cmbModelName End If โดยให้เอาออกทุกส่วนที่เหลือด้วย 2. ให้ใส่เครื่องหมาย [ ] กับชื่อฟีลด์ที่ชื่อมีช่องว่างด้วย เช่น If Me.cmbModelName = "" Or IsNull(Me.cmbModelName) Then ' Do nothing here Else strSQL = strSQL & " qryChooseRawData.[MODEL NAME] = " & Me.cmbModelName End If ลองดูครับ
3 @R00275
ขอบคุณมากๆเลยครับ แก้ปัญหาได้ฉลุยแล้วครับ ยังไงก็ต้องขอบคุณ คุณสุภาพมากเลยนะครับ คุณนี้เป็นผู้ให้เต็มตัวจริงๆ มีผลงานอะไรช่วย ส่งข่าวด้วยนะครับ ผมจะได้ติดตามได้ ที่ koonkai@hotmail.com ยังไงต้องขอบคุณเพื่อนชาวพันธ์ทิพย์ที่แนะนำเวปที่มีประโยชน์เช่นนี้มาให้ผมด้วยนะครับ
4 @R00298
รบกวนอาจารย์สุภาพ ช่วยดู qryChooseRawData ให้หน่อยนะครับ ทำไมไม่มีข้อมูลอะไรขึ้นมาเลยล่ะครับ เลยทำให้เรียกดาต้า ไม่ขึ้นมาเลยอ่ะครับ ผมว่าปัญหามันน่าจะมาจากที่ qryChooseRawData นี่แหล่ะครับ เพราะว่าตัวฟอร์ม ChooseRawData ก็รับได้ปกติไม่มี error เลยน่ะครับ ช่วยดูให้ด้วยนะครับ เพราเรื่องความสัมพันธ์ระหว่าง ตารางไม่ค่อยแข็งงแรงอ่ะครับ ช่วยแก้ให้หน่อยจะดีมากเลยครับ เพราะมันใกล้ส่งแล้วด้วยครับ ไม่รูจะไปปรึกษาใครดีครับ อืม ... จะอธิบายคร่าวๆให้ฟังนะครับ ตัว DefectData จะเป็นตัวกลางในการลิงค์กับข้อมูลอื่น(ตารางอื่นหน่ะครับ) เพื่อเรียกข้อมูลอื่นๆที่มีความสัมพันธ์ขึ้นมาแสดง tblBoardInfo ก็จะเกี่ยวกับ บอร์ดเซอร์กิต ที่จะเอามาประกอบเป็นเครื่องใช้ไฟฟ้าอ่ะครับ tblCustomerเกี่ยวกับลูกค้า tblProductionเกี่ยวกับ รายละเอียดของการผลิต ส่วน ยังไม่ได้ใช้ครับ tblModelInfoเกี่ยวกับ โมเดลสินค้านั้นๆ มีรายละเอียดอะไรบ้าง tblDefectCode เกี่ยวกับข้อมูลของรหัสอาการเสียอ่ะครับ ว่าเสียเพราะอะไร ส่วนรีเลชั่นชิบ นั้น ผมเป็นมือใหม่อ่ะครับ เลยดูมั่วๆๆ ถ้าไม่รังเกียจ และว่างพอ ก็ช่วยดูให้หน่อยนะครับ เหมือนมันจะไม่ค่อยเวิค อะครับ ขอบคุณล่วงหน้านะครับ ไก่
5 @R00301
ถ้าการออกแบบตารางเป็นแบบ One-To-Many โดยตาราง tblDefect Data เป็น One ส่วนที่เหลือเป็น Many ตาราง tblCustomer, tblDefectCode ได้กำหนดให้เป็นแบบ Many ถูกต้องแล้ว ฉะนั้นจะต้องเข้าไปกำหนดตารางที่เหลือให้เป็น Many โดยกำหนดให้ JON Number ของ tblProductionInfo เป็น Primary Key Part Ref ของ tblBoardInfo เป็น Primary Key Model และ Chasis ของ tblModelInfo เป็น Primary Key
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1167s