Аппараттық және бағдарламалық қамтамасыз етуді орнату

Vba sql сұраулары. VBA жүйесінде SQL сұрау жолын қалыптастыру

Қол жеткізу"myQuery" деп аталатын сұрау құрастырушымен жасалған сұрауды сақтады. Деректер базасы жүйеге ODBC қосылымы арқылы қосылады. Макростардың барлығы қамтылған.

Excelарқылы дерекқорға қосылу үшін ADODB қосылымы бар

ADODB.Connection ретінде күңгірттеу ADODB.Recordset ретінде күңгірттеу con = Жаңа ADODB.Connection with con .Provider = "Microsoft.ACE.OLEDB.12.0". "MyDatabase.accdb" ашыңыз.

Әдетте сіз жай ғана SQL-ді жазасыз, ол өте жақсы, содан кейін жай ғана осындай нәрсені жасаңыз

Dim sqlQuery Жол ретінде sqlQuery = "Таңдау * менің кестемнен" Орнату rs = Жаңа ADODB.Recordset rs.Open sqlQuery, con, ...

Бірақ мен қол жеткізу дерекқорында сақталған сұрауға қол жеткізгім келеді. Мен жаңа ғана қосылған дерекқордағы сақталған сұрауды қалай шақыруға болады.

Қазірдің өзінде тырысты

  1. con.Execute("EXEC myQuery"), бірақ ол маған myQuery таба алмайтынын айтты.
  2. rs. "myQuery" тармағын ашыңыз, conбірақ бұл жарамсыз және одан SELECT /etc мәлімдемелерін қажет етеді
vba excel-vba ms-access-2007 adodb excel

5 Жауап


6

Менің ойымша, сіз оны сақталған процедура ретінде қарастыра аласыз.

Егер Dim sqlQuery As String алдынан бастасақ

Жаңа ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()

Содан кейін жазбалар жинағы жұмысын алыңыз.


1

Сіз дерлік болдыңыз

ADODB.Connection ретінде күңгірттеу ADODB.Recordset ретінде күңгірттеу con = Жаңа ADODB.Connection with con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "z:\docs\MyDatabase.accdb" End with con.Execute «Менің сұрауым»

Эксекті бір жаққа қалдырыңыз.

Сондай-ақ опцияларды қосуға болады, бұл біраз ескі, бірақ көмектесуі керек:


0

Бұл бұзу түрі, бірақ сіз сұрауды сұрай аласыз. Яғни, sql жолын келесімен ауыстырыңыз:

SqlQuery = "QueryName FROM FROM * ТАҢДАУ;"

Бұл бағдарламаны іске қоспас бұрын, сіз негіз екеніне көз жеткізуіңіз керек Деректерге қол жеткізуқұтқарылды, яғни. Ctrl+S пернелер тіркесімін басыңыз (ол Access бағдарламасында сұрауды орындау жеткіліксіз).


0

Мен Access бағдарламасында бұрыннан сақталған жаңарту сұрауын іске қоса алдым:

Connection."My_Update_Query_Alreaded_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc орындаңыз.

Сұрау атауындағы бос орындарды Access дерекқорында да, орындау мәлімдемесінде де астын сызулармен ауыстырмайынша, бұл маған қателер берді.


0

Бұл ағынның құрылғанына көп уақыт болды. Егер мен бәрін дұрыс түсінсем, мен пайдалы нәрсе қоса аламын. Мен ОП сипаттайтын нәрсеге атау бердім, бұл DAO немесе ADOBD арқылы VBA жүйесінде іске қосу үшін ACCDB ішінде сақталған сұраудан SQL пайдалану процесі. Мен оған «объект сипатын жеткізуші» атауын бердім, тіпті жазбаларымдағы OPP аббревиатурасымен және нысан атауы үшін префикс/суффикспен.

Идея мынада: ACCDB ішіндегі бар нысан (әдетте сұрау) VBA-да пайдаланылуы қажет сипатты (әдетте SQL) көрсетеді. Мен бұл үшін сұраулардан SQL сору үшін ғана функцияны құрастырдым; төменде қараңыз. Ескерту: кешіріңіз, бірақ мұның бәрі DAO-да, мен ADODB-ті көп қолданбаймын. Сізге бұл идеялар әлі де пайдалы болады деп үміттенемін.

Мен тіпті осы OPP сұрауларынан келетін SQL-де ауыстыру параметрлерін пайдалану/енгізу әдісін әзірлеуге дейін бардым. Мен VBA жүйесінде SQL қолданбас бұрын ауыстыруды орындау үшін VBA.Replace() пайдаланамын.

DAO нысанының ACCDB ішіндегі SQL сұрауына жолы келесідей:

MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL

Нені ауыстыру керектігін бағалау және нақты дерекқорда болмайтын параметр үшін әдеттен тыс атауды таңдау арқылы ауыстырылатын параметрлерді пайдаланамын. Көбінесе, мен жасаған жалғыз ауыстырулар - өріс немесе кесте атаулары немесе WHERE және HAVING сөйлем өрнектері. Сондықтан мен оларды «(ReplaceMe00000001)» деп атаймын, содан кейін тапсырманы орындау үшін Replace() функциясын қолданамын...

SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter") ...

содан кейін VBA ішінде sqlText пайдаланыңыз. Міне жұмыс мысалы:

Қоғамдық функция MySqlThing() Dim sqlText Жол ретінде Dim myParamater Жол ретінде Dim myExpression Жол ретінде "Бәрін орнатыңыз. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression "/SomeD17O2" ауыстыру . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Одан кейін SQL пайдаланыңыз. db.Execute sqlText, dbFailOnError Аяқтау функциясы getSqlTextFromQuery(ByVal oppName ретінде String) DDAf Asim.App Asim.Daf Dim Dim Dim Asim Asim.App Asim.Access. DAO.QueryDefs Dim qdef ретінде DAO.QueryDef Dim sqlText ретінде Жол ретінде орнату Бағдарлама = Access.Application жинағы db = app.CurrentDb орнату qdefs = db.QueryDefs орнату qdef = qdefs(oppName) oppGetSqlText Function.SLd


Excel бағдарламасындағы Access MakeTable бағдарламасында сұрауды іске қосыңыз

Менде бар excel файлыоны автоматтандыру керек. Пайдаланушы Excel есебін ашқанда, олардан деректерді жаңарту сұралады. Егер олар иә десе, мен сұрауды орындауым керек...


JS ActiveX ADO жүйесінен MS Access 2013 бағдарламасында қарау сұрауы арқылы VBA функциясын орындаңыз

Қалай орындау керек VBA макросы JS ActiveX ADO ұсынған MS Access 2013 бағдарламасындағы қарау сұрауы арқылы? VBA функциясы ағымдағы пайдаланушыны келесі арқылы кіруге мүмкіндік береді: Public Declare...


Excel бағдарламасынан Access db ішіндегі "функция" бар сақталған сұрауды орындаңыз

Мен Excel vba жүйесінен кіру дерекқорында сақталған сұрауды іске қосуға тырысамын. Егер мен оны кіру дерекқорында ашып, іске қоссам, сұрау жақсы жұмыс істейді, бірақ оны модульден іске қосқан кезде қате жібереді...


MS Access - VBA жүйесінде аты бойынша сақталған сұранысты орындау

MS Access 2007-де сақталған сұранысты VBA-да қалай орындауға болады? Мен SQL-ді VBA-ға көшіріп, қойғым келмейді. Мен жай ғана сұрау атын орындаймын. Бұл жұмыс істемейді... VBA сұрауды таба алмайды....


VBA кодындағы ms-access жүйесінде сұранысты қалай орындауға болады?

Дерекқордағы жазбаларды қайтару үшін сұрауды қалай орындауға болады ms-access деректері VBA кодын пайдаланасыз ба?


Excel бағдарламасынан рұқсат сұрауын іске қосыңыз және оған параметрлерді беріңіз

MS access db-де кодтан сұранысты қалай орындауға болады Excel VBAнемесе макрос. MS-Access сұрауы Excel бағдарламасынан берілуі қажет кейбір параметрлерді алады. Рақмет сізге


Excel жұмыс кітабын Access 2010 VBA бағдарламасынан басқару

Менде келесі жазбаға өте ұқсас жағдай бар: vba арқылы графикті құру үшін excel 2010 нұсқасына рұқсат сұрау Менің жағдайда кестені экспорттаудамын, бірақ файл үшін көп нәрсе істегім келеді...


Access VBA жүйесінен SQL серверінің түпкілікті сұрауын орындаңыз

Менде Access 2007 бағдарламасында сақталған ЖАҢАРТУ арқылы өту сұрауы бар. Өткізу сұрауын екі рет басқанда, ол сәтті орындалады. Бұл сұрауды VBA-дан қалай орындауға болады? Мен...


VBA арқылы Excel бағдарламасынан Access бағдарламасына үлкен деректер жинағын импорттаңыз

Менде Excel бағдарламасынан Access бағдарламасына импорттау қажет үлкен деректер жинағы бар (~800 мың жол). Дегенмен, мен 90% қосатын белгілі бір баған мәні бар жолдарды елемеуге болады...


Excel vba ішінде кез келген MDX сұрауы бар ма?

Excel VBA ішінде MDX сұрауын орындау тәсілі бар ма? Мен мұны SQL жағдайында сияқты ADO арқылы жасауға болады деп ойладым (иә, мен SQL-тің MDX-тен айырмашылығы бар екенін білемін - бұл мәселе бірнеше рет...

Access myQuery Query Builder көмегімен жасалған сұрауды сақтады. Мәліметтер қоры жүйеге ODBC қосылымы арқылы қосылған. Макростардың барлығы қамтылған.

Excel бағдарламасы дерекқорға қосылу үшін ADODB қосылымын орнатады

ADODB.Connection ретінде күңгірттеу ADODB.Recordset ретінде күңгірттеу con = Жаңа ADODB.Connection with con .Provider = "Microsoft.ACE.OLEDB.12.0". "MyDatabase.accdb" ашыңыз.

Әдетте сіз тамаша жұмыс істейтін SQL-ді жазасыз, содан кейін сіз жай ғана осындай нәрсені жасайсыз

Dim sqlQuery Жол ретінде sqlQuery = "Таңдау * менің кестемнен" Орнату rs = Жаңа ADODB.Recordset rs.Open sqlQuery, con, ...

Бірақ мен қол жеткізу дерекқорында сақталған сұрауға қол жеткізгім келеді. Мен жаңа ғана қосылған дерекқордағы сақталған сұрауды қалай шақырамын.

Қазірдің өзінде тырысты

  1. con.Execute("EXEC myQuery"), бірақ ол маған myQuery таба алмағанын айтты.
  2. rs.Open "myQuery" бірақ ол жарамсыз және одан SELECT/etc мәлімдемелерін қажет етеді

5 жауап

Менің ойымша, сіз мұны сақталған процедура ретінде қарастыра аласыз.

Егер Dim sqlQuery As String алдынан бастасақ

Жаңа ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()

Содан кейін жазбалар жинағымен жұмысыңызды алыңыз.

дерлік сонда болдың

ADODB.Connection ретінде күңгірттеу ADODB.Recordset ретінде күңгірттеу con = Жаңа ADODB.Connection with con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "z:\docs\MyDatabase.accdb" End with con.Execute «Менің сұрауым»

Exec-ті қалдырыңыз.

Сондай-ақ параметрлерді қосуға болады, бұл біраз ескі, бірақ көмектесуі керек: Excel деректерімен және мүмкін макроспен Access дерекқорындағы 2 өрісті жаңарту

Мен Access бағдарламасында бұрыннан сақталған жаңарту сұрауын іске қоса алдым:

Connection."My_Update_Query_Alreaded_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc орындаңыз.

Сұрау атауындағы бос орындарды Access дерекқорында да, орындау мәлімдемесінде де астын сызулармен ауыстырғанша, бұл маған қателер берді.

Бұл бұзу жұмысының бір түрі, бірақ сіз сұрауды сұрай аласыз. Яғни, SQL жолын келесімен ауыстырыңыз:

SqlQuery = "QueryName FROM FROM * ТАҢДАУ;"

Бастамас бұрын Access дерекқорының сақталғанына көз жеткізу керек, яғни. Ctrl + S пернелер тіркесімін басыңыз (сұрау Access бағдарламасында орындалуы үшін жеткіліксіз).

Бұл ағынның құрылғанына көп уақыт болды. Егер мен дұрыс түсінсем, пайдалы нәрсе қоса аламын. Мен ОС сипаттайтын нәрсеге атау бердім: бұл DAO немесе ADOBD арқылы VBA жүйесінде іске қосу үшін ACCDB ішінде сақталған сұраудан SQL пайдалану процесі. Мен оны «Объектінің меншік провайдері» деп атадым, тіпті жазбаларымда OPP аббревиатурасымен және нысан атауының префиксі/суффиксімен.

Идея мынада: ACCDB ішіндегі бар нысан (әдетте сұрау) VBA-да пайдаланылуы қажет сипатты (әдетте SQL) көрсетеді. Мен бұл үшін сұраулардан SQL сору үшін ғана функцияны құрастырдым; Төменде қараңыз. Ескерту: кешіріңіз, бірақ мұның бәрі DAO-да, мен ADODB-ті көп қолданбаймын. Сіз әлі де пайдалы идеяларды табасыз деп үміттенемін.

Мен тіпті осы OPP сұрауларынан келетін SQL-де алмастырылған параметрлерді пайдалану/енгізу әдісін әзірлеуге дейін бардым. Мен бұрын ауыстыру үшін VBA.Replace() пайдаланамын SQL пайдалану VBA тілінде.

DAO нысанының ACCDB ішіндегі SQL сұрауына жолы келесідей:

MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL

Мен ауыстырылатын параметрлерді нені ауыстыру керектігін бағалау және нақты дерекқорда болмауы мүмкін параметр үшін әдеттен тыс атауды таңдау арқылы пайдаланамын. Көбінесе, мен жасаған жалғыз ауыстырулар - өріс немесе кесте атаулары немесе WHERE және HAVING сөйлем өрнектері. Сондықтан мен оларды «(ReplaceMe00000001)» деп атаймын, содан кейін тапсырманы орындау үшін Replace() функциясын қолданамын...

SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter")

Содан кейін VBA жүйесінде sqlText пайдаланыңыз. Міне жұмыс мысалы:

Қоғамдық функция MySqlThing() Dim sqlText Жол ретінде Dim myParamater Жол ретінде Dim myExpression Жол ретінде "Бәрін орнатыңыз. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression "/SomeD17O2" ауыстыру . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Одан кейін SQL пайдаланыңыз. db.Execute sqlText, dbFailOnError Аяқтау функциясы getSqlTextFromQuery(ByVal oppName ретінде String) DDAf Asim.App Asim.Daf Dim Dim Dim Asim Asim.App Asim.Access. DAO.QueryDefs Dim qdef ретінде DAO.QueryDef Dim sqlText ретінде Жол ретінде орнату Бағдарлама = Access.Application жинағы db = app.CurrentDb орнату qdefs = db.QueryDefs орнату qdef = qdefs(oppName) oppGetSqlText Function.SLd

Макроспен OpenRequest Access дерекқорларында таңдалған сұрауларды және көлденең сұрауларды Деректер парағы көрінісінде, Дизайн көрінісінде немесе Алдын ала қарау көрінісінде ашуға болады. Бұл әрекет өзгерту сұрауын бастайды. Сондай-ақ сұрау үшін деректерді енгізу режимін таңдауға болады.

Ескерту:Бұл макрос тек Access дерекқор ортасында (MDB немесе ACCDB) қол жетімді. Access Project Environment (ADP) қолданып жатсаңыз, макростарды қараңыз OpenView, Сақталған процедураны ашыңызжәне OpenFunction. макро OpenRequest Access веб қолданбаларында қол жетімді емес.

Параметр

макро OpenRequestмынадай аргументтер бар:

Макроаргумент

Сипаттама

Сұраныс аты

Ашылатын сұраудың атауы. Ашылмалы тізімнен атауды таңдаңыз. Бұл талап етілетін аргумент.

Кітапхана дерекқорында макрос бар макросты орындау кезінде OpenRequest, Access алдымен кітапхана дерекқорында, содан кейін ағымдағы дерекқорда осы атпен сұрауды іздейді.

Сұрау ашылатын көрініс. Өрісте таңдаңыз Көрумағынасы кесте, Конструктор, Алдын ала қарау, Жиынтық кестенемесе Жиынтық диаграмма. Әдепкі болып табылады кесте.

Ескерту:Жиынтық кесте және жиынтық диаграмма көріністері Access 2013 нұсқасынан басталатын Access нұсқаларында қолжетімді емес.

Деректер режимі

Сұрау үшін деректерді енгізу режимі. Бұл параметр деректер парағы көрінісінде ашылған сұрауларға ғана қолданылады. таңдаңыз қосу(пайдаланушылар жаңа жазбаларды қоса алады, бірақ барларын өзгерте алмайды), Өзгерту(пайдаланушылар өзгерте алады бар жазбалар, және жаңаларын қосыңыз) немесе Тек оқу үшін(пайдаланушылар тек жазбаларды көре алады). Әдепкі мән Өзгерту.

Ескертпелер

Егер дәлел үшін Көрумәнді орнату кесте, Access таңдау сұрауы, айқас сұрау, кәсіподақ сұрауы немесе сервер сұрауы пайдаланылғанда нәтижелер жинағын көрсетеді, сипат ReturnsRecordsмаңызды Иә. Егер бұл өзгерту сұрауы, деректерді анықтау сұрауы немесе серверге, сипатқа сұрау болса ReturnsRecordsорнатылған Жоқ, сұрау орындалады.

макро OpenRequestшарлау аймағындағы сұрауды екі рет басу немесе оны басу сияқты оң жақ түймешікті басыңызшарлау аймағында тінтуірді басыңыз және таңдауды қараңыз. Макросты пайдаланған кезде қосымша опцияларды таңдауға болады.

Кеңес

    Сұрауды шарлау тақтасынан макрос құрастырушы терезесіне сүйреп апаруға болады. Бұл автоматты түрде макрос жасайды. OpenRequest, ол сұрауды деректер парағы көрінісінде ашады.

    Сұрау ашық кезде конструкторға ауыссаңыз, аргумент мәні Деректер режиміжойылады. Бұл параметр пайдаланушы деректер парағы көрінісіне оралса да әсер етпейді.

    Егер өзгерту сұрауларын іске қосқанда әдетте пайда болатын жүйелік хабарларды көрсеткіңіз келмесе (олар бұл өзгерту сұрауы және оған әсер ететін жазбалар саны дейді), оларды макрос арқылы өшіруге болады. Ескертуді орнату.

Макросты іске қосу үшін OpenRequestмодульде Visual Basicқолданбалар үшін (VBA) әдісті пайдаланыңыз OpenRequestобъект DoCmd.

Access бағдарламасы SQL сұрау жолдарын, сондай-ақ SQL синтаксисіне сәйкес болуы керек пішіндердің, есептердің және т.б., функция параметрлерінің және т.б. қасиеттерінің мәндері ретінде қызмет ететін жолдарды бағдарламалық түрде жасауға мүмкіндік береді. Сонымен қатар, мұндай жолға енгізілген тұрақтылар да сәйкес пішімделуі керек екенін есте ұстаған жөн SQL ережелері, атап айтқанда:

  • сандарда ондық бөлгіш нүкте болуы керек,
  • жолдар тырнақшаға немесе апострофқа алынуы керек (және жолдың ішіндегі сәйкесінше тырнақша немесе апострофтар екі еселенеді),
  • Күндер хэштермен қоршалып, АҚШ пішімінде (мм/кк/жжж) бөлгіш ретінде қиғаш сызықпен жазылуы керек.

    Егер бұл бұзылса, келесі әсерлер болуы мүмкін:

  • нүктенің орнына үтір қойылған 10,5 сияқты сан 10 және 5 екі санның тізімі ретінде қабылданады, бұл өрістер санында қандай да бір сәйкессіздікке әкеледі,
  • Вася сияқты тырнақшасыз және апострофсыз жол өріс атауы ретінде, егер мұндай өріс бар болса немесе бірден сұралатын параметр атауы ретінде қарастырылады,
  • 1/2/2010 немесе 1-2-2010 сияқты жолақтарсыз күн арифметикалық өрнек ретінде қарастырылады (тиісінше бөлу және азайту арқылы),
  • 1.2.2010 сияқты күн екі ондық бөлшектен тұратын бөлшек сан ретінде түсіндіріледі және қатеге әкеледі,
  • жолақтары бар күн, бірақ АҚШ пішімінде емес, күн ретінде қарастырылады, бірақ басқаша (күн мен ай ауыстырылады).

    Төменде әрбір бөлімде SQL жолының мысалы берілген, оны қашан алу керек бағдарлама құру, одан кейін оны жасайтын VBA коды. Төменде өте пайдалы кеңестер берілген.

    1. Сандарды қолдану

    Кестеден * ТАҢДАҢЫЗ (((Кесте .Саны)= 12 .197 ));
    VBA v1

    Dim q Жалғыз q = 12 .197 strSQL = "ТАҢДАУ * " _ & "Кестеден" _ & "ҚАЙДА (((Кесте.Саны)=" & q & "));"
    VBA v2

    Dim q As String q = "12,197" strSQL = "SELECT * " _ & "FROM Кесте" _ & "WHERE (((Кесте.Quanty)=" & Str (q) & "));"
    Ескерту:

  • VBA v1- бүтін сандар үшін. Үшін бөлшек сандарбұл жүйе бөлгіш нүкте болғанда ғана ерекше жағдай.
  • VBA v2- дұрысырақ нұсқа, өйткені классикалық бағдарламалауда тек жолдарды жолдармен біріктіруге болады, ал VBA v1 жасырын түр түрлендіруді пайдаланады, дегенмен бүтін сандар үшін бұл әдіс туралы шағымдар болмаған. (Мысал жүйелік бөлгіш үтір болған кезде берілген.)
  • Кейде CStr() функциясы түрлендіру үшін де пайдаланылады, бірақ ол әрқашан қолданыла бермейді, өйткені санды жол ретінде қайтарады, мұнда ол жүйелік бөлгіш арқылы жазылады, ал SQL тек нүктені бөлгіш ретінде қабылдайды.
  • NB!Атиптік жүйе бөлгіштерін пайдаланған кезде жоғарыда келтірілген мысалдар жұмыс істемеуі мүмкін, мұндай жағдайларда жүйелік бөлгішті нүктемен бағдарламалық түрде ауыстыру қажет. Төменде жүйе бөлгішті қайтаратын функция берілген.
    GetDecimalSeparator() функциясы GetDecimalSeparator жолы ретінде = Пішім ( 0 #, "." ) Аяқтау функциясы Сондай-ақ, бұл жағдайда кейбір стандартты Access әрекеттері жұмыс істемеуі мүмкін екенін ескеру керек.

    2. Жолдарды қолдану

    ТАҢДАУ * Кестеден WHERE (((Кесте .Атауы)="Барлығы" ));
    VBA v1

    Dim q As String q = "Барлығы" strSQL = "SELECT * " _ & "FROM Кесте" _ & "WHERE ((((Table.Quanty)=" "" & DoubleQuote(q) & "" "));"
    VBA v2

    Dim q Жол ретінде q = "Барлығы" strSQL = "SELECT * " _ & "Кестеден" _ & "ҚАЙДА (((Кесте.Саны)="" & DoubleApostrophe(q) & "" ));"
    Ескерту:

  • VBA v1: DoubleQuote() екі еселенетін функция дәйексөздер.

    Мысалы:
    үлгі шарты:
    a"a"s SQL:
    WHERE өріс = a""a"s"VBA:
    strWhere=" WHERE өрісі=""" & "a""""a"s" & """ "

  • VBAv2:: DoubleApostrophe() – екі еселенетін функция апострофтар.

    Мысалы:
    үлгі шарты:
    a"a"s SQL:
    WHERE өріс = a"a""s"VBA:
    strWhere=" WHERE өріс =" & "a""a""s" & "" "

  • Жоғарыда аталған DoubleQuote және DoubleApostrophe функциялары кірістірілген Access функциялары ЕМЕС, бірақ реттелетін функциялар, оны жүзеге асыру бағдарламалаушының өз еркінде. Атап айтқанда, Access 2000 және одан жоғары нұсқаларында осы мақсат үшін кірістірілген Ауыстыру функциясын пайдалануға болады, ал 97 және одан төменірек нұсқаларында келесі функцияны пайдалануға болады:

    Қоғамдық функция Replace97(StrMain As String , StrFind As String , StrZam as String ) As String on Error GoTo err Dim pos Ұзындығы болса, StrFind = "" Содан кейін GoTo err Егер StrMain = "" Содан кейін Replace97 = StrZam: Функциядан шығу InStr( дейін орындаңыз) 1 , StrMain, StrFind) = 0 pos = InStr( 1 , StrMain, StrFind) StrMain = ортасы (StrMain, 1 ,pos - 1 ) & StrZam & mid (StrMain, pos + Len(StrFind), Len(StrMain)) Цикл Replace97 = StrMain шығу функциясы қате: Replace97 = StrMain соңы функциясы
    3. Күндерді пайдалану

    Кестеден * ТАҢДАҢЫЗ (((Кесте .TimeOpen)=# 3 /31 /2003 11 :17 :19 #));
    VBA

    Dim q Күні ретінде q = Қазір strSQL = "SELECT * " _ & "FROM Cable" _ & "WHERE (((Table.TimeOpen)=#" & Формат (q, "mm\/dd\/yy hh\:mm" \:ss" ) & "#));"
    Ескерту:

  • Microsoft JET SQL американдық форматтағы күндерде жұмыс істейді, яғни. жоғарыда көрсетілген нысанда Ай/Күн/Жыл.
  • # (ол бүкіл күн-уақыт тұрақтысының айналасына айналады) және \ (ол / және : тілмен ауыстырылуын болдырмайды, бұл Пішім функциясы орындайтын және SQL пәрменінің дұрыс жұмыс істеуіне жол бермейді) өткізіп алмаңыз. .
  • Мұнда оқу ұсынылады: күн/уақыт сақтау әдістері туралы.
  • NB!Күнді бүтін санға (немесе ұзын) түрлендіруді қолданбауыңыз керек, себебі Access-те және SQL серверінде әртүрлі сандар бір күнге сәйкес келеді және салыстыру кезінде күтпеген нәтиже алуға болады.

    Құрамында осындай жолды құрастыру арқылы SQL пәрмені, және оны орындауға жіберу қатеге әкелуі мүмкін. Бұл жағдайда осы жолды жөндеу терезесіне басып шығарыңыз және оған көзбен қараңыз. Мүмкін қате бірден көзіңізге түседі. Егер ол асықпаса, сұраныс дизайнерінде жаңа сұраныс жасаңыз, SQL режиміне ауысыңыз, сұрау мәтінін сол жерге қойыңыз және оны орындау үшін іске қосыңыз. Қате бар болса, ол нақтырақ көрсетіледі.

  • Бұл сабақ туралы SQL сұрауларыдерекқорына VBA қатынасы. Біз VBA сұрауларының дерекқорға INSERT, UPDATE, DELETE қалай орындалатынын қарастырамыз, сонымен қатар SELECT сұрауынан нақты мәнді алу жолын үйренеміз.

    Бағдарлама жасайтындар VBA қатынасыбазамен жұмыс істеу кезінде SQL деректерісерверлер, INSERT, UPDATE немесе қарапайым SQL SELECT сұрауы болсын, дерекқорға SQL сұрауын жіберу сияқты қарапайым және қажетті тапсырмамен жиі кездеседі. Біз жаңадан келген бағдарламашылар болғандықтан, біз де мұны істей алуымыз керек, сондықтан бүгін біз мұны істейміз.

    Біз SQL серверінен деректерді алу тақырыбын қозғадық, онда біз бұл деректерді алу үшін VBA-да код жаздық, мысалы, MSSql 2008-тен мәтіндік файлға деректерді жүктеу туралы мақалада немесе материалда аздап қозғадық. Access бағдарламасынан Word және Excel үлгісіне деректерді жүктеп салу, бірақ қандай да бір жолмен біз оны үстірт қарастырдық және бүгін мен бұл туралы толығырақ айтуды ұсынамын.

    Ескерту! Төмендегі барлық мысалдар Access 2003 ADP жобасы және MSSql 2008 дерекқоры арқылы талқыланады.

    Мысалдар үшін бастапқы деректер

    Бізде жылдағы айлардың сандары мен атауларын қамтитын test_table кестесі бар делік (сұраулар басқару студиясы)

    КЕСТЕ ҚҰРУ .( NULL ЕМЕС, (50) NULL) ON GO

    Мен айтқанымдай, біз MS SQL 2008 бағдарламасымен жұмыс істеу үшін конфигурацияланған ADP жобасын қолданамыз, онда мен сынақ пішінін жасап, жазуы бар бастау түймешігін қостым. «Жүгіру», ол біздің кодты сынауымыз керек, яғни. біз барлық кодты оқиға өңдегішіне жазамыз » Түймені басу».

    VBA ішіндегі INSERT, UPDATE, DELETE деректер базасының сұраулары

    Ұзақ уақыт бойы сүйреп кетпеу үшін, бастайық, сынақ кестемізге жол қосу керек делік ( коды түсіндіріледі)/

    Private Sub start_Click() "Сұрау жолын сақтау үшін айнымалыны жариялау Dim sql_query Жол ретінде "Оған қажет сұрауды жазыңыз sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Орындау оны DoCmd.RunSQL sql_query End Sub

    Бұл жағдайда сұрау ағымдағы дерекқор қосылымының параметрлері арқылы орындалады. Деректердің қосылғанын немесе қосылмағанын тексере аламыз.

    Көріп отырғаныңыздай, деректер енгізілді.

    Бір жолды жою үшін келесі кодты жазамыз.

    Private Sub start_Click() "Сұрау жолын сақтау үшін айнымалы мәнді Dim sql_query Жол ретінде жариялау "Оған жою сұрауын жазыңыз sql_query = "DELETE test_table WHERE id = 6" "Орындаңыз DoCmd.RunSQL Subsql_query End

    Тексерсек, қалаған жолдың жойылғанын көреміз.

    Деректерді жаңарту үшін sql_query айнымалысына жаңарту сұрауын жазамыз, мағынасы түсінікті деп үміттенемін.

    VBA ішіндегі дерекқорға сұрауды ТАҢДАҢЫЗ

    Бұл жерде басқа SQL конструкцияларына қарағанда біршама қызықтырақ.

    Біріншіден, кестеден барлық деректерді алу керек делік, және, мысалы, біз оны өңдеп, хабарламада көрсетеміз, және сіз, әрине, оны басқа мақсаттарда пайдалана аласыз, ол үшін біз келесіні жазамыз. код

    Private Sub start_Click() "Айнымалы мәндерді жариялау "Дерекқордан жазбалар жинағы үшін Dim RS As ADODB.Recordset "Сұрау жолы Dim sql_query As String "Хабардағы жалпы деректерді шығару жолы Dim str Жол ретінде "Жазбалар жинағы үшін жаңа нысан жасау RS = Жаңа ADODB .Recordset "Сұрау жолы sql_query = "Test_table FROM id, name_mon ТАҢДАҢЫЗ" "str = str & RS.Fields("id") & "-" & RS хабарламасын көрсету үшін ағымдағы жоба қосылымының параметрлерін пайдаланып сұрауды орындаңыз. Fields("name_mon") & vbnewline "келесі жазбаға өту RS.MoveNext Wend "Шығыс хабарлама msgbox str End Sub"

    Мұнда біз жазбалар жинағындағы барлық мәндерді айналдыру үшін VBA Access Loops қолданып жатырмыз.

    Бірақ көбінесе жазбалар жинағынан барлық мәндерді емес, тек біреуін, мысалы, оның коды бойынша айдың атын алу қажет. Бұл үшін циклды пайдалану қандай да бір қымбатқа түседі, сондықтан біз жай ғана бір мәнді қайтаратын және оған қол жеткізетін сұрауды жаза аламыз, мысалы, біз айдың атын 5 кодымен аламыз.

    Private Sub start_Click() "Айнымалы мәндерді жариялау "Дерекқордан жазбалар жинағы үшін Dim RS As ADODB.Recordset "Сұрау жолы Dim sql_query As String" Соңғы мәнді көрсетуге арналған жол Dim str As String "Жазбалар жинағы үшін жаңа нысан жасау RS = Жаңа ADODB.Recordset "Сұрау жолы sql_query = "test_table FROM id_mon ТАҢДАУ id = 5" "Ағымдағы жоба қосылымының параметрлерін пайдаланып сұрауды орындау RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Біздің мәнді алу str =(RS.Field) ) msgbox str end sub

    Әмбебаптық үшін біз қазірдің өзінде ұяшықтың атымен емес, оның индексімен, яғни. 0, бұл ең бірінші мән Жазбалар жинағы, соңында біз мәнге ие болдық «мамыр».

    Көріп отырғаныңыздай, бәрі өте қарапайым. Дерекқордан белгілі бір мәнді жиі алу қажет болса ( соңғы мысалдағыдай), содан кейін барлық кодты бөлек функцияда шығаруды ұсынамын (VBA Access 2003 бағдарламасында функцияны қалай жазу керек) бір енгізу параметрімен, мысалы, ай коды ( біздің мысалды ескере отырып) және жай ғана, бұл мәнді көрсету қажет болған жағдайда, қажетті параметрмен бізге қажет функцияны шақырыңыз, және осымен біз VBA кодын айтарлықтай азайтамыз және бағдарламамыздың қабылдауын жақсартамыз.

    Бүгінге бәрі осы. Іске сәт!

    Мақала ұнады ма? Достарыңызбен бөлісіңіз!
    Бұл мақала пайдалы болды ма?
    Иә
    Жоқ
    Пікіріңізге рахмет!
    Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
    Рақмет сізге. Сіздің хабарламаңыз жіберілді
    Мәтіннен қате таптыңыз ба?
    Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!