เปลี่ยนจากtext เป็นDate/time
กระทู้เก่าบอร์ด อ.Yeadram

 5,441   6
URL.หัวข้อ / URL
เปลี่ยนจากtext เป็นDate/time

เรียนอาจารย์ทุกท่านครับ
ผมต้องการเปลี่ยนข้อมูล text เป็นdate/time เพื่อนำไปคำนวณช่วงเวลา

ดังนี้ ข้อมูล text เป็นข้อมูล(vachar)จาก My SQL รูปแบบ ข้อมูลแสดงดังนี้
(ใน My SQL)เช่น1/2/2551      12/12/2549          10/2/2551      5/11/2551
จากนั้นใช้ access ดึงผ่านODBC เพื่อนำไปประมวลผลตามช่วงเวลา
ไม่ทราบว่าต้องเขียนฟังก์ชั่นอะไร หรือทำอย่างไรในประมวลผลจาก text(vachar(10)
หมายเหตุ ต้องการทำใน Query

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

1 @R00821
Cdate() ไม่ได้หรือครับ
2 @R00822
กรณีใช้ CDate ดูผิวเผินเหมือนจะได้
เคยลองใช้แล้วครับ

แต่ได้เฉพาะในQuery แต่เมื่อเขียนเงื่อนไขใน Query ผ่านform ปรากฏว่า
ข้อมูลที่แสดงผิดพลาด
ถ้าใน Query เป็น between #1/1/2549#and#1/1/2550# กรณีได้
แต่ถ้าผ่านฟอร์ม

between forms!frmRep!s and forms!frmRep!f กรณีนี้เหมือนจะได้แต่
เมื่อตรวจสอบข้อมูลไม่ถูกต้องครับ

แต่ถ้าตัดคำ right left mid แล้ว CDate ทีหลัง กรณีนี้ใช้ได้เลย
ปัญหาคือจะตัดคำอย่างไรดี เม??่อตำแหน่งไม่ตรงกัน

3 @R00823
Trim()

ตัดคำไม่สนตำแหน่ง ลองดูหรือยังครับ
4 @R00824
ขอบคุณอาจารย์มากครับ
ได้แล้วครับแต่ยังไม่ค่อยตรงใจ
เช่นตัดตัวแรกเขียนอย่างนี้

Public Function spittext1(y As String) As Variant
On Error GoTo kkkk
Dim X() As String
X = Split(y, "/", -1, vbTextCompare)
spittext1 = CInt(X(0))
Exit Function
kkkk:
        MsgBox Err & Err.Description, vbCritical, ".."
        End Function
จากนั้นตัดตัวที่ 2 , 3ก็เขียนคล้ายๆเดิม
แล้ว มารวมโดย CDate อีกทีใช้ได้เลยใน Query

แต่ถ้าเขียนแบบนี้รวมเลยพอประมวลผลไม่ได้

Public Function spittext(y As String) As Variant
On Error GoTo kkkk
Dim a As Long
Dim b As Long
Dim c As Long
Dim X() As String
X = Split(y, "/", -1, vbTextCompare)
a = CInt(X(0))
b = CInt(X(1))
c = CInt(X(2))
spittext = CDate(a & "/" & b & "/" & c)
Exit Function
kkkk:
        MsgBox Err & Err.Description, vbCritical, ".."
        End Function

ก็เลยต้องใช้แบบแรกไปก่อน
จริงๆเรื่องเวลานี้
ขอปรึกษาอาจารย์สันติสุขเพิ่มเติมหน่อยครับ
หรืออาจารย์yeadram ขอความกรุณาเขียนcode ปรับปรุงให้หน่อยครับ
5 @R00829
ขอออกตัวก่อนเลยว่าปกติผมไม่ได้ใช้ Criteria ที่อ้างกับเท็กซ์บนฟอร์มโดยตรงครับ เลยไม่แน่ใจ ที่คิดได้ก็น่าจะเหมือนที่คุณแดนบอกครับ คือใช้ CDate( ) ซึ่งเขียนเป็น Criteria ได้ว่า between CDate(forms!frmRep!s) and CDate(forms!frmRep!f) ... ไม่ทราบว่าที่ลอง ได้เขียนอย่างนี้หรือเปล่า
6 @R00835
เพราะ VARCHAR() จะทำการจองพื้นที่ให้ตัวอักขระ
ถ้าข้อมูลมีจำนวนอักขระน้อยกว่าที่ varchar จอง varchar จะทำการเพิ่มช่องว่างเข้าไปทดแทนจนกว่าจะเต็มจำนวนจอง

cDate อาจจะมอง ช่องว่างที่ VARCHAR() จองไว้ ไม่ออก
ดังนั้น ก่อนจะใช้ cdate() ก็ต้อง ใช้ trim() ตัดช่องว่างออกก่อน

Between CDate(Trim(forms!frmRep!s)) and CDate(Trim(forms!frmRep!f))

ผมว่าแค่นี้คงจะพอ คงไม่ต้องถึงกับต้องไป แยกกลุ่มรวมกลุ่มหรอกครับ หรือว่าลองแล้วแต่ไม่ได้ผลครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2920s