Sep 26, 2007

ASP error about type mismatch!

วันนี้พยายามกลับมาเขียนเว็บต่อในส่วนของ Poll

ซึ่งเป็นระบบ Management Poll

โดยจะมีทั้งการ Insert, Delete, Update, Active

คุณสมบัติเด่นๆ ก็คือจะเลือกแสดง Poll ได้หลายๆ Poll พร้อมกัน

และมีการลงคะแนนได้หนึ่ง Username ต่อ Poll

ความต้องการของลูกค้ามีประมาณนี้

ผมก็เร่งทำจนเรียบร้อยแต่ติดปัญหาอยู่นานกับ ERROR แบบหนึ่ง

นั่นคือ TYPE MISMATCH ซึ่งสงสัยว่าทำไมจึงติด ERROR ได้

ลองเข้าไป ค้นหาใน www.google.com ด้วย Firefox ทันใด

ก็พบหลายเว็บน่าสนใจ แต่ที่จะเอามาคุยตรงนี้ก็คือ เว็บที่มี URL ว่า

http://www.codingforums.com/showthread.php?t=26385

ในนี้เขาบอกวิธีแก้ไขปัญหาเอาไว้ น่าสนใจดี คือการใช้ VarType() Function

มาเป็นตัวหาชนิดข้อมูลเพื่อจะได้ระบุและให้ส่งข้อมูลเข้ากันและผ่าน ERROR นี้ไปได้

ซึ่งชนิดข้อมูลที่จะมีการคืนค่าเมื่อใช้ฟังก์ชันจะมีดังนี้

0 Uninitialized
1 Contains no valid data
2 Integer subtype
3 Long subtype
4 Single subtype
5 Double subtype
6 Currency subtype
7 Date subtype
8 String subtype
9 Object
10 Error subtype
11 Boolean subtype
12 Variant (only use for arrays of variants)
13 Data access object
14 Decimal subtype
17 Byte subtype
8192 Array

ซึ่งปัญหา ERROR
Microsoft VBScript runtime (0x800A000D)
Type mismatch
ก็จะสามารถแก้ได้ ด้วยประการนี้แหล่ะ หุหุ

ซึ่งสำหรับงานผม บังเอิญตั้งค่าในฐานข้อมูลเป็น decimal

ด้วยความที่เข้าใจว่าเป็นชนิด ตัวเลข จึงคิดว่าน่าจะเข้ากันได้กับ integer

ผมจึงต้องใช้ Function CInt เพื่อครอบข้อมูลที่เป็นชนิด Decimal

ให้สามารถเข้ากันได้ สุดท้ายจึงใช้ได้ อิอิ

สำหรับใครที่มีข้อมูลรายละเอียด ชนิดข้อมูลของ MS SQL SERVER 2000

แบบละเอียดๆ ช่วยส่งลิงค์มาให้ด้วยนะครับจะขอบคุณมากเลย

ได้ความรู้เพิ่มอีกล่ะ เข้าใจ MS SQL SERVER 2000 และ ASP เข้าไปอีกเปาะ

บอกตัวเองอีกครั้งว่าสู้ๆ "งานจะปิดเต็มทีแล้ว"


เอ้อ เกือบลืมบอก พอดีมีน้องสาวคนสวย

แนะนำ Website ของสาขาวิทยาการคอม

ของนอร์ทกรุงเทพ นี่แหล่ะ พึ่งเปิดได้เดือนกว่าๆ เองมั้ง

ใครสนใจ ก็เข้าไปแวะชมกันได้ ที่ http://www.c2speed.com/

เท่าที่ดู ก็น่าสนใจดี คงต้องปรับไปเรื่อย

นับเป็นก้าวที่ดี พยายามกันเข้าล่ะ น้องๆ ปีสาม ^ ^ พี่โต คอยเชียร์ โฮ่ะๆ

Sep 21, 2007

Problem ASP include dynamic URL

กลับมาแล้วครับกับ วิชาการๆ เนื่องจากในช่วงเวลา ประมาณ เกือบๆ เดือน ผมได้มีโปรเจกเข้ามา
เป็นงานของบริษัท แถวๆ เมืองทองธานี งานที่ว่าก็เป็นงานเว็บไซด์เช่นเคยครับ แต่เป็นภาษา ASP
ใช้ฐานข้อมูลของ MS SQL SERVER 2000 ภาษา ASP เป็นภาษาที่ผมค่อนข้างจะไม่ค่อย
ได้ใช้เวลากับมันซักที ทำให้ไม่ค่อยเชี่ยวชาญ และติดๆ ขัดๆ อยู่เยอะเหมือนกัน
เท่าที่จำได้คือเสียตังค์เข้าอบรม ASP เบื้องต้นที่ทางสถาบันจัดขึ้น เนื่องจากเป็นนักศึกษา
ค่าใช้จ่ายเลยไม่มากเท่าไหร่ ช่วงนั้นก็ประมาณ ปี 48 ได้ ตอนนี้ 50 ล่ะลืมหมดเกลี้ยงเลย เหอะๆ
อบรมครั้งนั้น มีทั้งหมดสองวัน เรื่องที่ลึกที่สุดถึงเพียงแค่การต่อเชื่อมกับ ฐานข้อมูล MS Access 97
ผิดหวังหน่อยๆ แต่ก็ถือเป็นประสบการณ์ที่ดี เพราะตอนนั้นไม่ได้จับภาษาใดเลย (เขียนเว็บยังไม่เป็น)

และในครั้งนี้ ผมต้องมานั่งอ่านศึกษา ตำราต่างๆ เพื่อรื้อฟื้น ASP
จะว่าเป็น ASP.NET ก็อยากใช้นะ แต่ไม่มั่นใจ SERVER ว่ารองรับหรือเปล่า
เลยต้อง ใช้ ASP ธรรมดาเพื่อความปลอดภัยไปก่อน ยากเหมือนกันนะเนี่ย
ผมใช้เวลา ประมาณ สองสัปดาห์ กว่าจะเรียบเรียงข้อมูลต่างๆ เกี่ยวกับ ASP ได้
แต่ที่ได้เร็วก็เพราะใช้วิธีการเทียบเคียงกับภาษาอื่นๆ เช่น PHP หรือ JSP
ผมรู้สึกแย่เหมือนกัน ที่ปกติเขียนโปรแกรม เชิงวัตถุ แต่กลับต้องมานั่งเขียนเป็น โปรแกรมแบบโครงสร้าง
ทำให้งานผมช้ากว่า ภาษาที่กล่าวมาทั้งหมด แต่ก็พยายามทำความเข้าใจ จนเขียนได้คล่องในเวลาต่อมา
แต่ก็ยังติดปัญหา เมื่อมันเกิดความผิดพลาด เพราะดูเหมือนว่ารายละเอียดที่มันแจ้งมาเยอะแยะ
ส่วนใหญ่แล้วไม่ได้ช่วยอะไรขึ้นเลย... เหอะๆ แย่จัง

คราวนี้ ก็จะยกปัญหาอีกปัญหา ที่ไม่น่าจะเกิดขึ้นได้เลย
เพราะมันน่าจะเป็นวิธีการง่ายๆ ที่ไม่น่าที่จะเกิดการไม่รองรับของสคริป
ซึ่งก็คือการ include file แบบ dynamic
ก็หมายถึงว่า การใช้ ตัวแปรเป็นตัวอ้างอิงไปยัง URL แทน
ตัวอย่างคือ
(จากตัวอย่างต้องมีเครื่องหมาย "!" แต่แทนด้วย @ และ "%" แทนด้วย "+"
แต่ใส่ตรงๆไม่ได้เพราะจะกลายเป็น comment )

<@--#include file="tabNews.asp" -->
นี่คือแบบที่เป็นการ กำหนดแบบบังคับโดยให้ Include file ที่ชื่อ page.asp เพียงอย่างเดียว

<@--#include file="<+=urlLink+>" -->
นี่คือแบบที่ไม่สามารถจะทำงานได้ เนื่องจาก หาก ASP เจอเครื่องหมาย # ก็จะเข้าใจว่าเป็น comment ทันที
จึงไม่แสดงผล ซึ่งผมเอง งง อยู่นาน ว่าทำไมมันถึงผิดพลาด จึงไปค้นหลายๆ เว็บ
แล้วก็เจอวิธีแก้ไข โดยใช้ วิธีการอื่นแทน ดังนี้

dim strFile, fso, fsoFile
strFile = "upload/"& CStr(filename)
If strFile <> "" then
set fso = createObject("Scripting.FileSystemObject")
set fsoFile = fso.openTextFile(Server.MapPath(strFile))
response.write "" & fsoFile.readAll & ""
set fso = nothing
set fsoFile = nothing
end if

ซึ่งเป็นการแก้ไขด้วยการดึงข้อความจากลิงค์ที่กำหนดมาจนครบ แล้วถึงจะแสดงผล
เป็นวิธีการพื้นๆ แต่ก็ใช้ได้จริง ซึ่งถ้าใครมีวิธีการที่ดีกว่านี้ ก็ช่วยแนะนำด้วยนะครับ
จะขอบคุณมากๆ เลย ที่มานะครับอยู่ที่เว็บ
http://www.developerfusion.co.uk/show/234/

สำหรับวิธีการเขียนต่างๆ ของ ASP ถ้าว่างๆ ก็จะมาเขียนลงที่นี่แหล่ะครับ
แต่สงสัยว่าจะเป็น ASP.NET แล้วล่ะคราวนี้ เพราะโปรเจกจบต้องทำ
ยังไงก็แนะนำเพิ่มเติมได้นะครับ ผมยินดีรับฟังความคิดเห็น "ที่สร้างสรรค์" จากผู้อ่านทุกท่านนะครับ

Blog Comment

บทความที่ได้รับความนิยม