שלח תשובה

זירת השאלות

605
צפיות
49
תשובות

נתונים לא נכנסים לבסיס הנתונים

,‏ 13 בפברואר, 2004

אני שולח נתונים מדף אחד לדף אחר שקולט את הנתונים אבל אני מקבל הודעה שגיאה, מה זה יכול להיות?

הקוד:


<%@ Language=VBScript %>
<% Response.Buffer=true %>
<%Response.Expires=-1%>
<%
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb") & ";"
%>

<html>

<body>

<%
Username = request.form("Username")
Password = request.form("Password")
FirstName = request.form("FirstName")

Function fixStr(str)
If str <> "" Then fixStr = replace(replace(str,"’","'"),"`","'")
End Function

Function fixStrVal(str)
If str <> "" Then fixStrVal = replace(str,"’","´")
End Function

Function fixSpace(str)
If str <> "" Then fixSpace = Replace(Replace(str," ","%20"),"’","'")
End Function

CheckSQL "select * from membersTBL where FirstName=’" & fixStr(FirstName) & "’ and Username=’" & Username & "’" — line 32
set rs = server.CreateObject("ADODB.RecordSet")
rs.Open CheckSQL,DSN,3,1
If rs.EOF Then
rs.close
set rs = Nothing
%>
<b>allready there</b><br><br>
<%
set cn = server.CreateObject("ADODB.Connection")
cn.Open DSN

Else
rs.open "select max(id) as max_idnum from membersTBL"
dim idnum
idnum=rs("max_idnum")+1

SQL "insert into tstTBL values(CONVERT (INTEGER, ‘" & idnum & "’),’" & fixStr(FirstName) & "’"
cn.Execute SQL
%>
<b>good luck</b><br>
<%
End If
%>
</body>
</html>


זו ההודעת שגיאה:


Microsoft VBScript runtime error ‘800a000d’

Type mismatch: ‘CheckSQL’

/jobnik/members_handler.asp, line 32


תודה מהפפר

תגיות:

49 תשובות

  1. mynameispepper הגיב:

    קוד CSS פשוט שלא עובד
    אני רוצה לצבוע את גבולות התיבה אבל זה לא עובד לי, הנה הקוד:


    <html>

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
    <style type="text/css">
    .dd
    {
    BORDER-TOP-WIDTH: 11px;
    BORDER-LEFT-WIDTH: 11px;
    BORDER-LEFT-COLOR: #ff6600;
    BORDER-BOTTOM-WIDTH: 11px;
    BORDER-BOTTOM-COLOR: #ff6600;
    BORDER-TOP-COLOR: #ff6600;
    BORDER-RIGHT-WIDTH: 11px;
    BORDER-RIGHT-COLOR: #ff6600;
    }
    </style>
    </head>

    <body>

    <br><br><br>

    <center>
    <form name="details" action="dfas.asp">
    <select class="dd" Name="year">
    <OPTION Value=NO>1941</OPTION>
    <OPTION Value=YES>1942</OPTION>
    <OPTION Value=YES>1943</OPTION>
    </select>
    </FORM>
    </center>
    </body>
    </html>

    מה פיספסתי?

  2. אוריקס הגיב:

    עד כמה שאני יודע
    התכונה Border ב Select Option לא נתמכת טוב ב IE, נסה להגדיר Background ותראה שזה אכן פועל.

  3. אוריקס הגיב:

    תראה,
    אם מגדירים backgroung זה עובד, אם מגדירים border זה לא עובד, כנראה ש IE לא תומך בתכונה. נסה להציג את הדף במוזילה, בד"כ הם תומכים ב Css בצורה הטובה ביותר.

  4. לא ניתן לשנות עיצוב של option
    מלבד צבע הרקע וצבע הפונט

  5. mrmistory הגיב:

    אולי בגלל…
    שרשמת


    Username = request.form("Username")
    Password = request.form("Password")
    FirstName = request.form("FirstName")

    ובגלל שלא רשמת החרזות


    dim Username ,Password ,FirstName

    כי השגיאה אומרת שחסריפ נתונים בשאילתא.
    תנסה גם להדפיס את השאילתא כדי לראות האם משתנים לא רייקים.

  6. ניר טייב הגיב:

    יכול להיות
    שהנתונים נשלחו בשיטה get ויכול להיות שנכנסת ישר לדף ולכן המשתנים ריקים

  7. זהר פלד הגיב:

    חסר לך אופרטור השמה…
    שורה 32 היא:

    CheckSQL "select * from membersTBL where FirstName=’" & fixStr(FirstName) & "’ and Username=’" & Username & "’"

    כשבעצם היא אמורה להיות:

    CheckSQL ="select * from membersTBL where FirstName=’" & fixStr(FirstName) & "’ and Username=’" & Username & "’"

  8. mynameispepper הגיב:

    תודה זהר, אבל עכשיו זה נותן הודעה
    אחרת שאני לא מבין.

    הנה הקוד:

    <%
    Username = request.form("Username")
    Password = request.form("Password")
    FirstName = request.form("FirstName")

    Function fixStr(str)
    If str <> "" Then fixStr = replace(replace(str,"’","'"),"`","'")
    End Function

    Function fixStrVal(str)
    If str <> "" Then fixStrVal = replace(str,"’","´")
    End Function

    Function fixSpace(str)
    If str <> "" Then fixSpace = Replace(Replace(str," ","%20"),"’","'")
    End Function

    CheckSQL = "select * from tstTBL where FirstName=’" & fixStr(FirstName) & "’ and Username=’" & Username & "’"
    set rs = server.CreateObject("ADODB.RecordSet")

    rs.Open CheckSQL,DSN,3,1
    If rs.EOF Then
    rs.close

    rs.open "select max(id) as max_idnum from membersTBL"
    dim idnum
    idnum=rs("max_idnum")+1

    set cn = server.CreateObject("ADODB.Connection")
    cn.Open DSN

    SQL "insert into tstTBL values(CONVERT (INTEGER, ‘" & idnum & "’),’" & fixStr(FirstName) & "’" ——– line 46
    cn.Execute SQL
    %>
    Thanks
    <%
    Else
    rs.close
    set rs = Nothing
    %>
    <b>allready there</b><br><br>
    <%
    End If
    %>

    זו ההודעה שגיאה:


    Microsoft VBScript runtime error ‘800a000d’

    Type mismatch: ‘SQL’

    תודה

  9. זהר פלד הגיב:

    אותה הודעת שגיאה על אותה טעות…
    רק השורה השתנתה…

  10. mynameispepper הגיב:

    זה עובד עכשיו, תודה. אפשר משהו…
    כללי?

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

    רציתי לדעת כמה דברים:
    האם זה בסדר שאני משתמש בפונקציות האלו להחלפת הגרש והגרשיים בהכנסה.

    האם הצורה שאני מבקש את ה ID הגבוה ביותר ומוסיף לו 1 ואז מכניס לבסיס הנתונים נכונה.

    האם אפשר לקצר את הקוד או לעשות אותו מהיר או יעיל יותר?

    תודה רבה על העזרה.

  11. זהר פלד הגיב:

    אממ…
    לגבי שימוש בפונקציות שמחליפות את הגרש והמרכאות, זה אכן נכון, אבל אני היתי שם אותן בקובץ נפרד, וקורא לו (ב include, לדוגמא) בכל דף שצריך להשתמש בהן.

    לגבי הצורה שבה אתה מבקש את ה id, לא הבנתי למה לא להשתמש פשוט במספור אוטומאטי… תוכל לשלוף את ה id האחרון שהוכנס ללא חדש, הפירוט כאן.

    לייעל את הקוד תמיד אפשר – לדוגמא, לתרגם אותו ל js…
    גם לא הבנתי למה אתה שולף את כל השדות בטבלה, בחלק הזה:

    CheckSQL = "select * from tstTBL where FirstName=’" & fixStr(FirstName) & "’ and Username=’" & Username & "’"
    set rs = server.CreateObject("ADODB.RecordSet")

    rs.Open CheckSQL,DSN,3,1
    If rs.EOF Then
    rs.close

  12. mynameispepper הגיב:

    אז ככה…
    העברתי את הפונקציות לדף INCLUDE, תודה.

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

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

  13. mynameispepper הגיב:

    בעיית סימני שאלה עם עברית…
    יש לי את ה
    <%@ language="VBscript" codePage="1255" %>
    בכל עמוד אבל העברית עדיין מופיעה לי כסימני שאלה.

    אני עובד עם ACCESS 2000.

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

    תודה מהפפר

  14. mynameispepper הגיב:

    בעייה עם הזנת תאריך ל ACCESS
    יש לי 3 תיבות סלקט: יום, חודש ותאריך.
    המשתמש בוחר את התאריך המבוקש ולוחץ "שלח".

    אני מקבל הודעת שגיאה בהכנסה של התאריך, הנה הקוד:


    BirthdayDay = request.form("BirthdayDay")
    BirthdayMonth = request.form("BirthdayMonth")
    BirthdayYear = request.form("BirthdayYear")
    BirthdayDate = BirthdayDay & "/" & BirthdayMonth & "/" & BirthdayYear

    SQL = "INSERT INTO membersTBL (BirthdayDate) VALUES(‘" & BirthdayDate & "’)" —— line 60

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


    [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.

    /jobnik/members_handler.asp, line 60

    כמובן שאני גם משנה את הסדר של התאריך. אני רוצה שזה ייכנס כ DD/MM/YYY
    מה הבעייה בקוד?

    תודה

  15. תאריכים באקסס עוטפים ב=#
    ומכניסים בפורמט mm/dd/yyyy

  16. mynameispepper הגיב:

    תמיד?
    ואיך אני יכול לשלוף אותם כמו שאני רוצה? זה אפשרי?

  17. mynameispepper הגיב:

    שאלה לגבי כפתורי רדיו
    למשתמש יש אפשרות להזין את פרטיו וכמו כן גם לערוך אותם.

    הבעייה היא בטופש העריכה.
    יש לי טופס שיש בו 3 כפתורי רדיו (כן, לא, בטיפול).
    כפתורי הרדיו הם עשויים מ HTML נטו.

    אני רוצה שבדץ העריכה, הערך של כפתור הרדיו שהמשתמש בחר קודם לכן יופיע כמסומן.
    אני חושב שאולי (רק אלי) אפשר לעשות את זה בג’אווה סקריפט, אבל אולי אני טועה. אני לא בטוח?

    יש למישהו רעיון?

    תודה מהפפר

  18. omer הגיב:

    אממ
    זה אפשרי גם ב HTML בצורה הבאה:
    הקוד הזה אמור להיות לאחר ההתחברות למסד הנתונים כמובן ובמקום הרצוי שברצונך שיהיה הכפתור רדיו


    <input type=radio name=something value=1 <%if rs("fieldname") = 1 then response.write "checked"%>>

    <input type=radio name=something value=2 <%if rs("fieldname") = 2 then response.write "checked"%>>

    <input type=radio name=something value=3 <%if rs("fieldname") = 3 then response.write "checked"%>>

    כמובן שיש להוסיף גרשיים בהתאם לסוג השדה.

    בהצלחה,
    עומר

  19. mynameispepper הגיב:

    mmm…
    Is it better that way or should I try to get the JavaScript solution?

    Thanks

  20. omer הגיב:

    hmm
    I dont know the JavaScript solution, so I cant tell you.

  21. ניר טייב הגיב:

    לדעתי…
    יותר טוב שתשלח ב-queryString את המס’ ואז תעשה בדיקה זה חוסך משאבי שרת לעומת השיטה של עומר. ובקשר לג’אווה סקריפט יש ב-faq של תפוז שיטה לקרוא את ה-queryString דרך הג’אווה-סקריפט אתה מוזמן לחפש!

  22. זהר פלד הגיב:

    אממ…
    לגבי שימוש IDENTITY@@, השיטה הזו חדשה גם לי, ואני לא מכיר מאמרים בנושא, אולי אם תכתוב מה בדיוק לא הבנת נוכל להסביר לך.

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

  23. mynameispepper הגיב:

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

    מצאתי 2 שיטות לכניס את הערכים. אחת בJS ואחת ב VB.

    הנה השיטה ב JS:


    <script language="JavaScript">
    function DataReset()
    {
    document.details.BirthdayDay.value="<%= day(rs("BirthdayDate"))%>"
    }
    </script>

    <body onLoad="DataReset();">

    הנה השיטה ב VB:


    <select Name="BirthdayDay">
    <%
    For BY = 1966 To 1986 ‘BD = BirthdayDay
    BirthdayDateDay = day(BirthdayDate)
    If BirthdayDateDay = BD Then
    BirthdayDateday = "selected "
    Else
    BirthdayDateday = ""
    End If
    response.write "<option " & BirthdayDateday & "value=""" & BD & """>"& BY & "</option>" & vbCrLf
    Next
    %>
    </select>

    הייתי רוצה לדעת איך עדיף לעשות את זה?
    מה יותא יעיל ומה יותר מהיר?

    תודה לכם –
    פפר

  24. mynameispepper הגיב:

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

    איך אני יכול לעשות את זה בעזרת JS?

    תודה

  25. mynameispepper הגיב:

    תודה לך ילדה, רק שאלה אחת קטנה…
    למה אי אפשר לעשות את זה ככה:


    <input type="checkbox" name="animal" value="dog"<%if instr(animal,"dog") then%> checked>

    יענו ללא ה END IF.

    תודה

  26. mynameispepper הגיב:

    אבל זה ידוע שאפשר
    גם בלי ה THEN וה END IF נכון?

שלח תשובה