SQLの窓

2018年04月10日


PowerShell でエクスプローラでコピーしたファイルリストを取得して、テキストのクリップボードに再度コピーしなおす

Windows10 のデフォルトコマンドウインドウが、PowerShell になったので久しぶりに動作確認をしました。基本的に実行ポリシーは変わっておらず、そのままでは .ps1 スクリプトを実行できません。しかし、PowerShell のプロンプトから cmd と入力すれば従来のコマンドプロンプトになるので、以下のようにして実行します。

powershell -NoProfile -ExecutionPolicy Unrestricted .\test.ps1

▼ コマンドラインが長いので ps.bat を Windows フォルダに作成しておきます
@powershell -NoProfile -ExecutionPolicy Unrestricted "./%1.ps1"
※ カレントフォルダで ./ と 拡張子なしで実行できます。 ※ SHIFT キーを押しながらフォルダを右クリックで PowerShell ウインドウが開くので cmd と入力後使用します。 ファイルリストを \r\n 改行のテキストとしてクリップボードへ PowerShell では、.NET Framework を使用できるので、わざわざ C# 等で実行形式のアプリを作成せずとも、C# のコードを知っておればインターネットを調べながら成果物を作成するのはそれほど難しい事ではありません。 手軽に実行できる VBScript はまだ健在なので、VBScript から PowerShell のスクリプトを呼び出せば、かなりできる事の幅が膨らむのでは無いかと思っています。しかしいかんせん、PowerShell を真剣にやり出すとかなり面倒くさい事にもなりそうなので、しばらくは様子をうかがっていきたいと思っています。( csc.exe とか動かなくなってしまったので )
Add-Type -assemblyName System.Windows.Forms

$obj = [System.Windows.Forms.Clipboard]::GetFileDropList()

if ( $obj -eq $null ) {
	[System.Console]::WriteLine("NULL")
}
else {
	if ( $obj.Count -eq 0 ) {
		[System.Console]::WriteLine("データがありません")
	}
	else {
		$text = ""
		foreach($data in $obj){
			$text += $data + "`r`n"
		}
		[System.Windows.Forms.Clipboard]::SetText($text)
	}
}

ダウンロードした場合は、セキュリティの警告が出るので、エディタで上書き保存するかプロパティの『セキュリティ』で許可にチェックして『適用』します。

※ 参考 : PowerShellスクリプティングの第一歩
( 2007年09月20日 の記事なんですけど、いまさら Windows10 って大丈夫かなぁ... )



【PowerShellの最新記事】
posted by lightbox at 2018-04-10 16:11 | PowerShell | このブログの読者になる | 更新情報をチェックする

2018年04月09日


Eclipse + Python(Pydev) : pywin32(COM使用の為) + MySQL Connector/ODBC でループ処理をしながら更新

前提条件

Eclipse は Pleiades Eclipse 4.7 Oxygen です。前提となる環境は以下を参照して下さい。

Pleiades Eclipse 4.7 Oxygen 2 Windows 64bit Ultimate Full Edition のインストールといろいろな準備
Pleiades Oxygen 2 の XAMPP 内の MySQL を利用可能にしてテストデータ(販売管理)を登録する

▼ プロジェクトの作成方法はこちらを参照して下さい
Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする

pywin32 + COM

COM 経由で ADO を使って MySQL にアクセスする為に、pywin32 をインストールします。

インストールは、pip install pywin32 でインストールできます。但し、『Fatal error in launcher: Unable to create process using '"'』というエラーが出た場合は、以下のコマンドを実行してから再度実行して下さい。
python -m pip install -U pip
pywin32 の readme にもありますが、さらに『COMオブジェクトの登録やWindowsサービスの実装などの「システムワイド」機能でpywin32を使用する場合は』管理者権限のコマンドプロンプトから以下を実行します
python Scripts/pywin32_postinstall.py -install
▼ 実行結果
Copied pythoncom36.dll to C:\WINDOWS\system32\pythoncom36.dll
Copied pywintypes36.dll to C:\WINDOWS\system32\pywintypes36.dll
Registered: Python.Interpreter
Registered: Python.Dictionary
Registered: Python
-> Software\Python\PythonCore\3.6\Help[None]=None
-> Software\Python\PythonCore\3.6\Help\Pythonwin Reference[None]='C:\\pleiades\\python\\3\\Lib\\site-packages\\PyWin32.chm'
Pythonwin has been registered in context menu
Creating directory C:\pleiades\python\3\Lib\site-packages\win32com\gen_py
Shortcut for Pythonwin created
Shortcut to documentation created
The pywin32 extensions were successfully installed.
Connector/ODBC 5.3.10 ADO から接続する場合、純粋に Windows からのアクセスになるので ODBC ドライバが必要になります。Python が 64ビットならば、ODBC ドライバも 64ビット用が必要になります。 ダウンロードページ com_ado_mysql 以下は、ADO + COM で行われる標準的なレコードセットの読み込みと同時更新の処理です。 特徴的なのは、レコードセットの Fields コレクション( Field オブジェクト )を使用して値を直接セットして一行づつレコードを更新するところです。
import win32com.client

adOpenDynamic = 2
adLockOptimistic = 3

cn = win32com.client.Dispatch("ADODB.Connection")
rs = win32com.client.Dispatch("ADODB.Recordset")

driver = "{MySQL ODBC 5.3 Unicode Driver}"
server = "localhost"
DB = "lightbox"
User = "root"
Pass = ""

ConnectionString = "Provider=MSDASQL;Driver={0};Server={1};DATABASE={2};UID={3};PWD={4};"
ConnectionString = ConnectionString.format(driver,server,DB,User,Pass)
print(ConnectionString)

"""""""""""""""""""""""""""
接続
"""""""""""""""""""""""""""
try:
	cn.Open( ConnectionString )
except Exception as e:
	print( e )
	exit()

rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic

rs.Open( "select * from 社員マスタ where 社員コード <= '0004' ", cn )

while not rs.EOF:

	print(rs.Fields("社員コード").Value,end=",")
	print(rs.Fields("氏名").Value, end=",")
	print(rs.Fields("フリガナ").Value, end=",")
	print(rs.Fields("所属").Value, end=",")
	print(rs.Fields("性別").Value, end=",")
	print(rs.Fields("給与").Value, end=",")
	print(rs.Fields("手当").Value, end=",")		# NULL の場合は None と出力
	print(rs.Fields("管理者").Value, end=",")
	print("{0:%Y/%m/%d}".format(rs.Fields("作成日").Value), end=",")
	print("{0:%Y/%m/%d}".format(rs.Fields("更新日").Value), end=",")
	print("{0:%Y/%m/%d}".format(rs.Fields("生年月日").Value))

	rs.Fields("管理者").Value = "0002"
	rs.Update()

	rs.MoveNext()

"""""""""""""""""""""""""""
接続解除
"""""""""""""""""""""""""""
if cn.State >= 1:
	cn.Close()

print("終了しました")

CursorTypes, LockTypes, and CursorLocations

※ MySQL は 以下の三つの組み合わせのみ動作
adUseClient/adOpenStatic
adUseServer/adOpenForwardOnly
adUseServer/adOpenDynamic

※ ADO でデフォルトは adUseServer

エディタのタブ設定



エディタの # コメント色

デフォルトが灰色で見にくいので濃い緑を使用しました





posted by lightbox at 2018-04-09 16:52 | Pleiades | このブログの読者になる | 更新情報をチェックする

Eclipse + Python(Pydev) : MySQL Connector/Python でループ処理をしながら更新

前提条件

Eclipse は Pleiades Eclipse 4.7 Oxygen です。前提となる環境は以下を参照して下さい。

Pleiades Eclipse 4.7 Oxygen 2 Windows 64bit Ultimate Full Edition のインストールといろいろな準備
Pleiades Oxygen 2 の XAMPP 内の MySQL を利用可能にしてテストデータ(販売管理)を登録する

▼ プロジェクトの作成方法と Connector/Python のインストールはこちらを参照して下さい
Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする

update.py
'''
****************
Pydev パッケージ無し
****************
'''

import mysql.connector
import pprint

import sql_string

''' PHP の関数名を使ってます => print_r '''
print_r = pprint.PrettyPrinter(indent=4)

''' 読み込み用 '''
cnn = mysql.connector.connect(
	host='localhost',
	port=3306,
	db='lightbox',
	user='root',
	passwd='',
	charset="utf8")

cursor = cnn.cursor()

''' 更新用 '''
cnn2 = mysql.connector.connect(
	host='localhost',
	port=3306,
	db='lightbox',
	user='root',
	passwd='',
	charset="utf8",
	autocommit='True')

cursor2 = cnn2.cursor()

'''
****************
行単位でアクセス
****************
'''
cursor.execute(sql_string.query)

for row in cursor:
	print_r.pprint(row)

	update_sql = ( "update 社員マスタ set 管理者 = %s where 社員コード = %s " );
	cursor2.execute( update_sql, ( '0001', row[0] ) )

''' 更新用 '''
cursor2.close()
cnn2.close()

''' 読み込み用 '''
cursor.close()
cnn.close()


sql_string.py
query = "select * from 社員マスタ where 社員コード <= '0004' "

一般的な使い方通り、読み込みと更新では接続を分けています。更新用の接続では、デフォルトでは autocommit が False なので True にして接続しています。

▼ MySQL 公式ドキュメント
Connector/Python Connection Arguments

エディタのタブ設定



エディタの # コメント色

デフォルトが灰色で見にくいので濃い緑を使用しました






posted by lightbox at 2018-04-09 12:05 | Pleiades | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり