517
צפיות
צפיות
26
תשובות
תשובות
צריך עזרה בנושא מסדי נתונים – קובץ
חיבור.
עכשיו, יש לי את הקוד הבא:
<%
Set Con = Server.CreateObject( "ADODB.Connection" )
Con.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ='../database/database.mdb'"
%>
והוא של קובץ חיבור למסד הנתונים שלי, ביצעתי אינקלוד לקובץ ההרשמה שלי ומופיע לי שגיאה (עשיתי בקובץ ההרשמה שאילתת Insert):
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0xd9c Thread 0xba0 DBC 0x22f3c44 Jet'.
/sources/includes/conn.asp, line 3
מה יכולה להיות הבעיה?
אשמח אם תעזרו לי, דוד.
26 תשובות
הוא לא מוצא את המסד…
בפעם הבאה ישר קודים והודעות שגיאה לשמאל (ליד הסמל של הסמיילים)
OK,
רגע…
אם נגיד יש בתוך התקיה sources את התקיה includes ואת התקיה database
ואני רוצה לגשת מהקובץ חיבור שנמצא בincludes למסד שנמצא בתקיה database אני עושה ככה:
../database/db.mdb
?
תשתמש ב-Server.MapPath
כי שורת החיבור מצפה לקבל כתובת אבסולוטית למסד שלך (כתובת מה-HD שבו הוא נמצא – c:folder\file.mdb)
בקשר לשאלתך השנייה אז התשובה היא לא.
כיוון שבאינקלוד התוכן של הקובץ מוכנס לתוך קובץ אחר ואז מרונדר.
במקרה הזה עליך לעשות את הדבר הזה:
DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/database/database.mdb")&";"
בהנחה שהתיקייה DataBase היא נמצאת בתוך התיקייה הראשית של האתר.
היא נמצאת בתת התקיה הראשית שהיא:
sources..
אני אנסה מה שאמרת, תודה.
שגיאה חדשה.
הנה השגיאה החדשה:
Microsoft VBScript compilation error '800a0408'
Invalid character
/sources/includes/conn.asp, line 3
DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("database/database.mdb")&";"
——-^
הרעיון היה שתחליף את החלק
שאתה כתבת במה שנאי כתבתי (לא את הכל רק את החלק שמתייחס לזה (זורת החיבור)
אני יודע… זה מה שעשיתי..
ד"א
רצוי להשתמש ב ולא ב DRIVER…
יכול להיות שאם אני אשתמש בJET זה
יעבוד לי?
יופי 🙂 עובד לי… אבל יש לי שגיאה
חדשה….
הנה השגיאה החדשה:
Microsoft VBScript runtime error '800a01a8'
Object required: 'conn'
/sources/register.asp, line 19
הנה הסקריפט שלי:
<!– #include file="includes/conn.asp" –>
<%
user = Request.Form("username")
pass = Request.Form("password")
email = Request.Form("email")
adress = Request.Form("siteadd")
description = Request.Form("description")
banner = Request.Form("banner")
SQLstr="INSERT INTO users (username,password,email,siteaddress,banner)"
SQLstr= SQLstr & " VALUES ('" & user & "','"
SQLstr= SQLstr & pass & "','"
SQLstr= SQLstr & email & "','"
SQLstr= SQLstr & adress & "','"
SQLstr= SQLstr & banner & "','"
SQLstr= SQLstr & description & "')"
conn.Execute SQLstr
conn.Close
Set conn = Nothing
%>
(מתחתיו יש ת'טופס..)
תודה לעוזרים.
עידכון של הקוד והשגיאה.
קוד:
<!– #include file="includes/conn.asp" –>
<%
user = Request.Form("username")
pass = Request.Form("password")
email = Request.Form("email")
adress = Request.Form("siteadd")
description = Request.Form("description")
banner = Request.Form("banner")
SQLstr="INSERT INTO users (username,password,email,siteaddress,banner)"
SQLstr= SQLstr & " VALUES ('" & user & "','"
SQLstr= SQLstr & pass & "','"
SQLstr= SQLstr & email & "','"
SQLstr= SQLstr & adress & "','"
SQLstr= SQLstr & banner & "','"
SQLstr= SQLstr & description & "')"
objconn.Execute SQLstr
objconn.Close
Set objconn = Nothing
%>
שגיאה:
Microsoft JET Database Engine error '80040e14'
Syntax error in INSERT INTO statement.
/sources/register.asp, line 19
ושוב, תודה לעוזרים.
password זו מילה שמורה
או שתקיף אותה בכל שאילתא עם [] או שתחליף את השם של השדה בשם אחר.
ב SQL יש מילים שמורות
בהן אתה לא יכול להשתמש בתור שמות לעמודות, .
אם אתה בכל זאת רוצה להשתמש במילים האילו, אתה צריך להקיף את שם השדה בסוגריים מרובעים:
SQLstr="INSERT INTO users ([username],[password],[email],[siteaddress],[banner])"
SQLstr= SQLstr & " VALUES ('" & user & "','"
SQLstr= SQLstr & pass & "','"
SQLstr= SQLstr & email & "','"
SQLstr= SQLstr & adress & "','"
SQLstr= SQLstr & banner & "','"
SQLstr= SQLstr & description & "')"
עוד שגיאה… חדשה..
Number of query values and destination fields are not the same.
האם אתה יכול לעשות מאמץ
ולפתוי בבילון ולהתחיל לקרוא את השגיאה ?
כי השגיאות של SQL הם יחסית ידידותיות מהשגיאות של ASP ותודה לאל הם אומרות בדיוק מה שצריך.
השגיאה אומרת שאין התאמה בין מס' השדות שכתבת ומס' הערכים שאתה מכניס.
זהו ש….
היבנתי, אבל הבעיה, שיש בדיוק אותו מס'…
ספרת לא נכון.
סוריי טעות שלי..
סקריפט:
Microsoft JET Database Engine error '80040e14'
The INSERT INTO statement contains the following unknown field name: "username". Make sure you have typed the name correctly, and try the operation again.
/sources/register.asp, line 19
שגיאה:
Microsoft JET Database Engine error '80040e14'
The INSERT INTO statement contains the following unknown field name: "username". Make sure you have typed the name correctly, and try the operation again.
/sources/register.asp, line 19
ואני אומר מעכשיו, בדקתי 10000 פעם וכל הנתונים תואמים.
טעות בקוד:
מצטער שאני משגע אתכם :S
<!– #include file="includes/conn.asp" –>
<%
user = Request.Form("username")
pass = Request.Form("password")
email = Request.Form("email")
adress = Request.Form("siteadd")
description = Request.Form("description")
banner = Request.Form("banner")
SQLstr="INSERT INTO users (['username'],['password'],[’email'],['siteaddress'],['banner'],['description'])"
SQLstr= SQLstr & " VALUES ('" & user & "','"
SQLstr= SQLstr & pass & "','"
SQLstr= SQLstr & email & "','"
SQLstr= SQLstr & adress & "','"
SQLstr= SQLstr & banner & "','"
SQLstr= SQLstr & description & "')"
objconn.Execute SQLstr
objconn.Close
Set objconn = Nothing
%>
שמות העמודות לא צריכות להיות מוקפות
בגרש…
[username]
ולא
['username']
סבבה, תודה.
עובד, אפשר לשאול עוד שאלה?
יש לי תנאים בJS, עכשיו, משום מה רק התנאי על username והתנאי על email עובד… הנה הסקריפט:
function check()
{
var err;
err="השגיאות שלך הן:";
if (document.reg.username.value=="")
{
err=err+ "n לא הזנת שם משתמש";
}
if (document.reg.password.value=="")
{
err=err+ "n לא הזנת ססמא";
}
if (document.reg.email.value!=document.reg.email2.value)
{
err=err+ "n האימיילים אינם תואמים";
}
if (document.reg.password.value!=document.reg.password2.value)
{
err=err+ "n הססמאות אינן תואמות";
}
if (document.reg.email.value=="" || document.reg.email.value.indexof('@')==-1)
{
err=err+ "n לא הזנת כתובת דואר אלקטרוני או כתובת לא תקינה";
}
if (document.reg.siteadd.value=="")
{
err=err+ "n לא הזנת את כתובת האתר";
}
if (document.reg.banner.value=="")
{
err=err+ "n לא העלת באנר";
}
if (document.reg.description.value=="")
{
err=err+ "n לא הזנת תיאור";
}
if (document.reg.username.value!="" && document.reg.description.value!="" && document.reg.siteadd.value!="" && document.reg.email.value!="" && document.reg.password.value!="" && document.reg.password2.value!="" && document.reg.email2.value!="" && document.reg.banner.value!="")
{
err="";
}
if (err!="")
{
alert(err);
return false;
}
else
{
return true;
}
}
תודה לעוזרים.
הקפצה 🙂
הקפצה..
אז ככה:
בלי להכנס עכשיו לכמה הדרך הזו מסורבלת ולא יעילה כדי לבדוק טפסים,
אני רוצה להבין קודם כל על איזה תנאים שלא עובדים אתה מדבר, כי יש שם מספר תנאים על eMail, לדוגמא.
דבר שני, מה הכוונה בלא עובדים? התנאי מתבצע תמיד? התנאי אפפעם לא מתבצע? הדפדפן מודיע על שגיאה? המחשב קופץ מהחלון?
תציג את השאלה שלך כמו שצריך, עם הקוד הרלוונטי בלבד (גם השם של הטופס וגם השמות של תיבות הקלט רלוונטיים כאן, ד"א)…
בנוסף, תרשה לי לתת לך טיפ קטן – תלמד להשתמש ביכולות של השפה.
תבנה לך פונקציה שמקבלת מחרוזת ובודקת האם היא ריקה, ובהתאם לזה מחזירה true או false. זה יחסוך לך קצת קוד. תבנה לך פונקציה שמשווה בין שתי מחרוזות, על אותו עקרון.
תלמד מאפיינים קצת יותר מתקדמים של השפה, כמו regExp (יש מדריך למתחילים ב regExp באתר, במאמרים של מדור js)