Access שמרה שאילתה שפותחה באמצעות בונה השאילתות myQuery. מסד הנתונים מחובר למערכת באמצעות חיבור ODBC. כל פקודות המאקרו כלולות.
Excel יוצר חיבור ADODB לחיבור למסד הנתונים באמצעותו
Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .פתח את "MyDatabase.accdb" סוף עם
בדרך כלל אתה פשוט כותב את ה-SQL שלך, שעובד מצוין, ואז פשוט עושה משהו כמו
Dim sqlQuery As String sqlQuery = "SELECT * FROM myTable" הגדר rs = New ADODB.Recordset rs.Open sqlQuery, con, ...
אבל אני רוצה לגשת לשאילתה שאחסנתי במסד הנתונים של הגישה. אז איך אני קורא לשאילתה שמורה במסד הנתונים שזה עתה חיברתי.
כבר ניסיתי את זה
אני חושב שאתה יכול לחשוב על זה כעל פרוצדורה מאוחסנת.
אם נתחיל ממש לפני Dim sqlQuery As String
עמום cmd כחדש ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con הגדר rs = cmd.Execute()
ואז אסוף את העבודה שלך עם ערכת השיאים לאחר מכן.
כמעט היית שם
Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .פתח את "z:\docs\MyDatabase.accdb" סוף עם con.Execute "MyQuery"
פשוט עזוב את המנהל.
אפשר גם להוסיף פרמטרים, זה קצת מיושן אבל אמור לעזור: עדכן 2 שדות במסד נתונים של Access עם נתוני אקסל ואולי מאקרו
הצלחתי להריץ שאילתת עדכון שכבר נשמרה ב-Access באמצעות:
חיבור. בצע את "My_Update_Query_Already_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc
זה נתן לי שגיאות עד שהחלפתי את הרווחים בשם השאילתה בקווים תחתונים כמו בבסיס גישה לנתונים, ובהצהרת הביצוע.
זה סוג של עבודת פריצה, אבל אתה יכול לבקש בקשה. כלומר, החלף את שורת SQL בשורה הבאה:
SqlQuery = "SELECT * FROM QueryName;"
לפני שתתחיל, עליך לוודא שמסד הנתונים של Access נשמר, כלומר. הקש Ctrl + S (זה לא מספיק כדי שהשאילתה תתבצע ב-Access).
עבר הרבה זמן מאז שהנושא הזה נוצר. אם אני מבין נכון, אולי אוכל להוסיף משהו שימושי. נתתי שם למה שה-OP מתאר: זהו תהליך השימוש ב-SQL מתוך שאילתה המאוחסנת ב-ACCDB כדי להפעיל ב-VBA דרך DAO או ADOBD. קראתי לזה "ספק נכסי אובייקט", אפילו עם ראשי התיבות OPP בהערות שלי ועבור קידומת/סיומת שם האובייקט.
הרעיון הוא שאובייקט קיים ב-ACCDB (בדרך כלל שאילתה) חושף מאפיין (בדרך כלל SQL) שצריך להשתמש בו ב-VBA. זרקתי פונקציה רק כדי לשאוב את ה-SQL מהשאילתות בשביל זה; ראה למטה. אזהרה: סליחה, אבל זה הכל ב-DAO, אני לא משתמש הרבה ב-ADODB. אני מקווה שאתה עדיין מוצא את הרעיונות שימושיים.
אפילו הלכתי עד כדי פיתוח שיטה לשימוש/הכנסת פרמטרים הניתנים להחלפה ב-SQL שמגיעה משאילתות OPP אלו. לאחר מכן אני משתמש ב-VBA.Replace() כדי להחליף לפני באמצעות SQLב-VBA.
נתיב האובייקט DAO לשאילתת SQL ב-ACCDB הוא כדלקמן:
MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL
אני משתמש בפרמטרים הניתנים להחלפה על ידי הערכה של מה שצריך להחליף ובחירת שם חריג לפרמטר שאולי לא קיים במסד הנתונים בפועל. לרוב, ההחלפות היחידות שעשיתי הן שמות שדות או טבלאות או ביטויי משפט WHERE ו-HAVING. אז אני קורא להם כמו "(ReplaceMe00000001)" ואז משתמש החלף פונקציה() לעשות את העבודה...
SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter")
ולאחר מכן השתמש ב-sqlText ב-VBA. הנה דוגמה עובדת:
פונקציה ציבורית MySqlThing() Dim sqlText as String Dim myParamater as String Dim myExpression as String "הגדר הכל. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression = "Some1217Orment" . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "לאחר מכן השתמש ב-SQL. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName As String) As String Dim applikation db.Execute db.ApO As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText As String Set app = Access.Application Set db = app.CurrentDb Set qdefs = db.QueryDefs Set qdef = qdefs(oppName) oppGetSqlText = qdef Fun.
שימוש במאקרו OpenRequestבמסדי נתונים של Access, אתה יכול לפתוח שאילתות בחירה והצלבות בתצוגת גליון נתונים, תצוגת עיצוב או תצוגת תצוגה מקדימה. פעולה זו מפעילה בקשת שינוי. אתה יכול גם לבחור את מצב הזנת הנתונים עבור הבקשה.
הערה:מאקרו זה זמין רק בסביבת מסד נתונים של Access (MDB או ACCDB). אם אתה משתמש בסביבת Access Project (ADP), ראה פקודות מאקרו OpenView, OpenSavedProcedureו OpenFunction. פקודת מאקרו OpenRequestלא זמין באפליקציות אינטרנט של Access.
פקודת מאקרו OpenRequestיש את הטיעונים הבאים:
טיעון מאקרו | תיאור |
---|---|
שם בקשה |
שם הבקשה לפתיחה. בחר שם מהרשימה הנפתחת. זה טיעון מתבקש. כאשר אתה מפעיל ספריית מאקרו במסד נתונים המכיל מאקרו OpenRequest Access מחפש תחילה שאילתה בשם זה במסד הנתונים של הספרייה ולאחר מכן במסד הנתונים הנוכחי. |
התצוגה שבה תיפתח הבקשה. בחר בשדה נוףמַשְׁמָעוּת שולחן, בַּנַאִי, תצוגה מקדימה , טבלת ציראוֹ תרשים ציר. ברירת המחדל היא שולחן. הערה:התצוגות PivotTable ו- PivotChart אינן זמינות בגרסאות Access החל מ-Access 2013. |
|
מצב נתונים |
מצב הזנת נתונים עבור הבקשה. אפשרות זו חלה רק על שאילתות שנפתחו בתצוגת גליון נתונים. בחר לְהוֹסִיף(משתמשים יוכלו להוסיף ערכים חדשים, אך לא לשנות את הקיימים), שינוי(משתמשים יוכלו לשנות ערכים קיימים וכן להוסיף ערכים חדשים) או רק לקריאה(משתמשים יוכלו לראות רק ערכים). ערך ברירת המחדל הוא שינוי. |
אם לטיעון נוףערך נתון שולחן, Access מציג את ערכת התוצאות אם אתה משתמש בשאילתת בחירה, שאילתת צולבת, שאילתת הצטרפות או שאילתת שרת, מאפיין מחזירהרשומותמה שחשוב כן. אם מדובר בבקשת שינוי, בקשת הגדרת נתונים או בקשת שרת עבור מאפיין מחזירהרשומותשהערך שלו ניתן לא, הבקשה מבוצעת.
פקודת מאקרו OpenRequestזהה ללחיצה כפולה על שאילתה בחלונית הניווט או לחיצה ימנית עליה בחלונית הניווט ובחירה בתצוגה. בעת שימוש במאקרו, ניתן לבחור אפשרויות נוספות.
עצה
ניתן לגרור שאילתה מחלונית הניווט אל חלון מעצב המאקרו. פעולה זו תיצור באופן אוטומטי פקודת מאקרו OpenRequest, אשר פותח את השאילתה בתצוגת גליון נתונים.
אם תעבור למעצב בזמן שהשאילתה פתוחה, ערך הארגומנט מצב נתוניםמחוק. להגדרה זו לא תהיה השפעה גם אם המשתמש יחזור לתצוגת גליון נתונים.
אם אינך רוצה להציג את הודעות המערכת המופיעות בדרך כלל בעת ביצוע בקשות שינוי (אלה שאומרות לך שזו בקשת שינוי ומספר הרשומות שהיא משפיעה עליה), תוכל לבטל אותן באמצעות מאקרו הגדר אזהרה.
כדי להפעיל מאקרו OpenRequestבמודול ויז'ואל בייסיקעבור יישומים (VBA), השתמש בשיטה OpenRequestלְהִתְנַגֵד DoCmd.
שיעור זה מוקדש ל שאילתות SQLלמסד הנתונים על גישה ל-VBA. נבחן כיצד מתבצעות שאילתות INSERT, UPDATE, DELETE למסד הנתונים ב-VBA, וכן נלמד כיצד לקבל ערך ספציפי משאילתת SELECT.
אלה שמתכנתים ב גישה ל-VBAתוך כדי עבודה עם מסד הנתונים שרת SQL, לעתים קרובות הם מתמודדים עם משימה כה פשוטה והכרחית כמו שליחת שאילתת SQL למסד נתונים, בין אם זה INSERT, UPDATE או שאילתת SQL SELECT פשוטה. ומכיוון שאנחנו מתכנתים מתחילים, אנחנו אמורים גם להיות מסוגלים לעשות את זה, אז היום נעשה בדיוק את זה.
כבר נגענו בנושא השגת נתונים משרת SQL, שם כתבנו קוד ב-VBA להשגת נתונים אלו, למשל, במאמר על העלאת נתונים לקובץ טקסט מ-MSSql 2008, או נגענו בו גם ב- מעט בחומר העלאת נתונים מ-Access לתבנית Word ו-Excel אבל כך או אחרת, הסתכלנו על זה בצורה שטחית, והיום אני מציע לדבר על זה קצת יותר בפירוט.
הערה! כל הדוגמאות שלהלן נחשבות באמצעות פרויקט Access 2003 ADP ומסד הנתונים MSSql 2008 אם אינך יודע מהו פרויקט ADP, אז הסתכלנו על זה בחומר כיצד ליצור ולהגדיר פרויקט Access ADP.
נניח שיש לנו טבלה test_table, שתכיל את המספרים והשמות של חודשי השנה (שאילתות מבוצעות באמצעות סטודיו לניהול)
צור טבלה .( לא NULL, (50) NULL) בתנועה
כפי שכבר אמרתי, נשתמש בפרויקט ADP המוגדר לעבוד עם MS SQL 2008, בו יצרתי טופס בדיקה והוספתי כפתור התחלה עם חתימה "לָרוּץ", שנצטרך לבדוק את הקוד שלנו, כלומר. נכתוב את כל הקוד במטפל האירוע " לחיצה על הכפתור».
כדי לא להתעכב יותר מדי, בואו נתחיל מיד, נניח שצריך להוסיף שורה לטבלת הבדיקות שלנו ( קוד הגיב)/
Private Sub start_Click() "הכרז על משתנה לאחסון מחרוזת השאילתה Dim sql_query As String "כתוב את השאילתה שאנחנו צריכים לתוכה sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "יוני")" "ביצוע it DoCmd RunSQL sql_query End Sub
IN במקרה הזההבקשה מבוצעת באמצעות פרמטרי החיבור הנוכחיים של מסד הנתונים. אנחנו יכולים לבדוק אם הנתונים נוספו או לא.
כפי שאתה יכול לראות, הנתונים הוכנסו.
על מנת למחוק שורה אחת אנו כותבים את הקוד הבא.
Private Sub start_Click() "הכרז על משתנה לאחסון מחרוזת השאילתה Dim sql_query As String "כתוב לתוכו שאילתת מחיקה sql_query = "DELETE test_table WHERE id = 6" "הפעל אותו DoCmd.RunSQL sql_query End Sub
אם נבדוק, נראה שהשורה הרצויה נמחקה.
כדי לעדכן את הנתונים, כתוב את בקשת העדכון למשתנה sql_query, אני מקווה שהמשמעות ברורה.
כאן הדברים קצת יותר מעניינים מאשר עם מבני SQL אחרים.
ראשית, נניח שצריך לקבל את כל הנתונים מהטבלה, ולמשל נעבד אותם ונציג אותם בהודעה, ואתם כמובן יכולים להשתמש בהם למטרות אחרות, לשם כך נכתוב את הדברים הבאים קוד
Private Sub start_Click() "הכרז על משתנים "עבור קבוצת רשומות ממסד הנתונים Dim RS As ADODB.Recordset "Query string Dim sql_query As String "מחרוזת להצגת נתוני סיכום בהודעה Dim str As String "צור אובייקט חדש לרשומות set RS = New ADODB .Recordset "Query line sql_query = "SELECT id, name_mon FROM test_table" "הפעל את השאילתה באמצעות הגדרות החיבור הנוכחיות של הפרויקט RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "לולאה דרך הרשומות בעוד לא ( RS.EOF) "מלא את המשתנה כדי להציג את ההודעה str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "עבור לרשומה הבאה RS.MoveNext Wend " פלט את ההודעה msgbox str End Sub
כאן אנחנו כבר משתמשים בלולאות VBA Access כדי לחזור על כל הערכים בערכת הרשומות שלנו.
אבל לעתים קרובות יש צורך להשיג לא את כל הערכים מקבוצה של רשומות, אלא רק אחד, למשל, שם החודש לפי הקוד שלו. וכדי לעשות זאת, זה די יקר להשתמש בלולאה, אז אנחנו יכולים פשוט לכתוב שאילתה שתחזיר רק ערך אחד ולגשת אליו, למשל, נקבל את שם החודש באמצעות קוד 5
Private Sub start_Click() "הכרז על משתנים" עבור קבוצת רשומות ממסד הנתונים Dim RS As ADODB.Recordset "Query string Dim sql_query As String "מחרוזת להצגת הערך הסופי Dim str As String "צור אובייקט חדש עבור ערכת רשומות RS = New ADODB.Recordset "Query line sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "הפעל את השאילתה באמצעות הגדרות החיבור הנוכחיות של הפרויקט RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "קבל את הערך שלנו str = RS. Fields(0) msgbox str End Sub
לאוניברסליות, כאן כבר התייחסנו לא לפי שם התא, אלא לפי האינדקס שלו, כלומר. 0, וזה הערך הראשון ב ערכת שיאים, בסופו של דבר קיבלנו את הערך "מאי".
כפי שאתה יכול לראות, הכל די פשוט. אם לעתים קרובות אתה צריך לקבל ערך מסוים ממסד הנתונים ( כמו בדוגמה האחרונה), אז אני ממליץ להוציא את כל הקוד לפונקציה נפרדת (כיצד לכתוב פונקציה ב-VBA Access 2003) עם פרמטר קלט אחד, למשל, קוד החודש ( אם ניקח בחשבון את הדוגמה שלנו) ובפשטות, היכן שיש צורך להציג את הערך הזה, קרא לפונקציה שאנו צריכים עם הפרמטר הנדרש וזהו, על ידי כך נצמצם משמעותית את קוד ה-VBA ונשפר את התפיסה של התוכנית שלנו.
זה הכל להיום. בהצלחה!
היי, בדיוק למדתי משהו על איך להכניס את הצהרות SQL שלי ל-VBA (או לפחותלכתוב אותם), אבל אני לא יודע איך להשיג את הנתונים המוחזרים?
יש לי כמה טפסים (טופס תרשים) המבוססים על שאילתות שאני מריץ פרמטרים די קבועים נגדן, רק משנה את מסגרת הזמן (כמו 10 מכירות מובילות בחודש). אז יש לי נהלים שמעבירים אליו אוטומטית את אובייקט התרשים מצגות PowerPoint. אז יש לי את כל השאילתות האלה שנבנו מראש (כמו 63), ודיאגרמת טופס שתתאים (כן... 63... אני יודע שזה רע), ואז כל הדברים האלה נוצרים ב"פתיחה/סגור" " אירוע המוביל לאירוע הבא (זה כמו הניסיון הכי טוב שלי להיות פריצה.... או דומינו; מה שאתה מעדיף).
אז ניסיתי ללמוד איך להשתמש בהצהרות SQL ב-VBA כדי שבסופו של דבר אוכל לעשות הכל שם (אולי אצטרך לשמור את כל דיאגרמות הצורות האלה, אבל אני לא יודע כי ברור שחסר לי הבנה).
אז חוץ מהשאלה ששאלתי למעלה, מי יכול לתת עצות? תודה
10
זה קצת מיושן, אז אולי כדאי לך לתפוס ספר על הנושא הזה. אבל, הנה המון גישה למשאבים וגם כמה הדרכות ודוגמאות. אבל בעיקרון...
Dim dbs As Database Dim rs As Recordset Dim strSQL As String Set dbs = CurrentDb strSQL = "השאילתה שלך כאן הגדר rs = dbs.OpenRecordset(strSQL) אם לא (rs.EOF ו-rs.BOF) אז rs.MoveFirst "קבל תוצאות באמצעות rs.Fields() אחרת "השתמש בתוצאות
מאחורי התגובה: תסתכל על שיעור הפוסט. הוא מכיל אוסף שנקרא שדות, שהם העמודות המוחזרות מהשאילתה שלך. בלי להכיר את המעגל שלך, קשה לומר, אבל משהו כמו...
Rs.MoveFirst Do While Not rs.EOF "עשה משהו כמו rs("SomeFieldName") rs.MoveNext Loop
כפי שאמרתי, ההימור הטוב ביותר שלך הוא לתפוס ספר על הנושא הזה, יש להם המון דוגמאות.
השתמש ב-QueryDef עם פרמטר וקרא לו מ-VBA.
השאילתה קלה יותר לעיצוב...ניתנת לבדיקה בקלות..ונגישה בקלות באמצעות VBA או טופס.
עמום qd כמו querydef set qd = currentdb.querydefs!myquerydef qd.parameters!parm1=val1
או qd.execute
עמום rs כמו ערכת רשומות rs = qd.openrecordset()
הנה פונקציה שאולי תשקול לבצע מחדש כדי לקחת אותה בתור ותוכל לעשות שימוש חוזר בכל מקום בקוד שלך.
אז קבע או בנה מחרוזת להצהרת ה-SQL שלך, והכנס את הניקוי שלך, NON SQL INJECT את המחרוזת כארגומנט :)
StrSQL = "SELECT * FROM Customer WHERE ID = " & EnsureParamIsNotSQLInjection(customerID)
לאחר מכן התקשר לפונקציה /sub מכל מקום שאתה צריך כדי לקבל את הנתונים/סט הרשומות/לבצע את ההוראה. על ידי יצירת מספר פונקציות/תתי גישה לנתונים שבהם אתה יכול פשוט להריץ משפט UPDATE או לאחזר ערך בודד, או לאחזר רשומות מלאות.
המפתח כאן הוא שכל הפונקציות הללו יחיו במקום אחד וישתמשו בהן בכל מקום. הנה דוגמה ב-VBScript.
Sub DoStuff(strSQL) Set adoCon = Server.CreateObject("ADODB.Connection") strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db\Database.mdb") "strConnString = "DRIVER=(מנהל התקן של Microsoft Access (*.mdb)); DBQ=" & Server.MapPath("db\Database.mdb") adoCon.Open strConnString Set rsMain = Server.CreateObject("ADODB.Recordset") rsMain.Open strSQL, adoCon Do While NOT rsMain.EOF customerName = rsMain(" CustomerName") "דוגמה טיפשית RsMain.MoveNext Loop rsMain.Close הגדר adoCon = Nothing End Sub
דרך נוספת לעשות זאת, שנראה שאף אחד לא הזכיר, היא לשייך את הגרף שלך ל-QueryDef שנשמר בודד, ולאחר מכן בזמן ריצה, להחליף את ה-QueryDef. כעת, אני לא ממליץ לשנות QueryDefs שמורים עבור רוב ההקשרים מכיוון שזה גורם לנפיחות חזיתית ובדרך כלל אפילו לא הכרחי (ברוב ההקשרים שבהם אתה משתמש ב-QueryDefs שמורים ניתן לסנן בצורה כזו או אחרת בהקשר שבו הם השתמשו, עבור לדוגמה, כאחד מטפסי RecordSource, אתה פשוט מעביר ארגומנט אחד ל-DoCmd.OpenForm).
הגרפים שונים מכיוון שלא ניתן לשנות גרפי SQL בזמן ריצה.
כמה מהם הציעו פרמטרים, אבל פתיחת טופס עם גרף עליו המשתמש במחרוזת SQL עם פרמטרים הולכת להופיע בדיאלוגים של ברירת מחדל של פרמטרים. דרך אחת להימנע מכך היא להשתמש בטופס דו-שיח כדי לאסוף קריטריונים, ולאחר מכן להגדיר הפניות לפקדים בתצוגת הדו-שיח כפרמטרים וכו':
פרמטרים!! ארוך;
אם אתה משתמש בקישורי טפסים, חשוב שתעשה זאת מכיוון שהחל מ-Access 2002, שירות הביטוי Jet לא תמיד מטפל בהם בצורה נכונה כאשר הפקדים הם Null. הגדרתם כפרמטרים מתקן בעיה זו (שלא הייתה קיימת לפני Access XP).
מצב אחד שבו עליך לשכתב את QueryDef עבור גרף הוא אם אתה רוצה לאפשר למשתמש לבחור N במשפט TOP N SQL. במילים אחרות, אם אתה רוצה להיות מסוגל לבחור TOP 5 או TOP 10 או TOP 20, תצטרך לשנות את ה-QueryDef השמור מכיוון שלא ניתן להגדיר את N.
הגישה מאפשרת ליצור באופן תכנותי מחרוזות שאילתות של SQL, כמו גם מחרוזות המשמשות כערכים למאפיינים של טפסים, דוחות וכו', פרמטרי פונקציות וכו', שחייבים גם הם לעמוד בתחביר SQL. יחד עם זאת, עלינו לזכור שגם הקבועים הכלולים בשורה כזו חייבים להיות מעוצבים לפי כללי SQL, כלומר:
אם זה מופר, ההשפעות הבאות אפשריות:
להלן בכל סעיף דוגמה למחרוזת SQL שתיווצר כאשר תיצור אותה באופן תכנותי, ואחריה קוד ה-VBA שיוצר אותה. להלן המלצה שימושית מאוד.
1. שימוש במספרים
SELECT * FROM Table WHERE (((טבלה .כמות)= 12
.197
));
VBA v1
Dim q As Single q = 12
.197
strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" & q & "));"
VBA v2
Dim q As String q = "12,197" strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" & Str (q) & "));"
הערה:
2. שימוש בחוטים
SELECT * FROM Table WHERE (((Table .Name)="All" ));
VBA v1
Dim q As String q = "הכל" strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" "" & DoubleQuote(q) & "" "));"
VBA v2
Dim q As String q = "הכל" strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)="" & DoubleApostrophe(q) & "" ));"
הערה:
דוגמא:
מצב דגימה:
a"a"s SQL:
WHERE field=" a""a"s"VBA:
strWhere = " WHERE field=""" & "a""""a"s" & """
"
דוגמא:
מצב דגימה:
a"a"s SQL:
WHERE field=" a"a""s"VBA:
strWhere = " WHERE field="" & "a""a""s" & ""
"
Public Function Replace97(StrMain As String , StrFind As String , StrZam As String ) As String On Error GoTo err Dim pos As Long If StrFind = "" Then GoTo err If StrMain = "" Then Replace97 = StrZam: Exit Function Do Until InStr( 1
, StrMain, StrFind) = 0
pos = InStr( 1
, StrMain, StrFind) StrMain = mid (StrMain, 1
,פוזי- 1
) & StrZam & mid (StrMain, pos + Len(StrFind), Len(StrMain)) Loop Replace97 = StrMain Exit Function Err: Replace97 = StrMain End Function
3. שימוש בתאריכים
SELECT * FROM Table WHERE (((Table .TimeOpen)=# 3
/31
/2003
11
:17
:19
#));
VBA
עמום q כתאריך q = עכשיו strSQL = "בחר * " _ & "מטבלה " _ & "WHERE (((Table.TimeOpen)=#" & פורמט (ש, "mm\/dd\/yy hh\:mm \:ss") & "#));"
הערה:
לאחר שחיברתי מחרוזת כזו המכילה פקודת SQL, ושליחתו לביצוע עלולה לגרום לשגיאה. במקרה זה, הדפס מחרוזת זו בחלון ניפוי הבאגים והסתכל עליה בעיניים. אולי השגיאה תתפוס מיד את עיניך. אם זה לא עובד, צור שאילתה חדשה במעצב השאילתות, עבור למצב SQL, הכנס שם את טקסט השאילתה והפעל אותו. אם יש שגיאה, היא תוצג בצורה ברורה יותר.