พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com | บล็อกอาหาร | Thailand travel information
ASP programming / คำนวณ
korakot_titla
korakot_titla
Fri 10 Mar 2006 20:34:27

คือมี Field ตามนี้อยู่นะครับ

-name

-ValuesAdjust

ผมจะนำค่าจาก Field(ValuesAdjust) คำนวณมาบวกกันพอจะมีวิธีหรือป่าวครับ

 Do While Not rs.Eof
   With Response
                          .Write"<tr bgcolor=daeef5><td align=center>" &"<font size=2>"&sum &"</font>"& "</td>"
        .Write"<td align=center>" &"<font size=2>"& rs("IdentityCard") & "</font>"&"</td>"
       .Write"<td align=center>" &"<font size=2>"& rs("Name") & "</font>"&"</td>"
       .Write"<td align=center>" & "<font size=2>"&rs("Story") & "</font>"&"</td>"
       .Write"<td align=center>" & "<font size=2>"&rs("ValuesAdjust") & "</font>"&"</td>"
       .Write"<td align=center>" & "<font size=2>"&"อ."&rs("city1")&"จ."&rs("provid_order")&"<br>"& "</font>"&"</td>"
           .Write"<td align=center>" & "<font size=2>"&rs("OrderDate") &"<br>"&"เวลา:  "&rs("mytime")& "</font>"&"</td>"
       
       sum=sum+1
       num=num+1
 End With
 rs.MoveNext
 Loop

Administrator
Fri 10 Mar 2006 22:34:03
ไม่ลองใช้ SUM() ในภาษา SQL ดูล่ะครับการทำงานของ Application จะเร็วขึ้นเยอะเลย
bit69
bit69
Thu 23 Mar 2006 01:01:02

รบกวนหน่อยนะครับ

คือสมมุติว่าผมทำระบบหนึ่งขึ้นมาทำด้วยภาษา ASP ซึ่งผมลองนำไปติดตั้งแล้วซึ่งเครื่องที่ผมติดตั้งระบบนี้ใช้ os เป็น windows xp นะครับ และภายในองค์กรเค้ามีวง lan อยู่มีเครื่องประมาณซัก 5-6 เครื่อง ตอนนี้ผมจะให้ทุกเครื่องสามารถเรียกใช้ระบบที่ผมได้ติดตั้งไว้ที่เครื่องๆ นั้นนะครับ โดยเรียกผ่านทาง Internet Explorer นะครับ โดยพิมพ์ชื่อเครื่องหรืออ้างถึง ip address ของเครื่องนั้น ผ่านทาง URL นะครับ เช่น http://192.168.10.3/System.asp

ประมาณนี้นะครับ

คืออยากจะทำให้เครื่องนั้นเป็นเครื่อง server นะครับโดยที่ไม่ต้องเปลี่ยน os นะครับ คือใช้ win xp เหมือนเดิมนะครับ ช่วยรบกวนแนะนำหน่อยนะครับ

ขอบคุณครับ

Administrator
Thu 23 Mar 2006 02:27:14
ต้องการให้เครื่องนั้นเป็นเครื่อง Server? (ก็เป็นอยู่แล้วนี่ครับ) เข้าใจว่าต้องการให้บริการผ่านระบบ Internet ใช่ไหมครับ

ถ้าไม่มี Dedicate IP ก็สามารถใช้บริการ Dynamic dns ได้ครับ ต้องติดตั้ง Software เพื่อให้ทำการ update ip address ที่ name server และถ้าอยู่หลัง firewall ต้องทำการเปิด port หรือ forward port มายังเครื่องที่ให้บริการด้วยครับ
http://www.google.co.th/search?hl=th&q=dynamic+dns&btnG=%E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%AB%E0%B8%B2&meta=
korakot_titla
korakot_titla
Mon 3 Apr 2006 23:55:11

รบกวนหน่อยนะครับ

คือลักษณะการทำงานของโปรแกรมที่ผมทำขึ้นคือการจับกุมผู้กระทำความผิดกฎหมายจราจร คือ 1 ใบสั่ง ต่อ 1 ข้อหา 1 หมายเลขคดีเปรียบเทียบปรับ นะครับ

แต่ตอนนี้ที่ทำขึ้นมาคือ 1 ใบสั่งต่อ 1 ข้อหา ต่อ 1 หมายเลขคดีเปรียบเทียบปรับ

ตัวอย่างนะครับ

---------------------------------

คดีเปรีบเทียบ 001

เลขที่ใบสั่ง 17063

ข้อหา

 ขับรถเร็ว  50 บาท
 เมาแล้วขับ  100 บาท

ถ้าหาว่าผมจะทำการบันข้อหาแรกคือ

ขับรถเร็ว ค่าปรับ 50

คดีเปรีบเทียบ 001

เลขที่ใบสั่ง 17063

ส่วนข้อหาที่ 2

เมาแล้วขับ  ค่าปรับ 100

คดีเปรีบเทียบ 002

เลขที่ใบสั่ง 17064

* ซึ่ง คดีเปรียบเทีย และ เลขที่ใบสั่งผมจะให้โปรแกรมกำหนดต่อจากข้อหาแรก

คือ 001 และ 1764 ให้โดยอัตโนมัติ

และตอนนี้ หน้า webpage หน้านี้ผมทำให้สามารถเลือกได้หลายข้อหาประมาณซัก 20

ข้อหาซึ่งจะเช็คโดยใช้ Checkbox นะครับ

ซึ่งหากอันไหนไม่ได้ทำการเลือกก็ให้เว้นไปไม่ต้องทำการบันทึกปัญหาคือผมจะรันให้

หมายเลขคดีเปรียบเทียบและเลขที่ใบสั่งโดยเรียงลำดับดย่างเช่น

ผมเลือกข้อหาที่ 1,2,4,6

ซึงข้อหาที่ข้ามมาคือข้อหาที่ 3 และ 5 แล้วผมป้อน

คดีเปรียบเทียอันแรกคดีที่ 1  เป็น 001

เลขที่ใบสั่ง คดีที่ 1 เป็น 17063

ส่วนคดีที่ 2 คดีเปรียบเทียบเป็น 002 เลขที่ใบสั่งเป็น 17064

ส่วนคดีที่ 4 คดีเปรียบเทียบเป็น 003 เลขที่ใบสั่งเป็น 17065

ส่วนคดีที่ 6 คดีเปรียบเทียบเป็น 004 เลขที่ใบสั่งเป็น 17066

ครับประมาณนี้แหละครับ ช่วยผมแก้ไขด้วยนะครับ งง มากเลยครับ ขอบคุณครับ

Administrator
Tue 4 Apr 2006 10:37:26
การสร้าง Database ก็สร้างให้ Filed ที่มีเลขรันให้เป็น Auto Increment ครับ โดยโครงสร้างอาจจะเป็น

#cases (คดี)
- id int auto_increment
- ticketno int (FK for tickets)

#tickets (ใบสั่ง)
- id int auto_increment
- chargeid (FK for charges)
- fine int

#charges (ข้อหา)
- id int
- chargename varchar

ส่วนของโปรแกรมนั้น เมื่อทำการ insert เข้าไปยัง table tickets แล้วก็จะได้เลขที่ใบสั่งเพื่อนำไปใช้เพื่ออ้างอิงใน table cases
ซึ่งถ้าใช้ MS SQL จะมี @@identity เพื่อใช้อ้างอิงในการ insert ได้ครับ
korakot_titla
korakot_titla
Tue 4 Apr 2006 13:10:49

ตอนนี้ผมทำการเช็คได้แล้วค่าจาก checkbox ตัวไหนที่ทำการเลือกก็จะทำการ insert ลงในฐานข้อมูล และปัญหาอีกอย่างคือตอนที่ผมเลือกเช็คค่าจาก checkbox แล้วจะแสดงค่าปรับออกมาที่ textbox

จัวอย่าง code นะครับ

หน้า saveAdjust.asp

<script language="javascript">
function showData(obj,txt){
    var theform = obj.form;
    theform.info.value = txt;
}

function showData1(obj,txt){
    var theform = obj.form;
    theform.txtValue1.value = txt;
}

</script>

ตัว checkbox นะครับ

 ตัวที่ 1 <input name="cek" type="checkbox" id="cek26" value="ขับรถฝ่าฝืนสัญญาณไฟจราจรสีแดง" onclick="showData1(this, '400')">

ตัวที่ 2 <input name="cek" type="checkbox" id="cek" value="ขับรถฝ่าฝืนเครื่องหมายบนพื้นทาง" onclick="showData2(this, '300')">

คือตอนนี้ checkbox เป็น array นะครับ ส่วน textbox ไม่ใช่นะครับ

พอผมคลิกเลือกทั้งสองข้อหาแล้วทำการส่งค่าไปยังหน้า saveAdjust_1.asp

ผมทำการรับค่าอย่างนี้นะครับ

myValue=request.form("txtValue1")

myChebox=request.form ("cek")
myarray = Split(myChebox, ",")

 For n=0 to UBound(myarray )

counter=counter+1
        sumnumber=sumnumber+1
        sum=counter + Adjust
        mystory=myarray(n)
        Response.write myarray(n)  & _
         "คดีเปรียบเทียบที่ :"&sum&" เลขที่ใบสั่ง :  " &sumnumber &"<br>"

next

ซึ่งการใช้ for ในการวนเพื่อแสดงข้อมูลก็ได้ตามที่ผมถามไปข้างต้นนะครับเช่น

ข้อหา 2 ข้อหา แล้วป้อนคดีเปรียบเทียบอันเป้น 001 ข้นหาที่ 2คดีเปรียบเทียบป็น 002 ให้โดยทันทีคือรันตามข้อหาไปเรื่อย ๆ แล้วแต่ข้อหาที่ได้ทำการเลือก

*แล้วผมจะนำค่าปรับจาก textbox เหล่านั้นมาอย่างไรครับ เพื่อให้ตรงกับข้อหาที่ได้ทำการเลือก

 รบกวนช่วยตอบหน่อยนะครับ

ขอบคุณมากครับ

Administrator
Tue 4 Apr 2006 14:17:22
ถ้าในส่วนของฟอร์ม interface นั้นต้องการให้คำนวนนั้น ไม่ควรใช้ textbox ครับไม่อย่างนั้นจะสามารถแก้ไขได้ครับเปลี่ยนเป็น <span id="valueDSP"></span>
ส่วนการเซ็ทค่านั้นก็ document.all?(document.all["valueDSP"].innerHTML = txt)Saddocument.getElementById("valueDSP").innerHTML = txt);
และทำการเซ็ทค่าไว้ใน hidden field ด้วยครับเพื่อใช้ในการส่งค่าไปบันทึก
document.all?(document.all["txtValue1"].innerHTML = txt)Saddocument.getElementById("txtValue1").innerHTML = txt);

เพื่อป้องกันการแก้ไขซึ่งจะทำให้มีการส่งค่ามาบันทึกไม่ถูกต้องได้ครับ

ส่วนการคำนวนนั้นถ้าใช้สูตรเดียวกันแล้วก็จะได้ค่าตรงกันครับ

ส่วนการรันตัวเลขนั้นผมไม่แน่ใจมีการแปลงตัวเลขเป็น string โดยการ format เหมือน sprintf ได้หรือไม่ครับ ซึ่งคุณสามารถใช้ sumnumber มาใช้ในการอ้างอิงได้ครับ
korakot_titla
korakot_titla
Tue 4 Apr 2006 15:27:19

ไม่เข้าใจครับ <span id="valueDSP"></span> คืออะไรเหรอครับ

คือตอนนี้ผมไม่ได้ทำการคำนวณค่าปรับนะครับเพียงแต่เอาค่าปรับและข้อหาที่จะทำการบันทึกให้ตรงกันนะครับ

คือ 1 ข้อหา ต่อ 1 ดคีเปรียบเทียบ เช่น

ถูกจับ 3 ข้อหา

ข้อหาที่ 1 ข้อหา ขับรถเร็ว คดีเปรียบเทียบที่ 001 ค่าปรับ 200

ข้อหาที่ 2 ข้อหา เมาแล้วขับ คดีเปรียบเทียบที่ 002 ค่าปรับ 500

ข้อหาที่ 3 ข้อหา แข่งรถในที่สาธารณะ คดีเปรียบเทียบที่ 003 ค่าปรับ 500

ซึ่งผมก็จะเก็บข้อมูลเหล่านี้ลงในฐานข้อมูลอยู่ 3 รายการ

 ข้อหา  ค่าปรับ คดีเปรียบเทียบ 
 ขับรถเร็ว  200  001
 เมาแล้วขับ  500  002
 แข่งรถในที่สาธารณะ  500  003

ซึ่งตอนนี้ผมส่งค่ามาบันทึกได้เพียง ข้อหา,คดีเปรียบเทีบ ส่วนค่าปรับยังไม่สามารถส่งมาได้ครับ

Administrator
Tue 4 Apr 2006 18:21:10
ขอโทษด้วยครับที่เข้าใจคำถามผิด ผมไม่แน่ใจว่าค่าปรับนั้นทางคุณต้องการให้ป้อนได้เองหรือไม่ ซึ่งถ้าป้อนได้เองก็คงต้องสร้าง textbox เป็น array เพื่อส่งค่ามาพร้อมกับ checkbox เลยครับ

ส่วนถ้าเป็นค่าตายตัวก็สามารถสร้างตารางราคา โดยอ้างอิงตามข้อหาได้ครับ จากนั้นเมื่อรับค่ามาจาก checkbox แล้วก็นำค่าเหล่านั้นมา query จากตารางค่าปรับดังกล่าวว่ามีค่าเป็นเท่าใดแล้วนำไปบันทึกอีกทีครับ
korakot_titla
korakot_titla
Tue 4 Apr 2006 18:59:00

ตอนนี้ชื่อ textbox อย่างนี้นะครับ txtValue1-txtValue20 คือตอนนี้ส่งค่ามาได้แล้วนะครับแต่ติดตรงที่ตำแหน่งของ checkbox และตำแหน่งของ txtValue ไม่ตรงกันนะครับ ซึ่งตำแหน่งของ checkbox จะแสดงเฉพาะตำแหน่งตัวที่ทำการเลือกเท่านั้น แต่ตำแหน่งของ txtValue เนี่ยซิครับ จะไห้ตรงกับตำแหน่งที่ checkbox นั้น ได้ทำการเลือกอย่างไรดีครับ

myChebox=request.form ("cek")
myarray = Split(myChebox, ",")

 For n=0 to UBound(myarray )

        counter=counter+1
        sumnumber=sumnumber+1
        sum=counter + Adjust
        mystory=myarray(n)
        Response.write myarray(n)  & _
         "คดีเปรียบเทียบที่ :"&sum&" เลขที่ใบสั่ง :  " &sumnumber &"<br>"

       txtValue=request.form("txtValue"&n)  'ตรงนี้แหละครับที่ผมอ้างถึงตำแหน่งของ txtValue นะครับ

next

Administrator
Tue 4 Apr 2006 20:53:50
ผมไม่แน่ใจเรื่องการรับค่า array ในภาษา ASP นะครับ ซึ่งในหน้าฟอร์มนั้นอาจจะสร้างเป็น
<script language="javascript"
function enableForm(obj){
    var theForm = obj.form;
    for(i = 0; i < theForm.cases.length; i++){
       theForm.fines[i].disabled = theForm.cases[i].checked;
    }
}
</script>

<input type="checkbox" name="cek[]" onclick="enableForm(this)"><input type="text" name="fines[]" disabled>
<input type="checkbox" name="cek[]" onclick="enableForm(this)"><input type="text" name="fines[]" disabled>
...
<input type="checkbox" name="cek[]" onclick="enableForm(this)"><input type="text" name="fines[]" disabled>

จากฟอร์มทำการ disabled text ที่ไม่มีการใช้งานเพื่อให้มีการส่งต่าเฉพาะที่ใช้งานเท่านั้น
ส่วนในการรับค่านั้นอาจจะเป็น

myChebox=request.form ("cek")
myarray = Split(myChebox, ",")

For i = LBound(myarray) to UBound(myarray)
    ......
    'แล้วก็ทำการอ้างถึง textbox แบบ array แทนครับ
Next
korakot_titla
korakot_titla
Tue 4 Apr 2006 21:41:05

อีกหน่อยนะครับตามนี้นะครับ

For n=0 to UBound(myarray )
        txtValue=request.form("txtValue"&n+1 )
        counter=counter+1
        sumnumber=sumnumber+1
        sum=counter + Adjust
        mystory=myarray(n)
        
        Response.write myarray(n) 
         Response.write"คดีเปรียบเทียบที่ :"&sum&" เลขที่ใบสั่ง :  " &sumnumber &"<br>"
        
        Sql="Select * from TblStoryFix  where  Story1 like '%"&mystory&"%'"
          Set RS=Server.CreateObject("ADODB.Recordset")
          RS.open Sql,Conn,1,3
      
         while not rs.EOF 
         response.write "ค่าปรับ: "&RS("myValue") 
         rs.MoveNext
         wend         
   Next

ถ้าหากผมทำอย่างที่แนะนำคือให้ค่าปรับเป็นค่าตายตัวแล้วนำมาเปรียบเทียบค่าปรับในฐานข้อมูลอีกที ก็จะแสดงออกมาได้นะครับ แต่จะแสดงอันเดียวนะครับ ผมจะวนอย่างไรดีให้แสดงค่าปรับทุกข้อหาตามที่เราเลือกออกมา

Administrator
Wed 5 Apr 2006 02:05:55
ผมไม่แน่ใจนะครับ ไม่ทราบว่าจะเกี่ยวกับที่ไม่ได้มีการเคลียร์ค่าใน RecordSet หรือเปล่าครับเมื่อจบการทำงานแล้ว
โดยปกติแล้วค่าที่ได้จากการ query ค่าปรับนั้นควรจะได้มาค่าเดียว (SELECT TOP 1 ...)  ไม่ทราบว่าใน ASP ถ้าไม่วนลูปเพื่อแสดงค่านั้นทำได้หรือไม่ครับ
ซึ่งคุณอาจจะสร้าง Function เพื่อใช้ในการหาค่าปรับก็ได้ครับโดยคืนค่ากลับมาในลูปเพื่อใช้ในการแสดงผลครับ
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login