שמירת שאילתא באקסס
-
בהמשך לפוסט הזה: https://tchumim.com/post/152933
יש לי קובץ אקסס שמכיל דאטה של שמות פלוס טופס חיפוש שבו ניתן לחפש לפי שם, משפחה, כתובות וכדו',
אני מעוניין ליצור העתק מכל שאילתא [כלומר של השאילתא והתוצאות שלה] שתשלח במייל [שליחת המייל מטופלת בפוסט האמור] דרך שרת STMP.
חשבתי שהדרך הנכונה הייתה ליצור העתק מכל שאילתא לטופס נפרד ואז בטופס הנפרד לטפל בשליחת מייל.
- זו באמת הדרך הנכונה?
- במידה וכן אשמח להדרכה ממי שיש לו סבלנות... [אני לא באמת מבין בזה...]
תודה רבה
-
@one1010
אתה צריך ליצור או לשכתב שאילתה ייעודית לחיפוש הנוכחי.
לייצא אותה לאקסל
ולשלוח את האקסל במייל.ככה אתה משכתב שאילתה קיימת:
CurrentDb.QueryDefs("שםהשאילתה").SQL = "select * from [שם הטבלה] " & " where " & תוצאותהחיפוש
'תוצאותהחיפוש' תלוי איך עשית את החיפוש, אבל בהמשך לפוסט הזה,
זה תוצאות החיפוש
"[" & Me.cobField & "] like " & Chr(34) & "" & Me.txtFind & "" & Chr(34)וככה אתה מייצא את השאילתה לאקסל:
DoCmd.TransferSpreadsheet acExport, , "שםהשאילתה", strPath , False
למשתנה strPath צריך לתת נתיב מלא ושם הקובץ לפני הפעלת השורה.
זה דוגמא לאיך לתת לו נתיב ושם עם התאריך הנוכחיDim strPath As String strPath = CurrentProject.Path & "\" & "שםכלשהו" & Format(Date, "dd-mm-yyyy") & ".xls"
ואז לשלוח את הנתיב הזה למייל.
תוכל למחוק את הקובץ מהמחשב אחרי השליחה ככה
If Len(dir(strPath)) > 0 Then Kill strPath
-
@מלא כתב ב[שמירת שאילתא באקסס]כמו שכתבתי אני לא באמת מבין בזה...
אשמח לקבל הסברים לנקודות הבאות:ככה אתה משכתב שאילתה קיימת:
CurrentDb.QueryDefs("שםהשאילתה").SQL = "select * from [שם הטבלה] " & " where " &
איך אני יודע מה שם השאילתא?
תוצאותהחיפוש
'תוצאותהחיפוש' תלוי איך עשית את החיפוש, אבל בהמשך לפוסט [*הזה*](https://tchumim.com/topic/15033/%D7%A2%D7%96%D7%A8%D7%94-%D7%91%D7%97%D7%99%D7%A4%D7%95%D7%A9-%D7%91%D7%90%D7%A7%D7%A1%D7%A1), זה תוצאות החיפוש "[" & Me.cobField & "] like " & Chr(34) & "*" & Me.txtFind & "*" & Chr(34)
במקרה שלי יש טופס עם כמה שדות שניתן להכניס בכל אחת מהן לחיפוש [שם בתא של השם כתובת בתא של הכתובת וכן הלאה]
זה משנה?זהו כרגע... נגמור עם זה ונתקדם...
תודה רבה
-
@one1010 כתב בשמירת שאילתא באקסס:
איך אני יודע מה שם השאילתא?
אתה מחליט איזה שאילתה זה יהיה, תייצר שאילתה כל שהיא, ותכניס בה מה שאתה רוצה ותן לה כל שם שתרצה, בשורה הזאת תעדכן את שם השאילתה למה שכתבתי לך. (הנתונים בשאילתה לא משנה מה שתכניס, כי אתה משכתב את זה בשורה הראשונה שנתתי לך)
@one1010 כתב בשמירת שאילתא באקסס:
זה משנה?
בטח זה משנה,
איך שאתה מסנן את הטופס, ככה אתה מסנן את השאילתה. -
@מלא כתב בשמירת שאילתא באקסס:
@one1010 כתב בשמירת שאילתא באקסס:
איך אני יודע מה שם השאילתא?
אתה מחליט איזה שאילתה זה יהיה, תייצר שאילתה כל שהיא, ותכניס בה מה שאתה רוצה ותן לה כל שם שתרצה, בשורה הזאת תעדכן את שם השאילתה למה שכתבתי לך. (הנתונים בשאילתה לא משנה מה שתכניס, כי אתה משכתב את זה בשורה הראשונה שנתתי לך)
אתה מתכוון שאחרי שעשיתי את החיפוש בפועל אני צריך לעדכן ידנית בכל פעם? כי אם כן אני מעוניין שבאופן אוטומטי אחרי כל חיפוש התהלך יתבצע אוטומטי.
@one1010 כתב בשמירת שאילתא באקסס:
זה משנה?
בטח זה משנה,
איך שאתה מסנן את הטופס, ככה אתה מסנן את השאילתה.יש דרך לבנאדם פשוט כמוני לדעת מה צריך לשנות?...
-
@one1010 כתב בשמירת שאילתא באקסס:
אשמח אם תסביר לי יותר את השאלה...
פשוט מאוד, איך הטופס מסתנן, יש לחצן שמסנן אותו? תביא את הקוד שמאחורי הלחצן,
אם זה מסתנן בצורה שונה, תביא את הקוד הזה.יכול להיות שאם תעשה את מה שדוד אמר, אני מאמין שזה היה חוסך כמה פוסטים בפורום...
(@dovid יכול להיות שיש לו קובץ מוכן וקשה לו לבצע את הפירוק לנקודה הקנטה הזו, חוץ מזה שיכול להיות שזה לבד יגרור כמה פוסטים...) -
@מלא כתב בשמירת שאילתא באקסס:
(@dovid יכול להיות שיש לו קובץ מוכן וקשה לו לבצע את הפירוק לנקודה הקנטה הזו, חוץ מזה שיכול להיות שזה לבד יגרור כמה פוסטים...)
כל הכבוד הן על הסבלנות והן על לימוד הזכות.
אני ביקשתי ממנו להעלות והוא אמר שיש לו מוכן.
אני מבין שזה יכול להיות קשה ואפילו בלתי אפשרי לרמה מסויימת לבודד את המקרה לקובץ דוגמה, אבל כשזה מגיע לכזה דו שיח פוחתת הליגטימציה להיעזר בכגון דא דרך פורום. -
Private Sub UpDateView() On Error Resume Next st0 = 1 st = 0 'On Error GoTo UpDateView_Err [Forms]![SearchPage2].More.Form.RecordSource = "" Dim stLinkCriteria As String Dim stLinkCriteriaE As String If Not IsNull([ID]) Then stLinkCriteria = stLinkCriteria & " and M.ID" & Fld2Txt(ID) '((M.ID) = " & ID & ") " stLinkCriteriaE = stLinkCriteriaE & " and campaign_voters.voter_id" & Fld2Txt(ID) End If If Not IsNull([ID_FATHER2]) Then stLinkCriteria = stLinkCriteria & " and ((M.ID_FATHER) = " & ID_FATHER2 & ") " If Not IsNull([ID_MOTHER2]) Then stLinkCriteria = stLinkCriteria & " and ((M.ID_MOTHER) = " & ID_MOTHER2 & ") " If Not IsNull([B_COUNTRY]) Then stLinkCriteria = stLinkCriteria & " and B_COUNTRY " & Fld2Txt([B_COUNTRY]) If Not IsNull([B_YEAR]) Then stLinkCriteria = stLinkCriteria & " and B_YEAR" & Fld2Txt([B_YEAR], True) If Not IsNull([SEX]) Then stLinkCriteria = stLinkCriteria & " and SEX" & Fld2Txt([SEX]) If Not IsNull([L_NAME]) Then stLinkCriteria = stLinkCriteria & " and L_NAME" & Fld2Txt([L_NAME]) stLinkCriteriaE = stLinkCriteriaE & " and campaign_voters.last_name" & Fld2Txt(L_NAME) End If If Not IsNull([F_NAME]) Then stLinkCriteria = stLinkCriteria & " and F_NAME" & Fld2Txt([F_NAME]) stLinkCriteriaE = stLinkCriteriaE & " and campaign_voters.first_name" & Fld2Txt(F_NAME) End If If Not IsNull([FATHER_NAME]) Then stLinkCriteria = stLinkCriteria & " and FATHER_NAME" & Fld2Txt([FATHER_NAME]) stLinkCriteriaE = stLinkCriteriaE & " and campaign_voters.father_name" & Fld2Txt([FATHER_NAME]) End If If Not IsNull([MOTHER_NAME]) Then stLinkCriteria = stLinkCriteria & " and MOTHER_NAME" & Fld2Txt([MOTHER_NAME]) If Not IsNull([STREET]) Then stLinkCriteria = stLinkCriteria & " and STREET" & Fld2Txt([STREET]) stLinkCriteriaE = stLinkCriteriaE & " and campaign_voters.street" & Fld2Txt([STREET]) End If If Not IsNull([HOUSE]) Then stLinkCriteria = stLinkCriteria & " and HOUSE" & Fld2Txt([HOUSE]) stLinkCriteriaE = stLinkCriteriaE & " and campaign_voters.house_number" & Fld2Txt([HOUSE]) End If If Not IsNull([ID_CITY]) Then stLinkCriteria = stLinkCriteria & " and ID_CITY" & Fld2Txt([ID_CITY]) stLinkCriteriaE = stLinkCriteriaE & " and cities.name" & Fld2Txt(DLookup("NAME_CITY", "[CITY]", "[ID] = " & [ID_CITY])) End If stLinkCriteria = Right(stLinkCriteria, Len(stLinkCriteria) - InStr(2, stLinkCriteria, " ", vbTextCompare)) stLinkCriteriaE = Right(stLinkCriteriaE, Len(stLinkCriteriaE) - InStr(2, stLinkCriteriaE, " ", vbTextCompare)) If stLinkCriteria = "" Then MsgBox ("חובה למלאות לפחות שדה אחד") ID.SetFocus Exit Sub End If Application.Echo False, "מחשב נתונים..." Me.Main.Form.RecordSource = "" Me.Main.Form.RecordSource = "SELECT TOP " & TOPF & " M.*, CITY.NAME_CITY, COUNTRY.NAME_HEB" & _ " FROM (M LEFT JOIN CITY ON M.ID_CITY = CITY.ID) LEFT JOIN COUNTRY ON M.B_COUNTRY = COUNTRY.ID" & _ " WHERE (" & stLinkCriteria & ")" Me.Main.SetFocus stLinkCriteria2 = " (((M.ID)=[Forms]![SearchPage2].[main]![MainMAID])) OR (((M.ID)=[Forms]![SearchPage2].[main]![MainFaID])) " Me.More.Form.RecordSource = "SELECT M.*, CITY.NAME_CITY, COUNTRY.NAME_HEB" & _ " FROM (M LEFT JOIN CITY ON M.ID_CITY = CITY.ID) LEFT JOIN COUNTRY ON M.B_COUNTRY = COUNTRY.ID" & _ " WHERE (" & stLinkCriteria2 & ")" & _ " ORDER BY M.B_YEAR" TabStrip6.Object.Value = 0 TabStrip6_Updated (0) Dim stLink As String Me.BB.Form.RecordSource = "" stLink = "SELECT TOP " & TOPF & " campaign_voters.voter_id, campaign_voters.last_name, campaign_voters.first_name, campaign_voters.father_name, campaign_voters.street, campaign_voters.house_number, campaign_voters.apartment_number, cities.name, voters.phone, voters.email, voters.home_phone, voters.extra_phone, voters.comment, admin_users.name" & _ " FROM ((voters RIGHT JOIN campaign_voters ON voters.campaign_voter_oid = campaign_voters.oid) LEFT JOIN admin_users ON voters.admin_user_oid = admin_users.[oid]) LEFT JOIN cities ON campaign_voters.city_oid = cities.[oid]" & _ " WHERE (" & stLinkCriteriaE & ")" & _ " ORDER BY campaign_voters.voter_id" Me.BB.Form.RecordSource = stLink Me.BB.SetFocus Application.Echo True UpDateView_Exit: Exit Sub UpDateView_Err: MsgBox Error$, , "שגיאה מס' " & err Resume UpDateView_Exit End Sub
-
@one1010
זה נראה שיש לך בטופס 3 טפסי משנה והמסנן שלך מסנן את שלשתם.
אז אני לא יודע איזה מהם תרצה לשלוח במייל.אני לקחתי את הסינון הראשון בקוד שלך, תדביק את זה
CurrentDb.QueryDefs("שםהשאילתה").SQL = "SELECT TOP " & TOPF & " M.*, CITY.NAME_CITY, COUNTRY.NAME_HEB" & _ " FROM (M LEFT JOIN CITY ON M.ID_CITY = CITY.ID) LEFT JOIN COUNTRY ON M.B_COUNTRY = COUNTRY.ID" & _ " WHERE (" & stLinkCriteria & ")"
אחרי שורה 59 בקוד שלך,
זה ישכתב את השאילתה. כמובן, תחליף לפני זה את שםהשאילתה לשאילתה שיצרת.ובקוד של הלחצן תכניס את הפקודה שמייצאת שאילתה שכתבתי לך למעלה ותוסיף גם את השליחה למייל.
-
@מלא כתב בשמירת שאילתא באקסס:
@one1010
זה נראה שיש לך בטופס 3 טפסי משנה והמסנן שלך מסנן את שלשתם.
אז אני לא יודע איזה מהם תרצה לשלוח במייל.אני לקחתי את הסינון הראשון בקוד שלך, תדביק את זה
ואם אני רוצה את שלושתם?
זה ישכתב את השאילתה. כמובן, תחליף לפני זה את שםהשאילתה לשאילתה שיצרת.
מה הכוונה?! איזו שאילתא יצרתי!? אני רק משתמש בטופס הקיים.
-
-
@one1010
נורא מסקרן אותי אם בנית את המערכת לבד או לקחת משהו קיים ומנסה להוסיף בו משהו.לפי השאלות נראה שלא למדת עדיין את המדריך של @OdedDvir שנמצא כאן
אני לא רוצה להכניס לך את הכל עם כפית לפה. מלאתי את הכפית עכשיו תעבור קצת על הקוד ותנסה לראות מה אתה צריך להוסיף כדי שזה יעבוד.
לעצם שאלתך, אני לא יודע [לא בדקתי] אם הטפסי משנה שלך לוקחים נתונים מאותם טבלאות ואתה יכול לשלוח רק קובץ אחד לאימייל, או שאתה רוצה לשלוח 3 קבצים.
איך שתחליט, הארוחה מוכנה ועם קצת לימוד תוכל לעשות את זה לבד.ולשאלה ב'. כדי לשלוח קובץ אקסל למייל עם תוצאות החיפוש אתה צריך לייצא קובץ אקסל מתוך שאילתה. את השאילתה הזאת אתה משכתב כל פעם לנתונים המתאימים בשבילך.
לחילופין אפשר גם לבנות קוד שיבנה סטרינג מלא של כל הנתונים ולשלוח למייל טקסט בגוף ההודעה בלי קובץ מצורף. אבל שוב, זה שאלה קצת אחרת וצריך לדעת איפה הידע שלך עומד ביחס לביצוע כדי שמישהו יוכל ל'הדריך' אותך. -
@ארי כתב בשמירת שאילתא באקסס:
@מלא כל הכבוד על הסבלנות.
נכון מאד!
@one1010 נראה לי שהגיע הזמן שתעשה קצת גוגל על דברים שמציעים לך, לא נראה לי שזו הדרך ללמוד אקסס.
תחפש איך יוצרים שאילתה, תעשה חיפוש על כל שורת קוד שמביאים לך כדי ללמוד מה היא עושה, ובסוף כמו שכולם לומדים תדע גם אתה מה לעשות.אתה צודק עקרונית, אני מאד אשמח ללמוד אקסס רק כרגע זה גדול עלי...
בהצלחה!
תודה רבה!