Fri 23 Dec 2005 22:53:13
คือว่าผมมี wab page อยู่หน้าหนึ่งซึ่งมีปุ่ม 2 ปุ่มคือ ปุ่มแรกคือปุ่มบันทึกข้อมูลและปุ่มที่ 2 คือปุ่ม ตรวจสอบว่าชื่อของผู้ที่จะทำการบันทึกนั้นมีอยู่ในฐานข้อมูลหรือไม่ ซึ่งผมอยากจะรู้ว่าสามารถที่จะทำได้หรือป่าวครับ
ทำได้หลากหลายวิธีครับ ไม่ว่าจะเป็น ซ่อนเฟรม, โหลดข้อมูลผ่าน XML, การซ่อน Layer ลองอ่านบทความนี้เพิ่มเติมดูครับ
จริงๆมีตัวอย่างอยู่เคยเห็นนานมาแล้ว จำไม่ได้ครับว่าเว็บไหน
Wed 28 Dec 2005 23:55:01
ช่วยหน่อยนะครับคือว่า
เวลาที่ผมป้อนข้อมูลลงใน textfield ในที่นี้ข้อมูลที่ป้อนลงไปคือ รหัสประชาชนนะครับ เวลาที่ป้อนไปแล้วพอกด Enter แล้ว รายละเอียดของประชาชนคนนั้นแสดงใน textfield ซึ่งในที่นี้ข้อมูลที่ให้แสดงคือ ชื่อ,ว/ด/ป เกิด,อาชีพ,
ส่วนของที่อยู่จะแสดง บ้านเลขที่,หมู่,ตำบล,อำเภอ,จังหวัด,รหัสไปรษณีย์
ซึ่งในที่นี้ผมทำการบันทึกแยกออกเป็น 2 ตารางนะครับ คือ
1.ตารางข้อมูลประชาชน(PK)
-รหัสประชาชน
-ชื่อ
-ว/ด/ป เกิด
-อาชีพ
ตารางที่ 2 คือตารางที่อยู่ประชาชน
-รหัสประชาชน(PK)
-บ้านเลขที่
-ตำบล
-อำเภอ
-จังหวัด
-รหัสไปรษณีย์
<script language="javascript">
function getObj(id){
return (document.all)?document.all[id]:document.getElementById(id);
}
function loadData(obj){
var theform = obj.form;
if( document.layers && document.layers['datadiv'].load ) {
document.layers['datadiv'].load('checkdata.asp?pid='+ theform.pid.value,0);
} else if( window.frames && window.frames.length ) {
window.frames['dataframe'].window.location.replace('checkdata.asp?pid='+ theform.pid.value);
}
}
function display(data){
for(i = 0; data[i]; i++){
getObj(data[i][0]).value = data[i][1];
}
}
</script>
<form action="url เพื่อบันทึก" method="post">
<input name="pid">
<br>
<input type="text" name="name">
<input type="text" name="bdate">
<input type="text" name="occup">
<input type="text" name="address">
<input type="text" name="sDist">
<input type="text" name="dist">
<input type="text" name="prov">
<input type="text" name="zip">
<input type="submit" value="บันทึก"><input type="button" value="ตรวจสอบ" onclick="loadData(this)">
</form>
<div style="position:absolute;left:0px;top:0px;visibility:hidden;" id="datadiv">
<iframe src="about:blank" height="100" width="100" name="dataframe">iframe>
div>
ส่วนในไฟล์ checkdata.asp นั้นก็ให้นำตัวแปรจาก querystring ไปทำการ query ข้อมูลออกมา
แล้วให้แสดงผล html ประมาณนี้
<html>
<head>
<script language="javascript">
var uData = [
["name","ชื่อ-นามสกุลที่ได้จากการ query"],
["bdate", "วันเดือนปีเกิดที่ได้จากการ query"],
["occup", "อาชีพที่ได้จากการ query"],
["address", "บ้านเลขที่ที่ได้จากการ query"],
["sDist", "ตำบลที่ได้จากการ query"],
["dist", "อำเภอที่ได้จากการ query"],
["prov", "จังหวัดที่ได้จากการ query"],
["zip", "รหัสไปรษณีย์ที่ได้จากการ query"]
];
</script>
</head>
<body onload="if(window.parent&&parent.display){parent.display(uData);}">
</body>
</html>
โค๊ดทั้งหมดยังไม่ได้ทดสอบนะครับ ลองนำเอาไปดูหลักการทำงานดูครับ
Thu 29 Dec 2005 01:33:39
คือว่าผมมีหน้าสำหรับทำการบันทึกแล้วนะคับ ช่วยอธิบายส่วนนี้หน่อยนะครับ
ไม่ค่อยเข้าใจนะครับ
<script language="javascript">
function getObj(id){
return (document.all)?document.all[id]:document.getElementById(id);
}
function loadData(obj){
var theform = obj.form;
if( document.layers && document.layers['datadiv'].load ) {
document.layers['datadiv'].load('checkdata.asp?pid='+ theform.pid.value,0);
} else if( window.frames && window.frames.length ) {
window.frames['dataframe'].window.location.replace('checkdata.asp?pid='+ theform.pid.value);
}
}
function display(data){
for(i = 0; data[i]; i++){
getObj(data[i][0]).value = data[i][1];
}
}
</script>
****************กับ***
<div style="position:absolute;left:0px;top:0px;visibility:hidden;" id="datadiv">
<iframe src="about:blank" height="100" width="100" name="dataframe">iframe>
div>
function display() เป็นการนำเอาข้อมูลที่ได้รับซึ่งเป็นตัวแปร array มาทำการวนลูปเพื่อแสดงผลครับ โดยโครงสร้างของ array นั้นจะเป็นตัวแปร uData ที่ได้อยู่ในไฟล์ checkdata.asp นั่นล่ะครับ เมื่อ page checkdata.asp ทำการ load จะเกิด event onload ซึ่งได้ทำการตั่งให้เรียกใช้งาน function display() ซึ่งอยู่ใน parent window ทำงานครับโดย parameter ที่ส่งให้ก็คือข้อมูลนั่นเองครับ
ส่วน <div> และ <iframe> นั้นสร้างเพื่อให้ทำการ handle ข้อมูลที่จะโหลดเข้ามาครับ โดยมีการเรียกใช้งานจากฟังก์ชั่น loadData() ครับ
ส่วน getObj() นั้นเป็นฟังก์ชั่นในการอ้างอิงถึง object ต่างใน window นั้นๆครับ
Mon 2 Jan 2006 18:35:20
ช่วยดู query ให้ผมหน่อยนะครับ
sql = "Select Tblperson.IdentityCard,Tblperson.Name,Tblperson.BrithDay,Tblperson.working,Tblperson.Tel,TblAddressPerson.HomeID,TblAddressPerson.Moo,TblAddressPerson.Tambon,TblAddressPerson.city,TblAddressPerson.provid,TblAddressPerson.zipcode,TblCar.TypeCar from Tblperson,TblAddressPerson,TblCar"& _
" where (Tblperson.IdentityCard=TblAddressPerson.IdentityCard "& _
"AND TblAddressPerson.IdentityCard=TblCar.IdentityCard)"&_
"AND TblAddressPerson.IdentityCard='"&Request.QueryString("ID")&"'"
แต่ผมลองเพิ่มไปอีกตารางหนึ่งนะครับตาม code ข้างล่างนี้นะครับ
sql = "Select Tblperson.IdentityCard,Tblperson.Name,Tblperson.BrithDay,Tblperson.working,Tblperson.Tel,TblAddressPerson.HomeID,TblAddressPerson.Moo,TblAddressPerson.Tambon,TblAddressPerson.city,TblAddressPerson.provid,TblAddressPerson.zipcode,TblCar.TypeCar,TblDrivingLicense.DrivingLicenseID from Tblperson,TblAddressPerson,TblCar,TblDrivingLicense"& _
" where (Tblperson.IdentityCard=TblAddressPerson.IdentityCard "& _
"AND TblAddressPerson.IdentityCard=TblCar.IdentityCard")&_
"AND TblAddressPerson.IdentityCard='"&Request.QueryString("ID")&"'"
คือผมลองแล้วโดยแต่ละตารางจะมี IdendityCard เปน คีย์หลักมันเกิด Error ถ้าหากว่าเราจะเพิ่มเป็น 4 หรือ 5 ตารางจะพอมีวิธีหรือป่าวครับ
ผมได้ optimize query command ให้แล้วนะครับ พยายามใช้การ join ดีกว่าครับจะเร็วกว่า และพยายามใช้ casting เพื่อจะได้ให้คำสั่งสั้นลง อ่านง่ายครับ
ส่วนที่ทำไมคำสั่งของคุณ error นั้นเนื่องจากคุณไม่ได้ทำการปิดวงเล็บของ WHERE clause ครับ
Tue 3 Jan 2006 10:33:25
ผมเพิ่มมาอีกตารางหนึ่งนะครับคือตาราง TblDrivingLicense
sql = "SELECT p.IdentityCard, p.Name, p.BrithDay, p.working, p.Tel, a.HomeID, a.Moo, a.Tambon, a.city, a.provid, a.zipcode, c.TypeCar ,d.DrivingLicenseID"&_
"FROM Tblperson p INNER JOIN TblAddressPerson a ON p.IdentityCard=a.IdentityCard INNER JOIN TblCar c ON c.IdentityCard=a.IdentityCard "&_
"INNER JOIN TblDrivingLicense d ON d.IdentityCard=c.IdentityCard "&_
"WHERE a.IdentityCard='" & Request.QueryString("ID") & "'"
แล้วมันฟ้อง Error ว่า
Error Type:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Line 1: Incorrect syntax near 'p'.
พอมีวิธีแก้ไขหรือป่าครับ
Tue 3 Jan 2006 16:25:10
ต่อจาก #3
Tblperson
-IdentityCard
-Name
-Birthday
TblAddressperson
-IdentityCard
-Moo
-Tamboon
-city
-provid
-zipcode
-TblDrivingLicense(ใบขับขี่)
-IdentityCard
-DrivingLicenseID
-DatePermision (วันอนุญาต)
-EndDate (วันหมดอายุ)
TblCar
-IdentityCard
-TypeCar
-Carcolor
-LabelID
คือตอนนี้ผมบันทึ่ลงในแต่ละตารางโดยให้คำสั่ง Inser into แล้วเวลาที่ผมจะนำมันออกมาแสดงคือเวลาที่ผมป้อน IdentityCard ลงใน TextField จะให้ข้อมูลต่างๆ แสดงใน TextField ที่ผมได้กำหนดไว้แล้ว จะต้องทำยังไร ผมลองตัวอย่างที่ #3 แล้วไม่รู้เรื่อง และไม่เข้าใจช่วยอีกรอบนะครับ งานใกล้จะส่งแล้วด้วยครับ ขอความกรุณาด้วยนะครับ ขอบคุณมากครับ
ส่วนถ้าต้องการใช้ Javascript จริงๆแล้วลองแบบนี้นะครับ
ไฟล์แรกหน้าที่กรอก IdentityCard
<script language="javascript">
function getObj(id){
return (document.all)?document.all[id]:document.getElementById(id);
}
function setData(field, data){
getObj(field).value = data;
}
function check(id){
getObj("loadFrm").location.href='checkid.asp?id='+id;
}
</script>
<ifram id="loadFrm" style="display:none"></iframe>
<form action="..." menthod="post">
Identity Card : <input type="text" name="id"><input type="button" value="Check" onclick="check(this.value)">
<br><br>
<input type="text" name="name" id="name"><br>
<input type="text" name="bdate" id="bdate"><br>
.....
<input type="text" name="labelid" id="labelid"><br>
</form>
อธิบายนะครับ หน้านี้มีเพื่อให้กรอกข้อมูล Identity Card เมื่อกดปุ่ม check แล้วจะแสดงผลออกมาครับ โดยชื่อของ field ที่แสดงผลก็ตั้งให้ตรงกับ field ข้อมูลเลยครับจะได้ทำการ map ได้ง่ายๆ
ไฟล์ที่สอง checkid.asp จะได้รับ parameter จาก querystring มาเพื่อทำการ query จากคำสั่งข้างบนนั้นก็ได้ครับ
<script language="javascript">
<%
//establish connection
//query
while(!rs.EOF)
response.write('parent.setData("name", "' & rs("Name") & '")
response.write('parent.setData("bdate", "' & rs("Birthday") & '")
....
response.write('parent.setData("labelid", "' & rs(LabelID") & '")
loop
//terminate connection
%>
</script>
เมื่อไฟล์ checkid.asp นั้นถูกโหลดเข้ามาจะมีการเขียน javascript ลงไปโดยจะทำการเรียกทำคำสั่งซึ่งอยู่ใน parent window ซึ่งมีคำสั่ง setData โดยส่ง parameter เป็นชื่อ field ที่ต้องการเซ็ทและค่าที่ต้องการส่งไปครับ
ไม่ทราบว่าจะเข้าใจหรือเปล่านะครับ ลองเอาไป debug ดูนะครับโค๊ดยังไม่ได้ทดสอบครับ ไม่เข้าใจอย่างไรถามมาอีกทีนะครับ
Tue 3 Jan 2006 18:05:26
ผมไม่เข้าใจในส่วน checkid.asp ทำไมใน แท็กของ js ถึงมี<%.....%>
ส่วนที่ connect ของผมนะครับ
Set Conn=Server.Createobject("ADODB.Connection")
conn.Open "Provider=sqloledb;" & _
"Data Source=(local);" & _
"Initial Catalog=TeafficDB;" & _
"User Id=sa;" & _
"Password=bit69"
ส่วน query
sql = "SELECT p.Name, p.BrithDay, c.TypeCar"&_
" FROM Tblperson p INNER JOIN TblCar c ON p.IdentityCard=c.IdentityCard "&_
" WHERE a.IdentityCard='" & Request.QueryString("ID") & "'"
ช่วยลองแทรกให้ผมหน่อยจะได้หรือป่าวครับ
ขอบคุณครับ
ผมไม่เก่ง vb ครับลืมไปแล้วว่าเขียน query data ยังไง
ทั้งหมดก็เหมือนกับการนำข้อมูลจาก database มาแสดงผลในส่วนของภาษา html นั่นล่ะครับ แต่ในที่นี้เรานำมาใช้ในส่วนของ javascript (มองให้เป็น text ครับ ไม่ต้องสนใจว่าจะภาษาอะไร เนื่องจาก web browser นั้นเพียงแต่อ่านข้อมูล text แล้วนำมาแปลเท่านั้นครับ)
ลองดูนะครับ
Wed 4 Jan 2006 17:53:33
<body onload="if(window.parent&&parent.display){parent.display(uData);}">
<p>
<script language="javascript">
<%
//establish connection
Set Conn=Server.Createobject("ADODB.Connection")
conn.Open "Provider=sqloledb;" & _
"Data Source=(local);" & _
"Initial Catalog=TeafficDB;" & _
"User Id=sa;" & _
"Password=bit69"
//query
Sql="Select * from Tblperson"
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open sql,Conn,1,3
while(!rs.EOF)
response.write('parent.setData("name", "' & rs("Name") & '")
response.write('parent.setData("bdate", "' & rs("Birthday") & '")
response.write('parent.setData("labelid", "' & rs("working") & '")
rs.MoveNext
Loop
rs.Close
%>
</script>
</p>
</body>
มัน Error ครับมันบอกว่า
Error Type:
Microsoft VBScript compilation (0x800A03EA)
Syntax error
/TrafficProject/test11.asp, line 31, column 6
while(!rs.EOF)
-----^
ช่วยดูให้หน่อยนะครับ
ขอบคุณครับ
while not rs.EOF
loop
ขอโทษทีครับ ไม่ถนัด vb จริงๆ
Thu 5 Jan 2006 14:54:47
อีกนิดนะครับ
คือว่า จาว่า จะติดต่อกับฐานข้อมูล SQL Server 2000 อย่างไรครับ พอจะอธิบายได้หรือป่าวครับ
public Test() throws Exception {
// Get connection
DriverManager.registerDriver(new
com.microsoft.jdbc.sqlserver.SQLServerDriver());
Connection connection = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://comp1:1433","","");
if (connection != null) {
System.out.println();
System.out.println("Successfully connected");
System.out.println();
// Meta data
DatabaseMetaData meta = connection.getMetaData();
System.out.println("\nDriver Information");
System.out.println("Driver Name: "
+ meta.getDriverName());
System.out.println("Driver Version: "
+ meta.getDriverVersion());
System.out.println("\nDatabase Information ");
System.out.println("Database Name: "
+ meta.getDatabaseProductName());
System.out.println("Database Version: "+
meta.getDatabaseProductVersion());
}
}
public static void main (String args[]) throws Exception {
Test test = new Test();
}
}
อย่าลืม import="java.sql.*" ด้วยนะครับ
Thu 5 Jan 2006 16:26:18
ขอบคุณมากเลยครับ
Thu 5 Jan 2006 17:25:18
อีกทีนะครับ กับปัญหาที่แก้ยังไม่ได้ซักทียากมากเลยครับ
test10.asp
<script language="javascript">
function getObj(id){
return (document.all)?document.all(id):document.getElementById(id);
}
function setData(field, data){
getObj(field).value = data;
}
function check(id){
//getObj("loadFrm").location.href='test11.asp?id='+id;
document.getElementById('loadFrm').src = 'test11.asp?id='+id;
}
</script>
<iframe id="loadFrm" style="display:none"></iframe>
<form action="test11.asp" menthod="post">
Identity Card : <input type="text" name="id"><input type="button" value="Check" onclick="check(this.value);">
<br><br>
<input type="text" name="name" id="Name"><br>
<input type="text" name="bdate" id="Birthday"><br>
<input type="text" name="labelid" id="working"><br>
</form>
************test11.asp***********
อันนี้ยังไม่ได้ติดต่อฐานข้อมูลครับแต่มันก็ใช้ได้นะครับ
<script language="javascript">
<%
//establish connection
'Set Conn=Server.Createobject("ADODB.Connection")
' conn.Open "Provider=sqloledb;" & _
' "Data Source=(local);" & _
' "Initial Catalog=TeafficDB;" & _
' "User Id=sa;" & _
' "Password=bit69"
//query
' Sql="Select * from Tblperson"
' Set rs=Server.CreateObject("ADODB.Recordset")
' rs.open sql,Conn,1,3
'while(!rs.EOF)
' response.write('parent.setData("name", "' & rs("Name") & '")
' response.write('parent.setData("bdate", "' & rs("Birthday") & '")
' response.write('parent.setData("labelid", "' & rs("working") & '")
'rs.MoveNext
' Loop
' rs.Close
%>
parent.document.getElementById('name').value = "test name";
parent.document.getElementById('bdate').value = "1/4/2006";
parent.document.getElementById('labelid').value = "12131313";
</script>
**************test11.asp*******
ส่วนหน้านี้ผมลองติดต่อฐานข้อมูลนะครับ
<script language="javascript">
<%
Set Conn=Server.Createobject("ADODB.Connection")
conn.Open "Provider=sqloledb;" & _
"Data Source=(local);" & _
"Initial Catalog=TeafficDB;" & _
"User Id=sa;" & _
"Password=bit69"
Set rs=Server.CreateObject("ADODB.Recordset")
Sql="Select * from Tblperson"
rs.open sql,Conn,1,3
If Not rs.EOF Then
Do While Not rs.EOF
%>
parent.document.getElementById('name').value = "<%=rs("Name")%>";
parent.document.getElementById('bdate').value = "<%=rs("Birthday")%>";
parent.document.getElementById('labelid').value = "<%=rs("working")%>";
<%
rs.movenext
Loop
End If
rs.close
%>
</script>
มันฟ้อง Error ว่า
Error Type:
ADODB.Recordset (0x800A0CC1)
Item cannot be found in the collection corresponding to the requested name or ordinal.
/TrafficProject/test11.asp, line 32
ช่วยผมอีกซักรอบนะครับ ไม่รู้จะแก้ไขยังงัยครับ ถามมาหลายที่ก็ไม่มีใครได้ครับ
ผมไม่รู้จะไปพึงใครอีกแล้วครับ นะครับ
ขอบคุณมากครับ
ซึ่งที่นี่เขาได้อธิบายไว้หลายแบบเลยครับ
ถ้าอย่างไรลองทำการ query ออกมาแสดงผลให้ได้ก่อนก็ได้ครับ แล้วจึงนำมาใส่ใน javascript จะได้ไม่งงครับ
Thu 5 Jan 2006 23:51:59
test10 กับ test11 ตอนนี้ได้แล้วนะครับ แต่ติดตรงที่มันจะแสดงข้อมูลตรงเรคคอร์ดสุดท้ายตลอดเลยครับมันไม่ยอมแสดงตาม รหัส ที่เราได้ป้อนไปนะครับ พอจะมีวิธีแก้หรือป่าวครับ
test10.asp
<script language="javascript">
function getObj(id){
return (document.all)?document.all(id):document.getElementById(id);
}
function setData(field, data){
getObj(field).value = data;
}
function check(id){
//getObj("loadFrm").location.href='test11.asp?id='+id;
document.getElementById('loadFrm').src = 'test11.asp?id='+id;
}
</script>
<iframe id="loadFrm" style="display:none"></iframe>
<form action="test11.asp" menthod="post">
Identity Card : <input type="text" name="id"><input type="button" value="Check" onclick="check(this.value);">
<br><br>
<input type="text" name="name" id="Name"><br>
<input type="text" name="bdate" id="Birthday"><br>
<input type="text" name="labelid" id="working"><br>
</form>
*************test11.asp**********
<script language="javascript">
<%
Set Conn=Server.Createobject("ADODB.Connection")
conn.Open "Provider=sqloledb;" & _
"Data Source=(local);" & _
"Initial Catalog=TeafficDB;" & _
"User Id=sa;" & _
"Password=bit69"
sql = "Select * From Tblperson "
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open sql,Conn,1,3
If Not rs.EOF Then
Do While Not rs.EOF
%>
parent.document.getElementById('name').value = "<%=rs("IdentityCard")%>";
parent.document.getElementById('bdate').value = "<%=rs("Name")%>";
parent.document.getElementById('labelid').value = "<%=rs("BrithDay")%>";
<%
rs.MoveNext
Loop
rs.Close
Set rs=Nothing
End If
%>
</script>
"SELECT * FROM Tblperson WHERE IdentityCard='" & request.querystring("id") & "'"
ผมดึงข้อมูลที่ส่งมากับ querystring ที่มีการส่งมาจาก parent window นำมาเป็น condition นะครับ
ลองดูนะครับ
Fri 6 Jan 2006 17:16:38
คือผมลองแล้วนะครับไม่เห็นมีอะไรแสดงขึ้นมาเลยผมลอง query ข้างนอกแล้วนะครับมันก็สามารถทำได้นะครับ แต่พอนำมาใส่ใน จาว่า แล้วทำไมไม่มีอะไรแสดงขึ้นมาเลยครับแต่ถ้าหากว่าเราเลือกทั้งหมดมันจะแสดงนะครับ Select * From Tblperson ผมไม่แน่ใจว่ามันจะส่ง id มายัง test11 หรือป่าวนะครับ ช่วยดูให้ผมหน่อยนะครับ ผมทดสอบไม่เปนะครับ
<script language="javascript">
alert("ค่าของตัวแปร id=<% response.write(request.querystring("id") %>");
</script>
ประมาณนี้ล่ะครับ เมื่อมีการเรียกใช้ไฟล์ test11.asp จะมี alert ขึ้นมาครับว่ามีการส่ง paremeter มาด้วยหรือเปล่าครับ
Sat 7 Jan 2006 11:46:07
ผมลองนำไปใส่ที่ test11 แล้วนะครับ ไม่มีอะไรเกิดขึ้นเลยครับ แสดงว่ามันไม่ส่งค่ามาใช่หรือป่าวครับ ถ้าใช่ แล้วผมจะต้องทำยังงัยครับถ้ามันส่งค่า id จาก test10 มายัง test11 ครับ
ไม่ทราบว่าทดลองใน browser ใดครับ เพราะเท่าที่ดูโค๊ดเห็นว่าใช้ document.getElementById ซึ่งเท่าที่ผมทดลองดูกับ IE มันได้ผลนะครับ
Sat 7 Jan 2006 12:50:14
ใช้ IE ครับ แต่ถ้าหากว่าผมลองเอา =<% response.write(request.querystring("id") %>"); ออกนะครับเหลือแต่ alert("ค่าของตัวแปร id) มันก็แสดง Messagebox ออกมานะครับ แต่ถ้าใส่ =<% response.write(request.querystring("id") %>"); กลับไม่มี Messagebox แสดงออกมาให้เลยครับ
Sat 7 Jan 2006 13:01:32
มี mail หรือป่าวครับ ผมจะลองส่ง test10 กับ test11 ให้ดูจะดีหรือป่าวคับ
Sat 7 Jan 2006 13:38:15
ตอนนี้ผมพอแก้ไขได้แล้วครับ โดยใช้ VBScript SouceCode ประมาณนี้ครับ
<%@LANGUAGE="VBSCRIPT" CODEPAGE="874"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<title>test Product</title>
<script language="javascript">
<!--
var Arrperson = new Array();
function LoadData() {
// Start Load Data
<%
Set Conn=Server.Createobject("ADODB.Connection")
conn.Open "Provider=sqloledb;" & _
"Data Source=(local);" & _
"Initial Catalog=TeafficDB;" & _
"User Id=sa;" & _
"Password=bit69"
Set rs=Server.CreateObject("ADODB.Recordset")
sql = "SELECT * FROM Tblperson"
rs.open sql, conn, 1, 3
iCount=-1
While Not rs.EOF
iCount=iCount+1
response.write "Arrperson["& iCount & "] = new Array(" & vbcrlf
response.write rs("IdentityCard")& "," & chr(34) & rs("Name")& chr(34)
response.write ","& chr(34) & rs("Tel") & chr(34)
response.write ","& chr(34) & rs("working") & chr(34)
response.write vbcrlf &");"& vbcrlf
rs.MoveNext
Wend
rs.Close
Set rs=Nothing
conn.Close
Set conn=Nothing
%>
}
function SelProdName(){
var ProCode=document.Frmperson.IdentityCard.value;
if(ProCode !=""){
for(var i=0; i <= Arrperson.length;i++){
if(ProCode==Arrperson[i][0]){
document.Frmperson.Name.value=Arrperson[i][1];
document.Frmperson.Birthday.value=Arrperson[i][2];
document.Frmperson.working.value=Arrperson[i][3];
}
}
}
}
//-->
</script>
</head>
<body onLoad="LoadData();">
<form name="Frmperson">
<p>
<input type="text" name="IdentityCard" >
<input name="Name" type="text" size="50">
<input name="Birthday" type="text" id="Birthday">
<input name="working" type="text" id="working">
<br>
<input type="button" name="Button" value="Check" onClick="SelProdName();">
</p>
</form>
</body>
</html>
------แต่มีปัญหาอีกแล้วครับ คือเวลาที่ผมใส่รหัสที่มีอยู่ในฐานข้อมูล ๆ ก็จะแสดงออกมาทาง TextField นะครับ แต่ถ้าป้อนรหัส แล้วไม่มีในฐานข้อมูล ข้อมูลต่างๆ ที่ค้นเจอในครั้งแรกมันจะค้างอยู่ใน TextField นะครับ คือผมอยากจะ Clear ค่าใน TextField เวลาที่ค้นหารหัสประชาชนแล้วไม่เจอนะครับ แล้วก็ให้แสดง Messagebox บอกด้วยว่าไม่มี แล้วให้เลือกว่าจะเลือกเพิ่มข้อมูลหรือไม่ถ้าต้องการเพิ่มให้เปลี่ยนหน้าไปยัง test13 นะครับ ไม่ทราบว่าพอจะเข้าใจหรือป่าวคับ ช่วยผมอีกทีนะครับ---
if(obj.value == ""){
if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
document.location.href = 'test13.asp';
}
}
ประมาณนี้ครับ โดย obj.value คือการดึงค่ามาจาก object ใดๆครับ
Sat 7 Jan 2006 21:47:08
ผมลองแทรกเข้าไปแล้วหลายที่แล้วหรือสร้างฟังก์ชันขึ้นมาใหม่ แต่ไม่ยอมได้เลยครับ รบกวนช่วยแทรกให้ผมเป็นตัวอย่างหน่อยจะได้หรือไม่ครับ
Sat 7 Jan 2006 22:06:31
รบกวนต่อคำถามอีกหน่อยนะครับ คือเวลาที่ผม <body onLoad="LoadData();">
ผมไม่สามารที่จะ INNER JOIN ได้นะครับ เพราะผมต้องการดึงข้อมูลมาจากหลายตารางนะครับ พอจะมีวิธีหรือป่าวครับ
var ProCode=document.Frmperson.IdentityCard.value;
if(ProCode !=""){
var i = 0
for(i=0; i <= Arrperson.length;i++){
if(ProCode==Arrperson[i][0]){
document.Frmperson.Name.value=Arrperson[i][1];
document.Frmperson.Birthday.value=Arrperson[i][2];
document.Frmperson.working.value=Arrperson[i][3];
}
}
if(i == Arrperson.length){
//ไม่พบข้อมูล
if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
document.location.href = 'test13.asp';
}
}
}
}
ลองดูตามนี้นะครับ
ส่วนการ INNER JOIN นั้นอยู่ในส่วนของ server-side นี่ครับไม่เกี่ยวกับ javascript ครับ ซึ่งคงต้องลอง debug ด้วยการตรวจสอบข้อมูล javascript ที่ asp ทำการแสดงผลออกมาดูครับ
Sun 8 Jan 2006 15:18:19
ยังไม่ได้นะครับแต่ถ้าเราเช็คว่ายังไม่ได้กรอกข้อมูลใน textfield นะสามารถทำได้ครับ
function SelProdName(obj){
var ProCode=document.Frmperson.IdentityCard.value;
if(ProCode !=""){
for(var i=0; i <= Arrperson.length;i++){
if(ProCode==Arrperson[i][0]){
document.Frmperson.Name.value=Arrperson[i][1];
document.Frmperson.Birthday.value=Arrperson[i][2];
document.Frmperson.working.value=Arrperson[i][3];
document.Frmperson.txtTypeCar.value=Arrperson[i][4];
}
}
}
else if(ProCode==""){
alert("ยังไม่ได้ป้อนรหัสประจำประชาชนที่ต้องการตรวจสอบ");
return false;
}
}
แต่ถ้าเช็คว่าไม่มีให้แสดงmessagebox ออกมาไม่สามารถทำได้ครับ
ผมลอง copy เอา code ที่ให้ผมไปวางดูก็ยังไม่ได้ครับ พอจะแก้ไขได้หรือป่าวครับ
var ProCode=document.Frmperson.IdentityCard.value;
if(ProCode !=""){
var passed = false;
for(var i=0; i <= Arrperson.length;i++){
if(ProCode==Arrperson[i][0]){
document.Frmperson.Name.value=Arrperson[i][1];
document.Frmperson.Birthday.value=Arrperson[i][2];
document.Frmperson.working.value=Arrperson[i][3];
passed = true;
}
}
if(!passed){
//ไม่พบข้อมูล
if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
document.location.href = 'test13.asp';
}
}
}
}
งั้นลองแบบนี้ดูนะครับ
Mon 9 Jan 2006 22:41:54
ยังไม่ได้เลยครับ เวลาที่ป้อนรหัสแล้วหาไม่เจอ ก็ไม่มี Messagebox ออกมาเลยครับ แต่ถ้าหากว่าผมลองเลื่อน คำสั่ง if ขึ้นไปอีกหน่อยก็สามารถทำได้แบบที่ว่า พอป้อนรหัสที่อยู่อันดับแรกของฐานข้อมูล เช่น อันดับที่ 1,2,3 ก็สามารถทำได้นะครับ ผมป้อนค่า 1 ใน textbox ก็สามารถค้นหาได้นะครับ แต่พอป้อน 2 เข้าไปจะแจ้งมาเลยว่าไม่พอข้อมูล แล้วคลิกที่ cancle ก็จะมี Messaagebox ออกมาอีกรอบหนึ่งพอคลิกที่ Cancle อีกที ข้อมูลจะแสดงใน Textbox แล้วก็จะมี Messagebox แสดงออกมาอีกทีแล้วผมก็คลิกที่ Cancle อีกที Messageboxถึงจะหายไปนะครับ คือแบบว่า Messagebox จะวนไปเรื่อยๆ ตามจำนวนของข้อมูลที่มีอยู่ในฐานข้อมูลนะครับ ซึ่งไม่มีวิธีอื่นแล้วหรือครับ ที่สามารถบอกได้ว่าเวลาที่ค้นหารหัสตัวนั้นไม่เจอนะครับ
ตัวอย่างที่ผมบอกนะครับ
function SelProdName(){
var ProCode=document.Frmperson.IdentityCard.value;
if(ProCode !=""){
var passed = false;
for(var i=0; i <= Arrperson.length;i++){
if(ProCode==Arrperson[i][0]){
document.Frmperson.Name.value=Arrperson[i][1];
document.Frmperson.Birthday.value=Arrperson[i][2];
document.Frmperson.working.value=Arrperson[i][3];
passed = true;
}
if(!passed){
//ไม่พบข้อมูล
if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
document.location.href = 'test13.asp';
}
}
}
}
}
ผมลอเอา Souce Code ทั้งหน้ามาให้ดูนะครับเผื่อว่าจะได้ทำการทดลองแก้ไขได้สะดวกกว่านี้นะครับ แต่ต้องรบกวนสร้างฐานข้อมูลขึ้นมาเองนิดหน่อยนะครับ
<%@LANGUAGE="VBSCRIPT" CODEPAGE="874"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<title>test Product</title>
</head>
<body onLoad="LoadData();">
<form name="Frmperson">
<p>
<input type="text" name="IdentityCard" >
<input name="Name" type="text" size="50">
<input name="Birthday" type="text" id="Birthday">
<input name="working" type="text" id="working">
<br>
<input name="txtTypeCar" type="text" id="txtTypeCar">
<br>
<input type="button" name="Button" value="Check" onClick="SelProdName(); ">
</p>
</form>
<script language="javascript">
<!--
var Arrperson = new Array();
function LoadData() {
// Start Load Data
<%
Set Conn=Server.Createobject("ADODB.Connection")
conn.Open "Provider=sqloledb;" & _
"Data Source=(local);" & _
"Initial Catalog=TeafficDB;" & _
"User Id=sa;" & _
"Password=bit69"
Set rs=Server.CreateObject("ADODB.Recordset")
//sql = "SELECT p.IdentityCard, p.Tel, a.provid"&_
//" FROM Tblperson p INNER JOIN TblAddressPerson a ON p.IdentityCard=a.IdentityCard "&_
//" WHERE a.IdentityCard='" & Request.QueryString("ID") & "'"
sql = "Select p.IdentityCard,p.Name,p.Tel,a.provid ,c.TypeCar FROM Tblperson p "&_
"INNER JOIN TblAddressPerson a ON p.IdentityCard=a.IdentityCard INNER JOIN TblCar c ON a.IdentityCard=c.IdentityCard"
//" where Tblperson.IdentityCard=TblAddressPerson.IdentityCard "&_
//"AND TblAddressPerson.IdentityCard=TblCar.IdentityCard)"&_
//"AND TblAddressPerson.IdentityCard='"&Request.QueryString("ID")&"'"
//sql = "SELECT * FROM Tblperson"
rs.open sql, conn, 1, 3
//if rs.EOF then
//response.write("string")
//else
iCount=-1
While Not rs.EOF
iCount=iCount+1
response.write "Arrperson["& iCount & "] = new Array(" & vbcrlf
response.write rs("IdentityCard")& "," & chr(34) & rs("Name")& chr(34)
response.write ","& chr(34) & rs("Tel") & chr(34)
response.write ","& chr(34) & rs("provid") & chr(34)
response.write ","& chr(34) & rs("TypeCar") & chr(34)
response.write vbcrlf &");"& vbcrlf
rs.MoveNext
Wend
rs.Close
Set rs=Nothing
conn.Close
Set conn=Nothing
//end if
%>
//if(obj.value==""){
//if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
// document.location.href = 'test13.asp';
//}
}
/*
function SelProdName(obj){
var ProCode=document.Frmperson.IdentityCard.value;
if(ProCode !=""){
for(var i=0; i <= Arrperson.length;i++){
if(ProCode==Arrperson[i][0]){
document.Frmperson.Name.value=Arrperson[i][1];
document.Frmperson.Birthday.value=Arrperson[i][2];
document.Frmperson.working.value=Arrperson[i][3];
document.Frmperson.txtTypeCar.value=Arrperson[i][4];
}
}
}
else if(ProCode==""){
alert("ยังไม่ได้ป้อนรหัสประจำประชาชนที่ต้องการตรวจสอบ");
return false;
}
}
*/
function SelProdName(){
var ProCode=document.Frmperson.IdentityCard.value;
if(ProCode !=""){
var passed = false;
for(var i=0; i <= Arrperson.length;i++){
if(ProCode==Arrperson[i][0]){
document.Frmperson.Name.value=Arrperson[i][1];
document.Frmperson.Birthday.value=Arrperson[i][2];
document.Frmperson.working.value=Arrperson[i][3];
passed = true;
}
if(!passed){
//ไม่พบข้อมูล
if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
document.location.href = 'test13.asp';
}
}
}
}
}
//-->
</script>
</body>
</html>
ขอรบกวนอีกรอบนะครับ
Wed 11 Jan 2006 13:29:36
รบกวนได้ หรือไม่ได้ยังงัย บอกผมหน่อยนะครับ
ขอบคุณมากครับ
<%@LANGUAGE="VBSCRIPT" CODEPAGE="874"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<title>test Product</title>
</head>
<body onLoad="LoadData();">
<form name="Frmperson">
<p>
<input type="text" name="IdentityCard" >
<input name="Name" type="text" size="50">
<input name="Birthday" type="text" id="Birthday">
<input name="working" type="text" id="working">
<br>
<input name="txtTypeCar" type="text" id="txtTypeCar">
<br>
<input type="button" name="Button" value="Check" onClick="SelProdName(this); ">
</p>
</form>
<script language="javascript">
<!--
var Arrperson = new Array();
function LoadData() {
// Start Load Data
<%
Set Conn=Server.Createobject("ADODB.Connection")
conn.Open "Provider=sqloledb;" & _
"Data Source=(local);" & _
"Initial Catalog=TeafficDB;" & _
"User Id=sa;" & _
"Password=bit69"
Set rs=Server.CreateObject("ADODB.Recordset")
//sql = "SELECT p.IdentityCard, p.Tel, a.provid"&_
//" FROM Tblperson p INNER JOIN TblAddressPerson a ON p.IdentityCard=a.IdentityCard "&_
//" WHERE a.IdentityCard='" & Request.QueryString("ID") & "'"
sql = "Select p.IdentityCard,p.Name,p.Tel,a.provid ,c.TypeCar FROM Tblperson p "&_
"INNER JOIN TblAddressPerson a ON p.IdentityCard=a.IdentityCard INNER JOIN TblCar c ON a.IdentityCard=c.IdentityCard"
//" where Tblperson.IdentityCard=TblAddressPerson.IdentityCard "&_
//"AND TblAddressPerson.IdentityCard=TblCar.IdentityCard)"&_
//"AND TblAddressPerson.IdentityCard='"&Request.QueryString("ID")&"'"
//sql = "SELECT * FROM Tblperson"
rs.open sql, conn, 1, 3
//if rs.EOF then
//response.write("string")
//else
iCount=-1
While Not rs.EOF
iCount=iCount+1
response.write "Arrperson["& iCount & "] = new Array(" & vbcrlf
response.write rs("IdentityCard")& "," & chr(34) & rs("Name")& chr(34)
response.write ","& chr(34) & rs("Tel") & chr(34)
response.write ","& chr(34) & rs("provid") & chr(34)
response.write ","& chr(34) & rs("TypeCar") & chr(34)
response.write vbcrlf &");"& vbcrlf
rs.MoveNext
Wend
rs.Close
Set rs=Nothing
conn.Close
Set conn=Nothing
//end if
%>
//if(obj.value==""){
//if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
// document.location.href = 'test13.asp';
//}
}
var theform = obj.form;
if(theform.IdentityCard.value !="" ){
var passed = false;
for(i=0; i < Arrperson.length; i++){
if(theform.IdentityCard.value == Arrperson[i][0]){
theform.Name.value=Arrperson[i][1];
theform.Birthday.value=Arrperson[i][2];
theform.working.value=Arrperson[i][3];
passed = true;
}
}
if(!passed){
//ไม่พบข้อมูล
if(confirm("ไม่พบข้อมูล\nท่านต้องการเพิ่มข้อมูลหรือไม่?")){
document.location.href = 'test13.asp';
}
}
}else{
alert("โปรดใส่ข้อมูลเพื่อค้นหา");
}
}
//-->
</script>
</body>
</html>
ส่วนแรกผมได้เปลี่ยนการอ้างถึง object ต่างๆภายใน document เปลี่ยนเป็นอ้างจาก object form เพื่อให้อ้างได้ง่ายขึ้นและใช้ code น้อยลง โดยส่งค่า object ที่อยู่ภายใน form นั้นมาด้วย (จากปุ่ม Button) เพื่อใช้ในการอ้างแบบ relative
ส่วนของ loop for ที่ของเดิมมีการ เปรียบเทียบ condition "i <= Arrperson.length" ซึ่งจะทำให้เกิด error : index out of range ครับเนื่องจาก Array จะมี index ตั้งแต่ 0 ถึง length - 1 ที่ถูกต้องควรเขียนเป็น "i < Arrperson.length"
และส่วนที่ใช้เช็กว่ามีค่าหรือไม่นั้นต้องให้อยู่นอก loop for ครับไม่เช่นนั้นจะเกิดปัญหาว่าทุกครั้งที่วน loop จะมี dialog ถามเรื่อยๆจนกว่าจะออกจาก loop ครับ ที่ตอนแรกใช้ไม่ได้เนื่องจากเกิด error ขึ้นก่อนในส่วนของ index out of range จึงให้ทั้งหมดไม่ทำงานครับ
Wed 11 Jan 2006 20:26:00
.....................ขอบคุณมากเลยนะครับ .......................
Tue 24 Jan 2006 11:39:43
อยากทราบว่าการออกรายงานโดย asp สามารถทำได้มั้ยคะ โดยให้ออกรายงานออกมาเป็น word น่ะค่ะ ถ้ามีช่วยบอกด้วยนะคะ ขอบคุณค่ะ
Thu 30 Mar 2006 11:35:41
ผมเจอปัญหาคล้ายกันครับ คือต้องการสร้างปุ่ม submit ปุ่ม ที่มีการส่งค่าไปคนละหน้า คือที่ผมทำมันแค่ไปหน้าที่ต้องการแต่ไม่มีการส่งค่าไปด้วย ช่วยตอบทีครับ
<form action="test.asp" method="post">
<input type="text" name="text">
<input type="submit" value="Submit to test.asp">
<input type="submit" value="Submit to another.asp" onclick="this.form.action='another.asp';">
</form>
ประมาณนี้ครับ

















