ส่งออกข้อมูลตัวเลขหาย
กระทู้เก่าบอร์ด อ.Yeadram

 2,802   16
URL.หัวข้อ / URL
ส่งออกข้อมูลตัวเลขหาย



ทำไมเวลาส่งออกมา 0   6 ตัวข้างหน้าถึงหายหรอครับช่วยหาวิธีแก้ด้วยครับ


นี้คือโค๊ดโมดูลที่ผมเขียนส่วน ฟิวส์ที่ใช้คือ AGREEMENT_NO

Sub OutputFile()
Dim db As Database
Dim rs As Recordset
Dim strOutput As String

Set db = CurrentDb
Set rs = db.OpenRecordset("HAIRCUT UPLOAD OA15")
Open getpath(CurrentDb.name) & "HAIRCUT UPLOAD OA15.txt" For Output As #1
rs.MoveFirst
Do While Not rs.EOF
    strOutput = Format(rs!DETAIL, "0") & "|" & _
               Format(rs!PRODUCT_CODE) & "|" & _
               Format(rs!AGREEMENT_NO) & "|" & _
               Format(rs!HAIRCUT_DATE) & "|" & _
               Format(rs!BUCKET) & "|" & _
               Format(rs!OA_CODE) & "|" & _
               Format(rs!OS_BEFORE, "0.00") & "|" & _
               Format(rs!OS_AFTER, "0.00") & "|" & _
               Format(rs!DISCOUNT_AMT, "0.00") & "|" & _
               Format(rs!TERM) & "|" & _
               Format(rs!DISCOUNT_RATE, "0.00") & "|" & _
               Format(rs!REASON, "000") & "|" & _
               Format(rs!MESSAGE) & "|" & _
               Format(rs!PP_SEQ) & "|" & _
               Format(rs!PP_DATE_SEQ) & "|" & _
               Format(rs!PP_DATE_AMT, "0.00")
    
    Print #1, strOutput
    rs.MoveNext
Loop
Close #1
End Sub
Function getpath(name As String) As String
getpath = (Mid(CurrentDb.name, 1, Len(CurrentDb.name) - Len(Dir(CurrentDb.name))))
End Function

Sub OutputFileTabDelimited()
Dim db As Database
Dim rs As Recordset
Dim strOutput As String

Set db = CurrentDb
Set rs = db.OpenRecordset("HAIRCUT UPLOAD OA15")
Open getpath(CurrentDb.name) & "HAIRCUT UPLOAD OA15.txt" For Output As #1
rs.MoveFirst
Do While Not rs.EOF
    strOutput = rs!DETAIL & """" & vbTab & "|" & _
               rs!PRODUCT_CODE & "|" & vbTab & _
               rs!AGREEMENT_NO & "|" & vbTab & _
               rs!HAIRCUT_DATE & "|" & vbTab & _
               rs!BUCKET & "|" & vbTab & _
               rs!OA_CODE & "|" & vbTab & _
               rs!OS_BEFORE & "|" & vbTab & _
               rs!OS_AFTER & "|" & vbTab & _
               rs!DISCOUNT_AMT & "|" & vbTab & _
               rs!TERM & "|" & vbTab & _
               rs!DISCOUNT_RATE & "|" & vbTab & _
               rs!REASON & "|" & vbTab & _
               rs!MESSAGE & "|" & vbTab & _
               rs!PP_SEQ & "|" & vbTab & _
               rs!PP_DATE_SEQ & "|" & vbTab & _
               rs!PP_DATE_AMT
   
    Print #1, strOutput
    rs.MoveNext
Loop
Close #1
End Sub

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

1 @R04973
field type เป็น Number จะตัด 0 ซึ่งไม่มีค่าออก
แต่ถ้าเป็น text              จะมอง 0 เป็นตัวอักษร ไม่ตัดออก

ไม่แน่ใจว่า เกี่ยวข้องกันรึเปล่านะคับ
2 @R04974
Field type ของผมเป็น text อยู่แล้วอะครับ
3 @R04977
คืออย่างนี้ครับ ในขั้นตอนของการนำเข้าหรือส่งออกข้อมูลนั้น
ตัว Access เองจะมีการกำหนดรูปแบบชนิดของข้อมูล เรียกว่า Spect ซึ่งรูปแบบนี้ตัว Wizard เองจะช่วยกำหนดให้ แต่ในบางครั้งการช่วยเหลือนี้กลับทำให้รูปแบบที่เราต้องการนั้นผิดไปจากที่เราต้องการ

เราสามารถกำหนดและบันทึกทับ [Save As] เก็บไว้ได้ครับ โดยให้สังเกตว่า Spect เดิมนั้นชื่ออะไร
4 @R04978
5 @R04979
6 @R04980
7 @R04981
8 @R04982
โดยให้สังเกตว่า ชื่อ Spec นั้นมีชื่ออะไรบ้างให้คลิ๊กดูที่ปุ่ม Specs ใต้ปุ่ม Save As

ลองดูนะครับ
9 @R04983
โทษทีนะครับถ้าผมส่งออกแบบปกติมันก็จะมี 0 ติดมาด้วยอะครับ แต่พอดีผมใช้ปุ่มคำสั่งรันอัตโนมัติอะครับในฟอร์มเวลาเปิดฟอร์ม ขึ้นมามันก็จะส่งออกเองโดยอัตโนมัติแต่ไม่เข้าใจว่าทำไม่มันถึงไม่มี 0 ผมก็เข้าไปเช็คตามที่คุณศรี-นคร บอกแล้วนะครับก็ไม่ได้อะครับ ไม่ทราบว่ามีวิธีอื่นอีกหรือเปล่าครับ
10 @R04985
ผมว่ามันน่าจะเป็นเพราะ ฟังก์ชั่น Format
ถ้าเป็นเท็กซ์ ลองใช้ฟังก์ชั่น Cstr ดูครับ
11 @R04986
ใน   Sub OutputFile()   ทำไม ต้องทีฟังก์ชั่น Format() กำกับทุกฟิลด์ล่ะครับ

ในบรรทัดที่คุณ เน้นหนามา
Format(rs!AGREEMENT_NO) & "|" & _
ลองเอา format() ออกดูซิครับ

หรือไม่คุณก็กำกับมันไปเลยว่าให้เป็น string
cstr(rs!AGREEMENT_NO) & "|" & _
12 @R04987
กรรม! ช่วงง่วงนอนตอนบ่าย คนเข้าอ่านพร้อมกันเยอะแฮะ
อิอิ ตอบตามหลังคุณ รักน้องบิวท์ เลย
13 @R04996
โทษครับรักน้องบิวท์ ฟังก์ชั่น Cstr คือไรหรอแล้วเปลี่ยนตรงไหนหรอครับ รบกวนด้วยนะครับ
14 @R04999
ตามที่ อ.Yeadram บอกไว้ด้านบนครับ
มันเป็นฟังก์ชั่นแปลงค่าเป็นตัวอักษร
15 @R05047
Cstr มันคือ ฟังก์ชั่นไรหรอครับ
16 @R05062
cStr() = convert to string แปลงค่าทุกอย่างในวงเล็บให้เป็นข้อความ

cStr(75/3) คือให้ Access รับทราบว่ามันคือบ้านเลขที่ 75/3        ห้ามมองว่าเป็นการเอา 75 หารด้วย 3

cStr(0812220000) ให้ Access ทราบว่ามันคือเบอร์โทรศัพท์ ถือเป็นข้อความ ห้ามเอา 0 ที่อยู่ด้านหน้าออก ถ้าเอาออกมันจะใช้ไม่ได้ ค่าตัวนี้ไม่ได้มีไว้เอาไปบวกลบคูณหารกับใคร เพราะมันคือข้อความ! เบอร์โทรศัพท์! มันคือข้อความ! มันคือ string!        ห้ามมองมันเป็น number!

cStr() คือฟังก์ชั่นแปลงค่าเป็นอักษร!
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3616s