כמה שאלות של מתחיל

Master Boo

New member
כמה שאלות של מתחיל ../images/Emo4.gif../images/Emo3.gif

<% Set connection=Server.CreateObject("ADODB.Connection") stConnection = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb") connection.open stConnection t = request.form("title") d = request.form("date") i = request.form("info") insertString = "Insert into news values('" & t & "','" & d & "','" & i & "')" connection.execute(insertString) connection.Close Set connection = Nothing %>​
הקוד הנ"ל אמור לקבל נתונים מטוס שנשלח ולהוסיף רשומה במסד הנתונים שלי. כמה שאלות: 1. במסד הנתונים ארבעה שדות- מספור אוטומטי ושלושה שדות טקסט. מה אני עושה בקשר למספור האוטומטי? צריך לשלוח אותו? איך אני מקבל את המספר הבא? הסתבכתי איתו לגמרי
2. כשאני מנסה להריץ את הקוד הנ"ל אני מקבל הודעת שגיאה: סוג שגיאה: Microsoft JET Database Engine (0x80004005) ‏‏על הפעולה להשתמש בשאילתה הניתנת לעדכון. מה בדיוק הודעת השגיאה אומרת? ואני ממש מתחיל בקטע של ASP, אז אם תוכלו להעיר/להאיר לי על דברים שכתבתי שם, אני אשמח
 

asp123

New member
או קיי אז גבר ראשון:

בשאילתה שהראת אתה בעצם רוצה להוסיף ערכים רק שחסר לך משהו
והוא לאיזה עמודה אתה רוצה להוסיף כל ערך:
insertString = "Insert into news("השדה שבו יוכנס t","השדה שבו יוכנס d","השדה שבו יוכנס i") values('" & t & "','" & d & "','" & i & "')"​
זה אחד דבר שני...
<% Set connection=Server.CreateObject("ADODB.Connection") stConnection = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb") connection.open stConnection t = request.form("title") d = request.form("date") i = request.form("info") insertString = "Insert into news values('" & t & "','" & d & "','" & i & "')" connection.execute(insertString) connection.Close Set connection = Nothing %>​
וודא שהתיקיה שבו נמצאת הבסיס נתונים יש לה הרשאות כתיבה בשרת שים את הבסיס בתיקיה שהיא לא תיקיה ראשית כך שלא יוכלו למחוק דברים מסוימים וכו... יענו שים את הבסיס בתיקיה חדשה בשם Db בתוך התיקיה של האתר ואז תתן לה הרשאות כתיבה. עכשיו בשביל לעדכן אתה צריך לדעת איזה שורה אתה רוצה לעדכן עלומר איזה "מספר מטוס" כלומר המיספור האוטומטי בא לעזור ולסדר את העיניינים חוץ מזה שזוהי שאילתה אחרת לגמרי... שאילתת Update אם תרצה אני אשמח לעזור גם בזה.
 

Master Boo

New member
הממ זה כבר באמת יותר הגיוני ../images/Emo3.gif

אבל עדיין לא פועל

insertString = "Insert into news('title','date','info') values('" & t & "','" & d & "','" & i & "')" connection.execute(insertString)​
זה הקוד שלי. המסד לא מוגדר כקובץ לקריאה בלבד. מה יכולה להיות הבעיה? אותה הודעת שגיאה כמו קודם
 

יגאל55555

New member
ככה:

connection.Execute " INSERT INTO news (title, date, info) VALUES ('" & t & "', '" & d & "', '" & i & "')"​
שים לב שאין גרשיים בודדים מסביב לשמות של שדות בטבלה. הבעיה השנייה שיכולה להיות היא שימוש במילה שמורה - DATE. אל תקרא לשדות שלך ב-DB בשמות של מילים שמורות. תשנה את שם השדה ב-DB למשהו כמו news_date, והכל יהיה בסדר. כנ"ל גם לגבי שימוש במילים שמורות לשמות השדות בטופס.
 

Master Boo

New member
זה משגע אותי

אז ככה: בטופס יש לי שלושה שדות: שני שדות טקסט, ואחד איזור טקסט. Ntitle, Ndate, Ninfo. במסד הנתונים השדות נקראים update_title, update_date, update_news, כאשר update_news הוא תזכיר (תומך ביותר תווים?). זה הקוד שלי:
t = request.form("Ntitle") d = request.form("Ndate") i = request.form("Ninfo") insertString = "Insert into news (update_title,update_date,update_info) values ('" & t & "','" & d & "','" & i & "')" connection.execute(insertString)​
למה בכל זאת זה לא פועל?
|מיואש|
 

יגאל55555

New member
כמה דברים:

א' - אין לך רווחים בין פסיקים לבין שמות של שדות ובין פסיקים לבין משתנים. ב' - למה אתה מתעקש לעבוד עם משתנה insertString? תעתיק את השורה הזאת במקום ה-2 שיש לך:
connection.Execute " Insert into news (update_title, update_date, update_info) values ('" & t & "', '" & d & "', '" & i & "')"​
ג' - כאשר אתה מכניס טקסט לתוך השדות בטופס תוודא שאין לך סימנים כמו גרש בודד (') או גרשיים (") בתוך הטקסט. כי אם יש - זה יעשה לך בעיות. תצטרך פשוט לעשות להם REPLACE.
 

Master Boo

New member
הממ

שינתי. עכשיו הקוד נראה כך
<% Set connection=Server.CreateObject("ADODB.Connection") stConnection = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\TestFolder\DB\test.mdb") connection.open stConnection t = request.form("Ntitle") d = request.form("Ndate") i = request.form("Ninfo") connection.Execute " INSERT INTO news (update_title, update_date, update_info) VALUES ('" & t & "', '" & d & "', '" & i & "')" connection.Close Set connection = Nothing %>​
ועדיין לא פועל, עדיין אותה שגיאה. בקשר למה שאמרת עם הREPLACE... כמו שציינתי, בטופס Ninfo הוא textarea, ולא text פשוט. יכול להיות שtextarea מוסיך תווים מסויימים שגורמים למחרוזת להשבר? ואם כן, איך אני מחליף את התווים (צריך את זה גם לירידות שורה אם אני לא טועה, להחליף \n ב<BR>)
רבה
 

יגאל55555

New member
כעיקרון

השגיאה שאתה מקבל (0x80004005) אומרת שאין הרשאות כתיבה לתוך מסד נתונים. תחפש פה ב-FAQ "הרשאות כתיבה" ותפעל לפי ההוראות שם. אחרי שתשנה את ההרשאות זה אמור לעבוד. בקשר לשאלה השניה... אתה יכול לקרוא על החלפת תווים כאן: http://www.webmaster.org.il/showArticle.asp?id=170 וכאן: http://www.webmaster.org.il/showArticle.asp?id=11
 

יגאל55555

New member
אהם, ככה...

את השדה "מספר אוטומטי" תעזוב בשקט, הוא נותן מספר ייחודי לכל רשומה חדשה שאתה מכניס. לגבי הכנסת נתונים - אתה גם צריך לציין איזה נתון הולך לאיזו טבלה. ככה:
connection.Execute " INSERT INTO news (title, date, info) VALUES ('" & t & "', '" & d &"', '" & i &"')"​
מה שרשום בסוגריים הראשונים הם שמות השדות בתוך הטבלה NEWS (הנחתי שיש להם אותו שם כמו לשדות בטופס). שים לב: בסוגריים השניים אתה חייב לשמור על סדר הכנסת הנתונים, כלומר אם השדה הראשון שרשמת בסוגריים הראשונים הוא TITLE ובסוגריים השניים הדבר הראשון הוא נגיד D, אז (בהנחה שהשדה שלך ב-DB גם נקרא TITLE) מה שיוכנס לתוך ה-TITLE יהיה התאריך. הקוד הנ"ל גם אמור לפתור את השאלה מספר 2.
 

זהר פלד

New member
אוי, נו... FAQ FAQ FAQ...

קודם כל, לגבי הודעת השגיאה, הנושא נטחן מעבר לכל פרופורציה בפורום. כנס ל FAQ, וחפש באנגלית must use, או את מספר השגיאה, ותמצא את אותה השגיאה רק באנגלית. עקוב אחרי ההוראות ב FAQ. לגבי יגאל שאמר לך לא להשתמש במשתנה בשביל שורת ה SQL, זו טעות. תמיד עדיף קודם כל לשרשר את כל המשתנים למחרוזת אחת, ורק אח"כ לנסות להריץ את ה SQL. פרטים ב FAQ, "איך לדבג SQL". לגבי מספר אוטומטי - כשמו כן הוא - אתה לא נוגע בו בהכנסת הנתונים וגם לא בעדכון. מבחינתך - זה שדה לקריאה בלבד.
 

Master Boo

New member
../images/Emo163.gif../images/Emo51.gif../images/Emo4.gif

העברתי את ההרשאות למצב מתקדם ופשוט נתתי הרשאת שינוי לכולם, ועכשיו זה פועל טוב
עוד שאלה- בטופס יש לי שדה DATE עם המאפיין disabled. אני לא רוצה שיהיה אפשר לשנות אותו, מפני שאני נותן לו את הערך של התאריך של היום באופן אוטומטי בפונקציית JS. אך כאשר אני קורא את הערך בדף הASP הוא מקבל מחרוזת ריקה. מה הסיבה והתיקון?
 

Master Boo

New member
אוקיי תיקנתי

יצרתי שדה HIDDEN חדש והשתמשתי בערך שבו. ועוד בעיה (
)- הוא מוסיף לי את הרשומות בלי קשר לאלה שמחקתי. ז"א, מחקתי את כל הרשומות שהוספתי, וכשאני מוסיף אחת חדשה הוא מוסיף אותה למספר "7" כאשר אני בעצם רק במספר "4", בגלל כל הרשומות שמחקתי.
 

זהר פלד

New member
אז ככה:

לגבי השאלה הראשונה - שדה בטופס שמוגדר disabled פשוט לא נשלח לשרת. אתה יכול במקומו להשתמש או ב hidden כמו שעשית, או בשדה שמוגדר כ readOnly. לגבי השאלה השניה, ככה זה מספור אוטומאטי באקסס. מבחינתו לא מעניין אותו שמחקת רשומות. המספור לעולם לא יחזור אחורה.
 

Master Boo

New member
../images/Emo12.gif

באמת? ואם אני רוצה להחזיר אחורה? צריך למחוק את השדה ולהגדיר אותו מחדש? אין איזו אפשרות שליטה על המספור האוטומטי? נשמע לי פשוט ממש מוזר וטיפשי
ונשמע לי עדיף להגדיר רק שדה אחד אשר ישמש כשדה לקריאה בלבד, איך אני מגדיר את זה? זה מאפין של INPUT?
 

asp123

New member
שמע באקסס...

מכיוון שזה access אז זה לא הבסיס נתונים הכי מקצועי שיש עדיף שתעבור לmysql ויש כאן מאמרים מצוינים עליו מה שגם הוא חינמי ודיי קל להתקנה יש לך הוראות ושלוש מאמרים עליו כאן במדור מאמרים.
 

זהר פלד

New member
שטויות.

תמצא לי הוכחה אחת ש mySql עובד טוב יותר מאקסס על פלטפורמה של מיקרוסופט, ואז אני אסכים איתך. זה שהוא חינמי לא הופך אותו לטוב יותר, בעיקר לא כשכמעט בכל שרת אחסון של ASP יש לך תמיכה באקסס.
 

asp123

New member
בעעע ../images/Emo5.gif למה אתה קוטל אותי חוצמזה ש

תסכים איתי שMySql קצת יותר מקצועי ועוד משהו לא אמרתי שזה שהוא חינמי הוא טוב יותר לפי מיטב זכרוני... אז זה לא ממש שטויות כל אחד אוהב לעבוד עם מסד שונה לא
אני אוהב לעבוד עם MySql אז הצעתי. ועוד משהו הדבר הראשון בעבודה עם מסד נתונים בasp בכל מדריך asp(כמעט בכל מדריך) מציע את אקסס אני לא צודק
אנשים "לוקחים" אותו כמסד נתונים לעבודה כמו שהזכרת שהיא לא שולחנית... אז הנה הוכחה. |דגש| אני מסרב בתוקף ההתקף שלזה שמה שאמרתי הם שטויות
 

זהר פלד

New member
זה שאתה אוהב לעבוד איתו לא אומר

שהוא יותר טוב. חוצמזה, יש גרסאות של mySql שלא תומכות אפילו בטראנזאקציות, שזה משהו שעד היום לא ברור לי איך מסד נתונים ש "מכבד" את עצמו לא תומך בטראנזאקציות... ונכון שהעבודה של אקסס אמורה להיות שולחנית, אבל עם חיבור נכון וקוד טוב, האקסס יעבוד על מערכות של מיקרוסופט (לא לינוקס, מיקרוסופט) לפחות טוב כמו ה mySql או טוב יותר. הוכחה זה גרף של ביצועים שניתן לבדוק ולכמת, כמו מהירות תגובה, מהירות חיפוש באינדקס וללא אינדקס, יעילות ואופטימיזציה של השליפה, ההכנסה, ועדכון הנתונים... תמיכה טובה בקשרי גומלין ואכיפה טובה שלהם, מהירות עם join וכד'. ככה שעד שתמצא לי הוכחה, אני מחזיק בדעה שלי.
 
למעלה