-Ïîèñê ïî äíåâíèêó

Ïîèñê ñîîáùåíèé â rss_sql_ru_access_programming

 -Ïîäïèñêà ïî e-mail

 

 -Ïîñòîÿííûå ÷èòàòåëè

 -Ñòàòèñòèêà

Ñòàòèñòèêà LiveInternet.ru: ïîêàçàíî êîëè÷åñòâî õèòîâ è ïîñåòèòåëåé
Ñîçäàí: 16.03.2006
Çàïèñåé:
Êîììåíòàðèåâ:
Íàïèñàíî: 4


FAQ: Èñïîëüçîâàíèå CAST, CONVERT, CASE â MS Access, ïàðàìåòðû SQL â Excel, è äð.

Ñðåäà, 15 Èþíÿ 2016 ã. 13:15 + â öèòàòíèê
Âñåì ïðèâåò.
Ïîñêîëüêó íåäàâíî ìíå ïðèøëîñü ðàçáèðàòüñÿ ñ ýòèìè ïðîáëåìàìè, è, êàê ÿ ïîíÿë, ýòî ÷àñòûå âîïðîñû, ðåøèë ïîäåëèòüñÿ ïðèîáðåòåííûì îïûòîì, è íàïèñàòü çäåñü íåñêîëüêî îòâåòîâ.
Ïðîøó êðèòèêîâàòü è êîððåêòèðîâàòü îøèáêè.


Èòàê, âû, ïî ïðèâû÷êå, ïèøåòå â çàïðîñå CAST/CONVERT/CASE, è îíî íå ðàáîòàåò. È íå áóäåò. :(  ïðîâàéäåðàõ (äðàéâåðàõ), êîòîðûå îáðàáàòûâàþò çàïðîñû ê ôàéëàì Access, Excel òàêîé ôóíêöèè íåò. Ïîýòîìó ðàáîòàòü èç Access ñ SQL Server (êîãäà âû äåëàåòå ñâÿçàííóþ òàáëèöó) è èç SQL Server ñ Access/Excel íåóäîáíî. Èñêëþ÷åíèÿ - çàïðîñ èç êîäà VBA è â Excel - ïîäêëþ÷åíèå ê äàííûì SQL Server'à (ÁÅÇ!! èñïîëüçîâàíèÿ Microsoft Query).

1. Êîíâåðñèÿ òèïîâ. Äëÿ êîíâåðñèè òèïîâ â Access èñïîëüçóþòñÿ ôóíêöèè Cint, CLng, CSng, CDbl, CStr, CBool, CDate è äðóãèå àíàëîãè÷íûå. Åñòü ïðîáëåìà - îíè íå âîñïðèíèìàþò NULL, è âîçâðàùàþò îøèáêó.

2. Èñïîëüçîâàíèå àëèàñîâ â Access òðåáóåò îáÿçàòåëüíîãî óêàçàíèÿ êëþ÷åâîãî ñëîâà AS

3. CASE â Access òîæå íåò, íî åñòü ôóíêöèÿ, ïîçâîëÿþùàÿ ÷àñòè÷íî çàìåíèòü åãî: IIf(óñëîâèå, ÷òî_åñëè_èñòèíà, ÷òî_åñëè_ëîæü). Ïðè ïîìîùè íå¸ òàêæå ìîæíî îáîéòè îãðàíè÷åíèå, óêàçàííîå â ïóíêòå 1: iif(ïîëå IS NULL, NULL, CInt(ïîëå)) AS Alias

4. Åñëè âû èç SQL Server ðàáîòàåòå ñ ôàéëîì Access/Excel ÷åðåç äðàéâåð ADO, òî âñå ýòè îãðàíè÷åíèÿ ïðèñóòñòâóþò â ïîëíîé ìåðå. Áîëåå òîãî, Excel, íàïðèìåð, îïðåäåëÿåò òèï äàííûõ â ïîëå ïî ïåðâûì 8 ñòðîêàì, è åñëè çíà÷åíèÿ òàì ïóñòû, òî òèï äàííûõ óñòàíàâëèâàåòñÿ nchar èëè ntext.  ýòîì ñëó÷àå âàø çàïðîñ ìîæåò âûçûâàòü îøèáêè ïðè êîíâåðñèè òèïîâ. Îñîáåííî, êîãäà ó âàñ ôàéë Excel ñîõðàíåí â îäíîì locale, à íà SQL Server - äðóãîé.
Íî è çäåñü åñòü ðåøåíèå.
SELECT field1, field2
FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0'
	, 'Excel 12.0; Database='+@ExcelFileName+'; HDR=No'
	, 'SELECT	iif(F1 IS NULL, NULL, CSng(F1)) AS field1, F2 AS field2 FROM [Sheet1$B4:C]') As t

 ýòîì ïðèìåðå êó÷à ðåøåíèé :)
4.1. èä¸ò âûáîðêà, îãðàíè÷åííàÿ â ëåâîì óãëó ÿ÷åéêîé B4, à â ïðàâîì - ïîñëåäíåé çàïîëíåííîé ÿ÷åéêîé ñòîëáöà C.
4.2. èãíîðèðóþòñÿ èìåíà êîëîíîê, è êîëîíêè àâòîìàòè÷åñêè èìåíóþòñÿ ïî-ïîðÿäêó: F1, F2
4.3. êîíâåðñèÿ òèïà ïðîèñõîäèò íà ñòîðîíå äðàéâåðà ADO, ïîýòîìó èñïîëüçóåòñÿ locale öåëåâîãî ôàéëà (@ExcelFileName).
4.4. âî âíåøíèé çàïðîñ (SQL Server'ó) ïåðåäàþòñÿ óæå êîëîíêè ñ íîâûìè èìåíàìè, è âî âíåøíåì çàïðîñå ñ ýòèìè äàííûìè ìîæíî äåëàòü óæå ÷òî óãîäíî, èñïîëüçóÿ ñèíòàêñèñ SQL Server'à.

5. Åñëè âàì íóæíî ïåðåäàòü ïàðàìåòð èç ÿ÷åéêè Excel â çàïðîñ ê SQL Server, òîò òóò 2 ïóòè: ïðîñòîé è ñëîæíûé. :)
5.1. Ïðîñòîé: èñïîëüçîâàòü Microsoft Query, â çàïðîñå â êà÷åñòâå ïàðàìåòðîâ óêàçàòü çíàê ?.
SELECT field1 FROM table AS t WHERE field2 = ? AND field3 = ? AND NOT field4 = ?
.
Âûïîëíèòü çàïðîñ, ïðè çàïðîñå ïàðàìåòðîâ óêàçàòü ëþáûå çíà÷åíèÿ, ïîäõîäÿùèå ê òèïó ïîëÿ.
Çàòåì, â ñâîéñòâàõ çàïðîñà ñòàíåò äîñòóïíîé êíîïêà "Ïàðàìåòðû", íàæàâ íà êîòîðóþ, âû ñìîæåòå óñòàíîâèòü, èç êàêîé ÿ÷åéêè áðàòü çíà÷åíèå ïàðàìåòðà (è ïîñòàâèòü î÷åíü íóæíóþ ãàëî÷êó "ïðè èçìåíåíèè çíà÷åíèÿ çàíîâî âûïîëíÿòü çàïðîñ"). Ïåðå÷åíü ïàðàìåòðîâ â ïîðÿäêå ïîÿâëåíèÿ èõ â çàïðîñå.
Ìèíóñû ýòîãî ñïîñîáà: ôóíêöèîíàë Microsoft Query îñòàëñÿ íà óðîâíå 1997, íàâåðíîå, ãîäà. Íèêàêèõ ôóíêöèé òèïà CASE òàì íå áóäåò. Ìîæíî ïîïðîáîâàòü iif, ÿ íå ïðîáîâàë.
5.2. Ñëîæíûé: íàïèñàòü ìàêðîñ íà VBA, êîòîðûé ñäåëàåò âñ¸ ýòî. Ýòîò âàðèàíò ïîëíîôóíêöèîíàëüíûé, ò.ê. â íåì ìîæíî áóäåò èñïîëüçîâàòü âñå âîçìîæíîñòè SQL Server, íî ãëàâíûé, êìê, äëÿ íåãî ìèíóñ - îí ïîòðåáóåò ñîõðàíåíèÿ ôàéëà â ôîðìàòå xlsm. Åñëè ïî êàêèì-òî ïðè÷èíàì ó âàñ ýòî íåäîïóñòèìî (èëè íåæåëàòåëüíî), ïðèéä¸òñÿ èçâîðà÷èâàòüñÿ.


Íó, êàê-òî òàê.


Äëÿ ïîèñêà:
Êàê ñäåëàòü êîíâåðñèþ òèïîâ â Access? Cast è Convert â Access
Case â Access, Excel
Ïîäêëþ÷èòüñÿ ê Access, Excel èç SQL Server
ïàðàìåòð SQL parameter èç ÿ÷åéêè Excel

http://www.sql.ru/forum/1218305/faq-ispolzovanie-cast-convert-case-v-ms-access-parametry-sql-v-excel-i-dr


 

Äîáàâèòü êîììåíòàðèé:
Òåêñò êîììåíòàðèÿ: ñìàéëèêè

Ïðîâåðêà îðôîãðàôèè: (íàéòè îøèáêè)

Ïðèêðåïèòü êàðòèíêó:

 Ïåðåâîäèòü URL â ññûëêó
 Ïîäïèñàòüñÿ íà êîììåíòàðèè
 Ïîäïèñàòü êàðòèíêó