กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
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)
ทำไงดีอ่ะครับ.....
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
Time: 0.1167s