שלח תשובה

זירת השאלות

26 תשובות

  1. guyhada הגיב:

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

    Microsoft JET Database Engine (0x80040E07)
    Data type mismatch in criteria expression.
    /index.asp, line 27

    הקוד של ההתחברות למסד נתונים:

        Dim sql
      set conn=Server.CreateObject("ADODB.Connection")
      conn.Provider="Microsoft.Jet.OLEDB.4.0"
      conn.Open(Server.Mappath("db/data.mdb"))
      set rs = Server.CreateObject("ADODB.recordset")
      sql="SELECT mikzoa,teacher,haour FROM main WHERE clas='"& clas &"' AND daay=2 ORDER BY haour"
      rs.Open sql, conn

    שורה 27 זאת השורה האחרונה בקוד שהעתקתי לפה…

  2. shlomoch הגיב:

    הגדרת שדות
    כנראה שהשדה daay מוגדר כמספר וכאן אתה קורא לו כמחרוזת – או שתשנה את הגדרת השדה למחרוזת או שתקרא לו כמספר כלומר


    AND daay=" & 2 & " ORDER BY haour"

  3. guyhada הגיב:

    הוא באמת מוגדר כמספר, שיניתי
    לכמו שאתה רשמת בקוד וזה לא פועל…

    הקוד אחרי השינוי:


      Dim sql
      set conn=Server.CreateObject("ADODB.Connection")
      conn.Provider="Microsoft.Jet.OLEDB.4.0"
      conn.Open(Server.Mappath("db/data.mdb"))
      set rs = Server.CreateObject("ADODB.recordset")
      sql="SELECT mikzoa,teacher,haour FROM main WHERE clas='"& clas &"' AND daay='"& weekday(date_value) &"' ORDER BY haour"
      rs.Open sql, conn

  4. shlomoch הגיב:

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

    theday=weekday(date_value)
    sql="SELECT mikzoa,teacher,haour FROM main WHERE clas='"& clas &"' AND daay="& theday &" ORDER BY haour"

  5. guyhada הגיב:

    העתקתי ועדיין לא פועל
    הקוד המעודכן:


      Dim sql
      set conn=Server.CreateObject("ADODB.Connection")
      conn.Provider="Microsoft.Jet.OLEDB.4.0"
      conn.Open(Server.Mappath("db/data.mdb"))
      set rs = Server.CreateObject("ADODB.recordset")
      theday=weekday(date_value)
      sql="SELECT mikzoa,teacher,haour FROM main WHERE clas='"& clas &"' AND daay="& theday &" ORDER BY haour"
      rs.Open sql, conn

  6. guyhada הגיב:

    הנה
    כמו שכתבתי כבר:


    Error Type:
    Microsoft JET Database Engine (0x80040E07)
    Data type mismatch in criteria expression.
    /index.asp, line 28

    רק שעכשיו השורה שיש לה את הבעיה זה 28 כי הוספתי שורה לפי מה שאמרו פה

  7. shlomoch הגיב:

    לצערי הכל נראה לי תקין והגיוני תנסה
    להוסיף את השורה הבאה לפני השורה  rs.Open sql, conn
    ולבטל את יתר הקוד בדף כדי לראות מה מכיל המשתנה SQL

    Response.Write sql

  8. guyhada הגיב:

    בעיה עם כתיבה לקובץ
    כתבתי סקריפט שמוסיף שורה לקובץ, הסקריפט:


    <%@language="vbscript" codepage="1255"  %>
    <%
    Dim FSO, File ,text
    Set FSO = Server.CreateObject("Scripting.FileSystemObject")
    Set File = FSO.OpenTextFile("C:Inetpubwwwrootfilesmessages.txt",8,True,0)
    File.WriteLine "hello"
    File.Close
    Set File = Nothing
    Set FSO = Nothing
    %>

    בהתחלה היו בעיות של הרשאה ותיקנתי אותם ועכשיו זה פועל אבל זה פשוט לא רושם כלום בקובץ… מישהו יודע למה?

    תודה מראש,
    גיא

  9. guyhada הגיב:

    מצטער בטעות שירשרתי את ההודעה, נפטר
    זאת הייתה בעיה קטנה שלא הפעלתי את הקובץ הזה הקוד תקין

  10. guyhada הגיב:

    עשיתי הפלט בתוך ההודעה
    פלט:


    SELECT mikzoa,teacher,haour FROM main WHERE clas='44' AND daay=7 ORDER BY haour

  11. shlomoch הגיב:

    האם השדה haour מוגדר במסד כשדה
    תאריך/שעה – אם כן אז חייב להיות בו ערך מתאים , אסור שהשדה יהיה ריק=("")

  12. guyhada הגיב:

    לא, כמספר
    לא.. haour מוגדר כמספר, הערכים שאמורים להיות בו זה 1,2,3,4 ככה עד 9 או משהו כזה זה האפשרויות

  13. shlomoch הגיב:

    קrtתי את כל השירשור מהתחלה שמתי לב
    שבהודעה השלישית הגדרת את daay כמחרוזת אבל אתה קורא לו כמספר כלומר בלי גרש בודד – או שתגדיר כמחרוזת ותקרא עם גרש או כמספר ותקרא בלי גרש
    אני מקווה שיעבוד…


    'daay as integer
    sql="SELECT mikzoa,teacher,haour FROM main WHERE clas='"& clas &"' AND daay="& theday &" ORDER BY haour"

    "daay as string
    sql="SELECT mikzoa,teacher,haour FROM main WHERE clas='"& clas &"' AND daay='"& theday &"' ORDER BY haour"

  14. guyhada הגיב:

    תודה רבה! הקוד הנכון דומה למה שנתת
    הקוד הנכון:


      sql="SELECT haour,mikzoa,teacher FROM main WHERE clas="& clas &" AND daay="& theday &" ORDER BY haour"

    קראתי גם ל-clas וגם ל-daay כמספר ועכשיו זה פועל. רעיון שלך תודה רבה!

  15. guyhada הגיב:

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


    Dim x,haour
    do until rs.EOF%>
        <tr>
        <%for each x in rs.Fields
        %>
           <td><%Response.Write(x.value)%></td>
        <%next
        rs.MoveNext%>
        </tr>
    <%loop

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

    תודה מראש,

    גיא

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

    לא כל כך ברורה לי השאלה…
    הפונקציה הזו, היא בצד השרת או בצד הלקוח?

  17. guyhada הגיב:

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


    do until rs.EOF%>
        <tr>
        <%for each x in rs.Fields
        %>
           <td><%Response.Write(x.value)%></td>
        <%next
        rs.MoveNext%>
        </tr>
    <%loop

    אני רוצה שבכל שורה אני יפעיל פונקציה לפי הערך הראשון בשורה… יש דרך לעשות את זה?

  18. shlomoch הגיב:

    אכן לא ברור, אבל אם הבנתי נכון אז
    תוסיף תנאי בלולאה שמזהה את השדה לפי השם שלו. נניח ששם השדה הוא fHour
    אז צ"ל משהוא כזה

    Dim x,haour,sTxt
    do until rs.EOF%>
        <tr>
        <%for each x in rs.Fields
        if x.name=fHour then
           sTxt=GoFunction()
        else
           sTxt=x.value
        %>
           <td><%Response.Write(sTxt)%></td>
        <%next
        rs.MoveNext%>
        </tr>
    <%loop

  19. guyhada הגיב:

    הבנת נכון אבל זה עדיין לא פועל,
    או שהשגיאה בקוד שמדפיס או בפונקציה…
    הקוד:


    Dim x,haour,tstart,tend
    do until rs.EOF%>
        <tr>
        <%for each x in rs.Fields
        if x.name=haour then
           tstart=startf(x.value)
           tend=endf(x.value)
        else%>
           <td><%Response.Write(x.value)%></td>
        <%end if
        next%>
           <td><%=tstart%></td>
           <td><%=tend%></td>
        <%rs.MoveNext%>
        </tr>
    <%loop
    rs.close
    conn.close
    %>

    הפונקציות tstart ו- tend (אותה פונקציה רק שינוי ערכים)


    FUNCTION startf(num)
        SELECT CASE num
        CASE "1"
            num = "7:45"
        CASE "2"
            num = "8:35"
        CASE "3"
            num = "9:25"
        CASE "4"
            num = "10:30"
        CASE "5"
            num = "11:20"
        CASE "6"
            num = "12:15"
        CASE "7"
            num = "1:00"
        CASE "8"
            num = "1:50"
        CASE "9"
            num = "2:40"
        END SELECT
        startf = num
    END FUNCTION

    FUNCTION endf(num)
        SELECT CASE num
        CASE "1"
            num = "8:30"
        CASE "2"
            num = "9:20"
        CASE "3"
            num = "10:10"
        CASE "4"
            num = "11:15"
        CASE "5"
            num = "12:05"
        CASE "6"
            num = "12:50"
        CASE "7"
            num = "1:45"
        CASE "8"
            num = "2:30"
        CASE "9"
            num = "3:25"
        END SELECT
        startf = num
    END FUNCTION

    זה פשוט לא מדפיס כלום… יש למישהו לפיתרון?

    תודה מראש

  20. shlomoch הגיב:

    האם רשמת ערך למשתנה haour ?
    בקוד שרשמתי לא הכנסתי את הערך למשתנה כלומר צ"ל


    haour ="fieldName"  ' שם השדה הראשון
    do until rs.EOF%>
        <tr>
        <%for each x in rs.Fields
        if x.name=haour then

  21. guyhada הגיב:

    haour זה הערך, שמתי בגרשיים ועכשיו
    הסקריפט פועל, תודה!!!

  22. guyhada הגיב:

    עוד שאלה, תודה רבה לכל העונים!
    איך אני יכול לשנות את השורה הראשונה בקובץ?
    להוסיף שורה חדשה אני יודע אבל לשנות את שורה מסויימת לא.

    תודה מראש!

  23. shlomoch הגיב:

    עידכון רשומה
    כדי לעדכן רשומה אתה צריך מזהה רשומה – בדוגמא RecId, ב DATA תרשום את שם השדה = ערך חדש, תרשום רק את השדות שאתה רוצה לשנות המשתנה DATA הוא מחרוזת אבל אם אתה רושם מספרים תשים לב לא להכניס אותם לתוך גרש בודד.
    אם לא תרשום מזהה רשומה כלומר לא תכתוב – where ID="& RecId אז כל הרשומות ישתנו ויקבלו את הערכים החדשים (נוח להשתמש בזה אם אתה רוצה לשנות ערך של שדה מסויים בכל הרשומות שיהיה זהה בכולן)
    תשנה את שם הטבלה.

    RecId=1
    With Request
        Data="HebName='"& .Form("text1")&"',EngName='"& .Form("text2")&"',IconName='"& .Form("text3")&"'"
    End With    
    conn.Execute "update Tabname set "& Data &" where ID="& RecId

  24. guyhada הגיב:

    מצטער על ההטעיה התכוונתי לקובץ טקסט
    התכוונתי איך אני משנה את השורה הראשונה בקובץ טקסט ולא במסד נתונים.
    מצטער…

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

    אז ככה:
    אתה צריך קודם כל לשלוף את התוכן של הקובץ בעזרת FSO למחרוזת, ואז על המחרוזת הזו אתה עושה את ההחלפה, ובסוף אתה מחזיר את המחרוזת לקובץ, שוב בעזרת FSO.

שלח תשובה