שלח תשובה

זירת השאלות

573
צפיות
29
תשובות

מעבר ל-sql server

,‏ 21 ביוני, 2004

שלום לכולם!
עד היום עבדתי במסד נתונים מסוג access נוצר מצב בלתי אפשרי של מע' עם מעל ל-6000 רשומות של לקוחות אשר צריך לבצע עליהם חיפושים לפי קריטריונים (גיל,איך הגיעו למע' ועוד)
הדו"ח מופק לאט מאוד ולכן הוא נגדע באמצע כי נגמר זמן הסיישן עם השרת
השאלות הן:
1. האם זה ניתן לפתרון במסגרת מסד נתונים access/
2. האם מעבר לsql server יפתור את הבעייה.
3.מה זה מצריך ממני בתור מתכנת והאם זה מסובך או לא???
תודה

תגיות:

29 תשובות

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

    1. ניתן לפיתרון
    אם המערכת שבנית לא יעילה זה מן הסתם אשמתך (או אשמת מי שבנה) ולא אשמת האקסס. כי האקסס יכול להכיל הרבה יותר נתונים במערכת יעילה.(ראה את הפורום של איציק1 (האתר נסגר)(אבל נפתח בשם setup.co.il)). כמו כן בדוק שאתה סוגר חיבורים בזמן (אם אתה עובד עם ASP ולא מול המסד) וכדומה

    2. אם המערכת יעילה ועדיין היא איטית אז SQL SERVER אמור לפתור את הבעיה

    3. זה מצריך ממך ללמוד TSQL

  2. Deviation הגיב:

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

    3. מסובך זה משהו אינדיוידואלי

    והערה קטנה לסיום, Access יכול לעמוד בהרבה יותר מ 6000 רשומות, פשוט צריך לתכנת נכון

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

    צור אינדקסים על השדות שאתה מחפש
    לפיהם.

  4. פחן הגיב:

    מה ז"א ליצור אינדיקסים???
    תוכל לפרט.

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

    אם אתה לא יודע מה זה אינדקסים
    רצוי מאוד שעדיין לא תעבור ל-MSSQL.

    אינדקסים:
    http://www.databasejournal.com/features/mssql/article.php/1443581
    (יש בתחתית המאמר עוד קישורים על אינדקסים)

  6. פחן הגיב:

    דרך אגב השגיאה שהוא נותן לי היא:


    Active Server Pages error 'ASP 0113'
    Script timed out

    /customer/settle_email_racaz1.asp

    The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.


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

  7. פחן הגיב:

    אני מעוניין להרחיב את השאלה:
    זאת השאילתה הארוכה על הטבלה הראשית:


    if yesuv<>"" then
    sql=sql & " and yeshuv=" & yesuv
    end if

    if moaza<>"" then
    sql=sql & " and moaza=" & moaza
    end if

    if ech<>"" then
    sql=sql & " and ech=" & ech
    end if

    if came_from<>"" then
    sql=sql & " and id=" & came_from
    end if

    if area<>"" then
    sql=sql & " and area=" & area
    end if

    if niklat<>"" then
    sql=sql & " and niklat=" & niklat
    end if

    if kelet<>"" then
    sql=sql & " and kelet=" & kelet
    end if

    if f_status<>"" then
    sql=sql & " and family_status=" & f_status
    end if

    if children<>"" then
    sql=sql & " and children=" & children
    end if

    if t_age<>"" then
    sql=sql & " and birth_date=" & t_age
    end if

    if interest<>"" then
    s="interest"
    sql=sql & " and (soog='" & s & "' and prefer=" & interest & ")"
    end if

    if ofi<>"" then
    sql=sql & " and (soog='ofi' and prefer=" & ofi & ")"
    end if

    sql=sql & " order by client_id "
    'Response.Write sql & "<br>"
    rs.open sql,conn

    האם יש במה לשפר אותה?

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

    הקוד שלך נמשך יותר מידי זמן
    סימן שהוא עובר את ה-90 שניות שניתנות כברירת מחדל בשרת(אלא אם שינו את ברירת המחדל)
    איך בנוי המס שלך

  9. פחן הגיב:

    כך:
    ישנה טבלה ראשית עם הלקוחות שלי והשדות של הפרמטרים המאפיינים אותם מסוג מספר אשר מקושרות לתת טבלאות אשר כל טבלה מפרטת את הפרמטר לדוגמא:
    טבלה ראשית :
    מס"ד-1
    שם משפחה-כהן
    שם פרטי-יוסי
    גיל-2
    עיר מגורים-1
    מספר ילדים – 3 וכו'

    דוקמא לתת טבלה: לדוגמא טבלת גיל:
    מס"ד-1
    פירוט-צעיר
    מס"ד 2-
    פירוט-בינוני
    מס"ד 3-
    פירוט-מבוגר.
    בשאילתה שהצגתי אני שולף מהטבלה הראשית ע"פ מספר ובהצגה שלהנתוהנים אני עושה שאילתה ששולפת מהתת טבלה לפי מה שבחר המשתמש את הפירוט.

  10. פחן הגיב:

    יש לכם רעיון בנושא
    האם כך זה צריך להיות בנוי?????

  11. פחן הגיב:

    מנסה עוד פעם
    האם מישהו יודע מה לעשות.

  12. פחן הגיב:

    האם מישהו יכול לומר לי
    האם המס"ד נתונים מתוכנן טוב???

  13. פחן הגיב:

    קובץ השליפה שלי בנוי כך:

    <%
    f_date=Request.Form("f_date")
    t_date=Request.Form("t_date")
    f_status=Request.Form("f_status")
    came_from=46
    'response.write logo
    response.write yesuv & "<br>"
    response.write children & "<br>"

    set conn=server.createobject("adodb.connection")
    conn.open "mercaz_meida"
    set rs93=server.createobject("adodb.recordset")
    set rs1=server.createobject("adodb.recordset")
    set rs=server.createobject("adodb.recordset")
    sql="select client_id,first_name,last_name,enter_date,id,email from settle_detail where  diur=no and id=46 order by client_id "
    rs.open sql,conn
    %>
    <html>
    <head>
    <title>דוח חיתוכים</title>
        <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1255">
    </head>
    <body leftmargin="0" topmargin="0" link=blue alink=blue vlink=blue>
    <img src=images/logo_or.jpg align=left>

    <FORM action="settle_img.asp" method=POST id=form1 name=form1>

    <center><b><u><%=date%> דו"ח פנימי חתכים  נכון לתאריך </u></b></center><br><br><br><br><br><br><br><br>
    <p align=right dir=rtl>לידי:הרשות לפיתוח הנגב<br>
    מאת:מרכז מידע נגב<br>
    <br><br>
    </p>
    <%

    if came_from<>"" then
    sql93="select * from came_from where id=" & came_from
    rs93.Open sql93,conn
    Response.Write "צורת הגעה: " & rs93("came_from") & ", &nbsp"
    rs93.Close
    sql=sql & " and came_from=" & came_from
    end if
    Response.Write "</p><br>"
           if rs.EOF and rs.BOF then
           Response.Write "<br><br><b><center> לא נמצאו במערכת נתונים התואמים את חיפושך "
           else

  14. פחן הגיב:

    המשך

    Response.Write "<table width=775 align=center border=1 bordercolor=#8DA1C8     rules=cols frame=void cellspacing=0 cellpadding=0>"
    nu=1
    do until rs.eof

    if i=1 then
    i=10
    Response.Write " <tr>"
        
        Response.Write "<td bgcolor=#8f9dc1><div align=center><strong>   </strong></div></td>"
        Response.Write "<td bgcolor=#8f9dc1><div align=center><strong>   </strong></div></td>"
       Response.Write "<td bgcolor=#8f9dc1><div align=center><strong> סיכום אחרון </strong></div></td>"
    Response.Write "<td bgcolor=#8f9dc1><div align=center><strong> פרטים  </strong></div></td>"
      Response.Write "<td bgcolor=#8f9dc1><div align=center><strong> שם </strong></div></td>"
      Response.Write "<td bgcolor=#8f9dc1><div align=center><strong> מסד </strong></div></td>"
      c_num=1
      Response.Write "</tr>"
    n=1
    client_id=0
    end if
    sql1="select * from kesher_settle_sikumim where client_id=" & rs("client_id") &" order by sikum_date"
    'Response.Write sql1
    rs1.open sql1,conn,3
    if rs1.EOF and rs1.BOF then
    sikum=""
    sikum_date=""
    else
    rs1.movelast
    sikum=rs1("sikum")
    sikum_date=rs1("sikum_date")
    end if
    g=0      
    if f_date<>"" then
    num=DateDiff("d",rs("enter_date"),f_date)
    num2=DateDiff("d",rs("enter_date"),t_date)
    if  (num=0 or num2=0) or (num<0 and num2>0) then
    g=0
    else
    g=1
    end if
    end if
    if g=0 then
    if client_id=rs("client_id") then
    mi=1
    else
    client_id=rs("client_id")
    if n=1 then
           Response.Write "<tr bgcolor=#E6F5FF height=20 valign=middle>"
    n=2
    else
           Response.Write "<tr bgcolor=#B1DEFF height=20 valign=middle>"
    n=1
    end if

    Response.Write "<td align=center>"
    if rs("email")<>"" then
    Response.Write "<input type=checkbox name=s" & c_num & " value=" & rs("client_id") & ">"
    else
    Response.Write " "
    end if
    Response.Write "</td>"
        if p=0 and sikum_date<>"" then

  15. פחן הגיב:

    וסופו


    day2=day(sikum_date)
    mon2=month(sikum_date)
    year2=year(sikum_date)
    date2=day2 & "/" & mon2 & "/" & year2
    Response.Write "<td align=center>" & date2 & "</td>"
    else
    Response.Write "<td align=center> </td>"
    end if
    Response.Write "<td align=center>"
    if p=0 then
    Response.Write  sikum
    else
    Response.Write " – "
    end if
    Response.Write "</td>"  
    Response.Write "<td align=right  dir=rtl><a href=javascript:detail1(" & rs("client_id") & ") >לחץ</td>"
                 Response.Write "<td align=right dir=rtl>" & rs("first_name")  & " " & rs("last_name") & "</td>"
            Response.Write "<td align=right dir=rtl>" & nu & "</td>"
      
          
    c_num=c_num+1
    nu=nu+1
    end if
    end if
    rs1.close

    rs.movenext
           loop
    response.write "<input type=hidden name=total value=" & c_num & ">"

    end if
           rs.close
           set rs=nothing
          
    'end if
    %>
                </table><br>
    <center><b><u> פרטי האימייל </u></b></center><br>

    <table width=450 align=center>
    <tr>
    <td><input name=email_subject size=30></td>
    <td> <b> נושא האימייל </b></td>
    </tr>
    <tr>
    <td><textarea name=email_body cols=25 rows=10></textarea></td>
    <td> <b> גוף האימייל </b></td>
    </tr>
    <tr>
    <td align=right><input type=checkbox name=email_attach value=yes></td>
    <td> <b> אני מעוניין לצרף קובץ </b></td>
    </tr>
    <tr><td colspan=2 align=center><input type=submit value="   שלח   "></td></tr>
    </form>
    </table>

    </body>
    </html>
    <%
    rs93.close
    set rs93=nothing
    rs1.close
    set rs1=nothing
    rs.close
    set rs=nothing
    conn.close
    set conn=nothing
    %>

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

    ואנחנו אמורים לעבור על כזה קוד?

  17. פחן הגיב:

    מנסה לתאר את המסד נתונים האם זו
    הדרך היעילה לבנות מסד עם טבלה ראשית ותתי טבלאות אשר ישלפו הנתונים מהטבלה הראשית ע"פ פרמטרים של התתי טבלאות
    ישנה טבלה ראשית עם הלקוחות שלי והשדות של הפרמטרים המאפיינים אותם מסוג מספר אשר מקושרות לתת טבלאות אשר כל טבלה מפרטת את הפרמטר לדוגמא:
    טבלה ראשית :
    מס"ד-1
    שם משפחה-כהן
    שם פרטי-יוסי
    גיל-2
    עיר מגורים-1
    מספר ילדים – 3 וכו'

    דוקמא לתת טבלה: לדוגמא טבלת גיל:
    מס"ד-1
    פירוט-צעיר
    מס"ד 2-
    פירוט-בינוני
    מס"ד 3-
    פירוט-מבוגר.
    בשאילתה שהצגתי אני שולף מהטבלה הראשית ע"פ מספר ובהצגה שלהנתוהנים אני עושה שאילתה ששולפת מהתת טבלה לפי מה שבחר המשתמש את הפירוט.

  18. פחן הגיב:

    האם עבודה בשיטת GetRows
    ייעל את העבודה על המסד נתונים ויריץ את התוצאות של החיפוש יותר מהר???

  19. jonatan44 הגיב:

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

  20. Night הגיב:

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

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

  21. פחן הגיב:

    דיברתי עם החברה שהאתר יושב אצלה
    והם אמרו לי שהם אינם מוכנים להעלות את זמן ה- Server.ScriptTimeout
    ולכן אני חייב למצוא רעיון לספק את השליפה יותר מהר.

  22. BuildHome הגיב:

    אתה יכול להגדיר אותו בעצמך, בעמוד
    כך:

    Server.ScriptTimeout = 150

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

  23. פחן הגיב:

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

  24. BuildHome הגיב:

    ל-IIS בשרת יש את ההגדרה שלו
    שהגדרת ברירת המחדל היא 90 שניות.
    ניתן לשנות ולהתאים את ההגדרה לעמודים הרצויים לך אך ההגדרה של ה-IIS היא כללית.

  25. BuildHome הגיב:

    אתה יכול להציג את הקוד הרלוונטי
    ונראה מה ניתן לייעל בו?

  26. פחן הגיב:

    הצגתי את הקוד באמצע ההודעה
    תסתכל למעלה ותודה על הנכונות הרבה

  27. BuildHome הגיב:

    ביקשתי את הקוד הרלוונטי ולא את כל
    העמוד שלך.

    קרא איך מציגים שאלה.
    רק כך אוכל לעזור לך.

שלח תשובה