ADO Recordset で RecordCount プロパティが -1 を返す場合

参照設定に「Microsoft Active Data Object 2.0 Library」追加

また、デフォルトが以下なので、変更する。

rs.CursorLocation = adUseServer(デフォルト)

↓↓↓↓↓↓変更 ↓↓↓↓↓↓

rs.CursorLocation = adUseClient

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient <— これを指定

※DAOのrecordcountで件数が取れないときはこちらを参照

または、コネクションでCursorLocationをクライアントサイドカーソルに変更して、RecordCountを取得する
dim connect, rs, count

Set connect = CreateObject("ADODB.Connection")
connect.Open "xxx"
connect.CursorLocation = 3 ' クライアントサイドカーソルに変更

Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM HOGE(NOLOCK)", connect
If rs.eof Then
' 0件の場合の処理

End If
' RecordCountの取得
count = rs.RecordCount

rs.Close
Set rs = Nothing
http://replication.hatenablog.com/entry/20090312/1236866953

SQLServer のリンクテーブルをAccess側で作成

Access で、どこかの SQLServer へリンクテーブルが貼られている際に
dsnファイルを利用して、Access側でリンクテーブルを作成する。
dsnファイルの項目>
DRIVER
UID
DATABASE
WSID
APP
SERVER
example
ファイル名:@@@@.dsn
[ODBC]
DRIVER=SQL Server
UID=●●(:ID名)
DATABASE=●●●●(:DB名)
WSID=T●O●K●●●-CPU●●s
APP=Microsoft Data Access Components
SERVER=●●\SQLEXPRESS2017(:DBパス)
Accessのメニューで
外部データ>新しいデータソース>DBから>SQLサーバーから>「外部データの取り込み-ODBCデータベース」ウィンドウが開く

リンクテーブルを作詞えしてソースデータにリンクする>
データソース(@@@@.dsn)の場所を選ぶ

「SQLサーバーログイン」の画面が開くので、サーバーログインのID・PWを入力

リンクするテーブルを選択する
※SQLサーバーでは、テーブル名にdbo.がついて格納されている。

SQLサーバーの選択したテーブルにリンクされたテーブルが
Accessに作成される
※テーブル名にdbo.がついて作成されるので、テーブル名の変更が必要
<参照>
https://social.msdn.microsoft.com/Forums/sqlserver/ja-JP/9e164e23-3a79-4857-b213-3ff72c81c6b8/dsn125011244912452125231243421442327711239512522125311246312469?forum=sqlserverja
https://docs.microsoft.com/ja-jp/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine?redirectedfrom=MSDN&view=sql-server-ver15

空白文字だけの配列要素を後ろから削除する

‘空白文字だけの配列要素を後ろから削除する(配列途中の空白だけの要素(故意に改行した部分)は残す)

 最後の空行の改行については削除する (配列から要素を削除)
    '※空白(半角スペース・全角スペース)は、文字数1、バイト数2でカウントされる
    str配列要素 = ""
    i = UBound(v)
    j = 0
    cnt = 0
    Do
        If i = LBound(v) Then Exit Do

        For k = 1 To Len(v(i))
            If InStr(Mid(v(i), k, 1), " ") > 0 Then
                cnt = cnt + InStr(Mid(v(i), k, 1), " ")
            Else
                cnt = cnt + InStr(Mid(v(i), k, 1), " ")
            End If
        Next k
        If cnt <> Len(v(i)) Then Exit Do '空白以外の文字が存在すれば、抜ける
        If cnt = Len(v(i)) Then          'すべて空白
            v(i) = v(i - 1)
            j = j + 1
        End If
        cnt = 0
        i = i - 1
    Loop

    ReDim Preserve v(UBound(v) - j) '余分な配列要素を削除

    'str配列要素を再編成
    str配列要素 = ""
    i = 0
    j = 0

    For i = LBound(v) To UBound(v)
            j = j + 1
            If j = 1 Then
                str配列要素 = v(i)
            Else
                str配列要素 = str配列要素 & vbCrLf & v(i)
            End If
    Next i

Date型とDatetime型の違いに注意する。

DateTime型 (例) : KOUSINBI = #2004/01/14 17:51:00#
※DateTime型=300分の1秒で格納されている

’2009/01/01′の値が入っている該当項目を抽出したいときに
hoge_datetime が DateTime型 だったら、
以下のコードでは抽出できません。
SELECT * FROM hoge WHERE hoge_datetime = '2009/01/01'

convert関数を使って、キャストします。
SELECT * FROM busy WHERE Convert(NVARCHAR, hoge_datetime, 111) = '2009/01/01'
※ hoge_datetime項目を指定スタイル(111(4桁の年、日本、yy/mm/dd))にキャストし。

PageBreak プロパティを設定できません。(AccessVBAでエクセルをコピーするときに、出た)エラーの解消法

解消策としては
・一旦[標準]ビューで処理し、最後に[改ページプレビュー]設定する。
・ws_sheet2をActiveにして実行する。
・’* 改ページの挿入の直前に DoEvents を挿入する。
・Application.ScreenUpdating = False で実行する。
いずれでも解消するようです。

私は、コピー元のエクセルファイルを、改ページプレビューにしていたので、
標準ビューに戻したら、解決しました。

以下余談、ちょっと気になったこと。

ws_sheet3.Range(“1:10”).Copy
ws_sheet2.Range(“1:10”).PasteSpecial Paste:=xlPasteAll
xlPasteAllなら
ws_sheet3.Range(“1:10”).Copy ws_sheet2.Range(“1:10”)
でもいいかな、という点と
‘* sheet2 をクリア
なら
ws_sheet2.Cells(1, 1).Resize(9, 4).ClearContents
のほうがいいかな、という点です。

エクセル「(自分)が使用中です」エラーの対処方法

サーバに保管しているエクセルファイルを閉じているにもかかわらず、「○○(自分)が使用中です」というメッセージがでるときがあります。

削除するファイルのあるパスをいつも忘れるので、備忘録として、記録します~

解決法

WIN+R でコマンドプロンプトを開いて「 %temp% 」と入力し、
テンポラリフォルダ(一時フォルダ)を開き、不要なファイルを削除する。
C:\Users\(ユーザ名)a\AppData\Local\Temp

*.tmp
MSForms.exd ファイルを削除

※注意点: tempフォルダの中のLowフォルダは削除しない!!

サブクエリ

http://office.microsoft.com/ja-jp/access-help/HA010341462.aspx
★テーブル名の文字数の最大値は64だそうで、サブクエリをFROM句で使うときに、長さがこれを超えるとエラー(FROM句の構文エラー)になる可能性あり。

①WHERE句に使用

SELECT 受注ID
FROM 受注明細テーブル
WHERE 商品ID IN
(SELECT 商品ID FROM 商品テーブル WHERE 商品形態ID = 21)

結果 
受注ID
-------------
46608
46610
46611
…中略…
50756

※残念だけど、ONにはサブクエリは使えないようです~。だよね・・・

②SELECT句に使用

※ 顧客ごとの受注件数と全体の受注件数の差異を確認
SELECT お客様ID,COUNT(*) AS Cnt_Cust,
(SELECT COUNT(*) FROM 受注テーブル ) AS Cnt_All
FROM 受注テーブル GROUP BY お客様I

——————————

結果 
お客様ID    Cnt_Cust Cnt_All
-----------------------------------------
1 4 31465
2 8 31465
3 12 31465
…中略…
29483 1 31465

③FROM句で使用

SELECT AVG(Cnt_Detail) AS AVG_Detail
FROM
(SELECT COUNT(*) AS Cnt_Detail
FROM 受注明細テーブル
GROUP BY 受注ID ) AS SOD
———————————

結果 
AVG_Detail
----------
3

応用編

SELECT 適当
FROM hogehoge AS hh
LEFT JOIN(
  SELECT *
  FROM fugafuga AS fuga1
 INNER JOIN(
     SELECT 適当
     FROM fugafuga AS fuga2
     GROUP BY 適当
     ) AS fuga3
 ON なんか処理
 AND なんか処理
  GROUP BY 適当
) AS f
ON 適当な処理
AND 適当な処理
LEFT JOIN ・・・

Jupyter Notebookを使う

Jupyter Notebookを使う

①先に、作業スペース用のフォルダを用意する

C:\Users\masako7\physon_workspace

②コマンドプロンプトを開き、
cd C:\Users\masako7\physon_workspace
⇒この階層に移動する

次に、
jupyter notebook
と入力する

↓↓↓

webブラウザが起動し、jupyter notebook の画面が起動する。

physonのスクリプトを書いて、動かしてみる
実行するには、SHIFT+Enter

ファイル名の変更は、Untitled のところをクリックして、
名前を変更後、CTRL+Sでファイルを保存する。

Physon導入経過メモ(Anaconda がやっと PowerShell に公式対応)

まずは、最新版の開発環境:Anaconda(physon3)をインストール。
次に、ターミナルから使用するパッケージをインストールする。

今回は本でPowershell(windows標準装備)を推奨していたので、
・Power Shell
・Power Shell ISE
を つかってみることにした。

https://qiita.com/yniji/items/668f805a72a6ced6a2bd

Power Shell ISEで、まずは操作画面のテキストサイズ等をカスタマイズしてから、使用。(見えにくいので文字サイズをおおきくする・・・)

C:\Users\masako7\Anaconda3\Scripts\conda.exe init powershell
⇒実行OK

C:\Users\masako7\Anaconda3\python
⇒エラー

直接 Python3.7 を起動するのではだめなようだ。conda の環境を起動してから Python3.7 を起動する必要があるらしい。

コマンドプロンプトでやってみる
⇒エラー
Pythonインタープリターはconda環境にありますが、環境にはアクティブ化されていません。


https://conda.io/activation

アクティブ化する
⇒ うまくいかない

http:// https://tutorialmore.com/questions-99221.htm https://qiita.com/t2y/items/2a3eb58103e85d8064b6

●先に、コマンドプロンプトでnumpy等をインストールする
⇒問題なく成功

Users\masako7\Anaconda3\python

データ解析をするための実行環境としてJupyter Notebookを使うようなので、
これも追加してインストールする。

やっぱり、コマンドプロンプトのほうが簡単な気がする。
でも、MacやLinuxだと、もっと簡単なようなので、Macほしいな。。。

Power Shell ISE

● Windows + R で「ファイル名を指定して実行」を開き、 powershell で起動。


● スクリプトを実行できるようにポリシーを変更する
管理者権限で PowerShell を起動し、以下のコマンドを実行する。

Set-ExecutionPolicy RemoteSigned

 

※ポリシーを変更するには、 Set-ExecutionPolicy というコマンドレットを使用する。
RemoteSigned を指定した場合、ローカルで作成されたスクリプトは無条件で実行できるが、ネットワークから入手したスクリプトは署名が無ければ実行できない

● 開発環境 ISE を使用する
Power Shell ISE

https://qiita.com/opengl-8080/items/bb0f5e4f1c7ce045cc57