Logo

רד-בורד: ארכיון

ראשי > בניית אתרים > בעיה בASP

2004-06-21 19:05 CooLoR
אממ... אז ככה.. אני עושה לחבר שלי מין דף של הרשמה - שלאחר שנרשמים, זה מוסיף את היוזר אוטומטית למסד נתונים... וככה יש לו גישה לאזור המוגן...

משהו שאמור להיות מאוד פשוט.. ועשיתי המון פעמים בעבר... אבל משום מה אני מקבל בעיה עם המסד נתונים עכשיו..

ניסיתי 2 קודים בשביל זה:

set c=server.createobject("adodb.connection")
c.open "PROVIDER=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=" &Server.MapPath (".") & "\db.mdb"
set SQL = Server.CreateObject("ADODB.RecordSet")
SQL.Open "SELECT * from members",c,1,3
SQL.AddNew
SQL("member") = ""&request("member")&""
SQL("pass") = ""&request("pass")&""
SQL.Update

כשאני עושה את זה.. אני מקבל שגיאה כזאת:

Error Type:
Microsoft JET Database Engine (0x80040E09)
Cannot update. Database or object is read-only.
/avi/signup.asp, line 31

Line 31 = SQL.Addnew
-----------------------------------------------------------------------------------

set c=server.createobject("adodb.connection")
c.open "PROVIDER=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=" &Server.MapPath (".") & "\db.mdb"
c.execute "insert into members(member,pass) values('"&request("member")&"','"&request("pass")&"')"

כשאני עושה את זה.. אני מקבל שגיאה כזאת:

Error Type:
Microsoft JET Database Engine (0x80004005)
Operation must use an updateable query.
/avi/signup.asp, line 29

Line 29 = the line with the execute


מישהו יודע איך לפתור את הבעיה? :)

תודה...
2004-06-21 23:21 Echo
אוי זה בעייה ידועה קרה לי אותה יותר מידי פעמים
מה שקורה זה שאין תאימות מלאה בין הדרייברים של ADODB ל access עצמו מה שגורם לבעיות
מה שאתה צריך לעשות זה ליצור את המסד נתונים כולו בערת SQL
איך עושים כזה דבר?
אז ככה אתה יוצר מה שנרא DSN- Data Surce Name ודרכו אתה יוצר את המסד נתונים
אז אתה משתמש ב SQL כדי ליצור את הטבלאות
איך עושים את זה????
נתחיל ביצירת המסד נתונים עצמו
אתה נכנס ללוח בקרה->Administrative Tools
שמה אתה נכנס ל Data Sources (ODBC)
בגרסאות מסוימות ה Data Sources יהיה ישר בתוך הלוח בקרה ולא בתוך ה Administrative Tools
בכרטיסיה User DSN אתה לוחץ add
שמה אתה בוחר Microsoft Access Driver (ולא שום דבר אחר) ולוחץ Finish
בתיבת טקסט העליונה אתה נותן סתם שם אבל עדיף שזה יהיה כזה שתזכור
אחר כך אתה לוחץ על Create... ושמה בוחר תיקיה ושם למסד הנתונים החדש
מהכל אתה יוצא באישור

עכשיו כדי ליצור טבלאות אתה משתמש בפקודה של SQL שיוצרת טבלאות Create.
בשביל להשתמש בפקודה הזאת אתה צריך ליצור דף ASP שיגדיר חיבור ויבצע עליו SQL
מבנה הפקודה Create הוא כזה

Create Table name (field1name field1type, field2name field2type, field3name field3type)

כאשר במקום name אתה רושם את שם הטבלה הרצוי
בשמות השדות אתה נותן את השמות הרצויים לפי סדר ההופעה
הסוגים זה החלק הבעיתי
הסוגים הבסיסים הם CHAR למחרוזת, INTEGER למספר, MEMO- מחרוזת ארוכה מאד (1000 תוים), Counter- מספור אוטומטי

אז פקודה כזאת צריכה להראות כך

CREATE TABLE Users (ID COUNTER, Name CHAR, TimesEnter INTEGER, Descriptiom MEMO)

עכשיו נגיד יש משתנה SQL שהוא מחרוזת עם הפקודה הזאת ואובייקט connection בשם c שמקושר למסד נתונים הזה שיצרת קודם ולא פתחת בחיים אז הפקודה תראה ככה
c.Execute SQL

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

בהצלחה
2004-06-22 13:23 CooLoR
תודה אחי... =)

רק שאלה קטנה...
אין אפשרות לתקן את הACCESS או את החיבור ביניהם או משהו ?
שאני אוכל לעבוד בצורה רגילה...

ואם אני עושה את זה עם ACCESS והכל.. ולא מצליח לראות את זה על המחשב שלי... (מקבל את אותה הבעיה) ומעלה את זה לאינטרנט... זה יעבוד ?
2004-06-22 23:14 Echo
לתקן את Access????- תמבקש מביל גייטס
ואם הבעייה היא רק על המחשב שלך אז יכל ליהיות שבאינטרנט זה יעבוד אבל בגלל שרוב השרתים הם שרתי IIS או מבוססי IIS אז סביר להניח שזה לא יעבוד
עדיף תעשה כמו שאמרתי לך
זה מעצבן אני יודע אבל מה לעשות?????
2004-06-24 17:53 CooLoR
תודה אחי..
ניסיתי לעשות את מה שאמרת... אבל שוב יש בעיה:

זה מה שרשמתי בקובץ
tables.asp
אחרי שעשיתי מסד נתונים כמו שאמרת:

<%
SQL = "Create Table members (member CHAR, pass CHAR)"
set c = Server.CreateObject("ADODB.Connection")
c.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mapPath("avidb2.mdb") & ";"
c.execute SQL
%>


כשאני פותח את הקובץ אני מקבל שגיאה כזאת:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E09)
[Microsoft][ODBC Microsoft Access Driver] Cannot modify the design of table 'members'. It is in a read-only database.
/avi/tables.asp, line 5


LINE 5 = c.execute SQL

שוב כל הקטע הזה עם ה
Database is read only.


יש לך מושג אולי מה הבעיה? :(


תודה...
2004-06-25 16:30 Echo
עשית מסד נתונים חדש כמו שכתבתי למעלה???
יכל ליהיות זאת הבעייה
אם יצרת אחד כזה אז תבדוק שאתה עובד עליו ולא על המסד נתונים הישן
בהצלחה
2004-06-28 16:45 CooLoR
עשיתי הכל בדיוק כמו שאמרת..
גם את המסד נתונים דרך הODBC וגם את היצירת טבלאות עם בקוד SQL...

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

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

אז מישהו אולי יודע איך עושים מסדי נתונים בקובץ txt? :\
או אולי מישהו יכול לנסות ליצור בשבילי מסד נתונים ולבדוק אם אצלו זה עובד ? -> אם כן דברו איתי באיציק (149436542) או מסנג'ר (coolor3@hotmail.com)


תודה...
2004-06-28 20:16 Admin
יכול להיות שהבעייה היא שאתה מנסה להתחבר למסד הנתונים באמצעות הדרייברים הלא נכונים.
נסה להשתמש בקוד הבא:
c.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb") & ";"
להזכירך זה הקוד בו השתמשת:
c.open "PROVIDER=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=" &Server.MapPath (".") & "\db.mdb"
2004-06-29 19:19 CooLoR
טוב... זה הדבר הכי מטומטם שקרה לי בחיים אני חושב..

הבעיה הייתה שבתיקייה inetpub לא הייתה הרשאה מלאה לIIS.

למה כשהעלתי לאינטרנט חשבתי שזה עדיין לא עובד ?
זה כי עשיתי ב
response.redirect
עמוד שבעצם לא קיים וקיבלתי הודעת שגיאה..
אבל בעקרון המסד נתונים באינטרנט כן התעדכן.

אז את השבוע הזה שבזבזתי יכולתי לפתור בעזרת הפעולה הבאה:

להכנס לתיקייה inetpub
מקש ימני וproperties
לבחור למעלה security
ללחוץ על Users
ושם לעשות allow לwrite או למה שרוצים...
עדיף full allow.

:|
2004-06-29 22:41 Echo
זה הכל??????????...
טוב לפחות הסתדרת

בהצלחה
עמודים: 1