SQLの窓

2020年10月11日


Python : ttk.Treeview で表形式を使用して環境変数の一覧表示



※ 列の ID は、視認性を上げる為に日本語の名称を使用しています。

import os
import tkinter as tk
import tkinter.ttk as ttk

# メインフォーム
form = tk.Tk()
form.title("タイトル")
form.geometry("800x600")

# ツリービュー(表)
grid = ttk.Treeview(form, show="headings")

# 列ID
grid["columns"] = ("番号","変数","値")

# 列幅
grid.column("番号", width=30)
grid.column("変数", width=150)
grid.column("値", width=500)

# タイトル
grid.heading("番号", text="")
grid.heading("変数", text="変数")
grid.heading("値", text="値")

# データ
i = 0
for k, v in os.environ.items():
	i = i + 1
	grid.insert("","end",values=(i,f"{k}", f"{v}"))

# 位置指定して作成
grid.place(x=20, y=40, height=500)

# スクロールバーを同期させて form に配置
vsb = ttk.Scrollbar(form, orient="vertical", command=grid.yview)
vsb.place(x=20+680+3, y=40+3, height=500)
grid.configure(yscrollcommand=vsb.set)


form.mainloop()

スクロールバー部分は、Stack OverFlow の『Python Treeview scrollbar』を参考にしています



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

2020年09月21日


nuget.exe CLI を使用してパッケージをダウンロードし、C# のソースコードで利用して PowerShell でビルドする

 ps.bat ( PowerShell をそのまま使えない場合は以下のバッチファイルを作成して使用します )
@powershell -NoProfile -ExecutionPolicy Unrestricted "./%1.ps1"
nuget.exe - recommended latest のダウンロードページ nuget.exe CLI を使用してパッケージを管理する( Microsoft のドキュメント )
nuget.exe を最新にするには
nuget update -Self

ここで使用するパッケージの最新バージョンの確認は こちらから 行って以下のコマンドライン
nuget install Newtonsoft.Json -Version バージョン
json_sample_01.cs
using System;
using System.IO;
using System.Text;
using System.Net;
using System.Web;
using System.Windows.Forms;
using Newtonsoft.Json;

public class Program
{
	public static void Main()
	{
		ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;	

		string url = "https://lightbox.sakura.ne.jp/demo/json/syain_json.php";
		
		string json = "";

		using( WebClient wc = new WebClient() ) {
			wc.Encoding = Encoding.UTF8;
			json = wc.DownloadString( url );
		}

		Syain[] syain = JsonConvert.DeserializeObject<Syain[]>(json);

		foreach (Syain data in syain) {
			Console.WriteLine( data.社員コード );
			Console.WriteLine( data.氏名 );
			Console.WriteLine( data.フリガナ );
		}

		MessageBox.Show("処理が終了しました");

	}

	private class Syain
	{
		public string 社員コード  { get; set; }
		public string 氏名  { get; set; }
		public string フリガナ  { get; set; }
	}

}


build.ps1

Newtonsoft.Json.dll は、ソースコードと同じ場所に置きます
Add-Type -path "json_sample_01.cs" `
	-ReferencedAssemblies "Newtonsoft.Json.dll", System.Web, System.Windows.Forms `
	-OutputAssembly json_sample_01.exe `
	-OutputType ConsoleApplication

Read-Host "何かキーを押してください"


run.ps1

Newtonsoft.Json.dll は、ソースコードと同じ場所に置きます
Add-Type -path "Newtonsoft.Json.dll"
Add-Type -path "json_sample_01.cs" `
	-ReferencedAssemblies "Newtonsoft.Json.dll", System.Web, System.Windows.Forms

[Program]::Main()

Read-Host "何かキーを押してください"




posted by lightbox at 2020-09-21 18:32 | PowerShell + C# | このブログの読者になる | 更新情報をチェックする

2020年09月01日


XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 1 )

最初は、基本的なデータ型の表示テストです。



XAMPP で Python を実行できるようにするには、httpd.conf の 『AddHandler cgi-script .cgi .pl .asp』 に .py を追加します


( Apache 環境では、.py に対してソースコードの先頭の #!プログラム をcgi として実行します / PHP は別定義です )

Windows では、Python の先頭に Python の実行プログラムの場所を記述しなくても、Windows のレジストリに設定して動作できるようにする事ができるようです
( 💘 ScriptInterpreterSource Registry-Strict )

以下は、Windows 環境下で .py に対して実行される処理として設定される内容です
Python のダウンロードとインストールは こちら(Windows 環境のPython) がとても参考になります 上記リンク先のフル・インストーラ版で python-3.8.5-amd64.exe をインストールすると、拡張子の関連付けで .py に対して 『"C:\WINDOWS\py.exe" "%L" %*』が登録されます Python.File は、ファイルのタイプとして登録される詳細ですが、このエントリが拡張子と関連付けられます。確認は、コマンドプロンプトで 『assoc .py』で確認できますが、レジストリでも確認できます 以下のプロパティはインストールされた py.exe と python.exe です 以下は、仮想ディレクトリの作成です
<IfModule alias_module>

    Alias /py "/app/py20"
    <Directory "/app/py20">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Require all granted
    </Directory>

</IfModule>
sample_01.py
#!C:\python\python.exe

import cgi
import cgitb
cgitb.enable()

import sys
import io
import os
import urllib.parse
from xml.sax.saxutils import *

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

print("Content-Type: text/html; charset=utf-8")
print( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" )
print( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" )
print( "Pragma: no-cache" )
print()

data1 = "こんにちは"
data2 = [1,2,3,4]
data3 = (1,2,3,4,"")
data4 = {"A":1, "B":2, "C":3, "D":4 }

type1 = str(type(data1))
type2 = str(type(data2))
type3 = str(type(data3))
type4 = str(type(data4))

print( data1 + "<br>" )
print( escape(type1) + "<br>" )

print( str(data2) + "<br>" )
print( escape(type2) + "<br>" )

print( str(data3) + "<br>" )
print( escape(type3) + "<br>" )

print( str(data4) + "<br>" )
print( escape(type4) + "<br>" )



関連する記事

XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 1 )

XAMPP + Python( 3.8 ) でWEBアプリの基礎部分構築 : その ( 2 ) : QUERY_STRING と 画面定義

XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 3 ) : cgi.FieldStorage() から ディクショナリ

XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 4 ) : リダイレクトと関数とログ出力



posted by lightbox at 2020-09-01 11:15 | Python | このブログの読者になる | 更新情報をチェックする

2020年08月31日


VBScript : ADO : ODBC接続 : SQLExpress(SQLServer) 接続と通常処理( 更新は SQL で行う )



ドライバは、古い {SQL Server} ドライバを使用していますが、VBS では、{SQL Native Client} を使っても同じだと思います。

SQLExpress(SQLServer) の 32ビット クライアントの設定です

MSSQLServer のレジストリ位置を開く VBScript のダウンロード

※ コメント部分ですが、このサンプルで SQL の更新を接続オブシェクトのメソッドで SQL 文字列を使って実行しています。

フィールドオブジェクトにセットして更新する方法もありますが、他の言語間での移植が困難になるので、このほうが良い環境はたくさんあると思います

関連する記事

SQLExpress 2005 の接続設定
VBScript : ADO : フィールドオブジェクトを使用した同一フォーマットのテーブル間のデータコピー
VBScript : ADO : 純正接続 : SQLExpress(SQLServer) 接続と通常処理

SQLExpress にインポートするデータ(MDB)


' ***********************************************************
' SQLExpress / ODBC / {SQL Server}
' ADO : 文字列更新
' FileSystemObject : CSV出力
' ***********************************************************
strDriver = "{SQL Server}"
strTarget = "reiwa"		' 別名
strDB = "lightbox"
strUser = "sa"
strPass = "passwordpassword"

' ***********************************************************
' ADO + FileSystemObject
' ***********************************************************
Set Cn = CreateObject( "ADODB.Connection" )
Set Rs = CreateObject( "ADODB.Recordset" )
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' **********************************************************
' 接続文字列
' **********************************************************
ConnectionString = _
	"Provider=MSDASQL;" & _
	"Driver=" & strDriver & ";" & _
	"SERVER=" & strTarget & ";" & _
	"DATABASE=" & strDB & ";" & _
	"UID=" & strUser & ";" & _
	"PWD=" & strPass & ";"

' **********************************************************
' 接続
' クライアントカーソル(3)を使う事が推奨されます
' **********************************************************
Cn.CursorLocation = 3
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Query = "select * from [社員マスタ]"

' **********************************************************
' レコードセット
' オブジェクト更新時はレコード単位の共有的ロック(3)を
' 使用します( デフォルトでは更新できません )
' ※ デフォルトでも SQLによる更新は可能です
' **********************************************************
'Rs.LockType = 3
on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 出力ファイルオープン
' **********************************************************
Set Csv = Fso.CreateTextFile( "社員マスタ.csv", True )

' **********************************************************
' タイトル出力
' **********************************************************
Buffer = ""
For i = 0 to Rs.Fields.Count - 1
	if Buffer <> "" then
		Buffer = Buffer & ","
	end if
	Buffer = Buffer & Rs.Fields(i).Name
Next
Csv.WriteLine Buffer

' **********************************************************
' データ出力
' **********************************************************
' UpdateCnt = 0
Do While not Rs.EOF
	Buffer = ""
	For i = 0 to Rs.Fields.Count - 1
		if Buffer <> "" then
			Buffer = Buffer & ","
		end if
		Buffer = Buffer & Rs.Fields(i).Value
	Next

	' 更新
'	strDay = (UpdateCnt mod 10) + 1
'	Query = "update [社員マスタ] set [生年月日] = '2005/01/0" & strDay & "'"
'	Query = Query & " where 社員コード = '" 
'	Query = Query & Rs.Fields("社員コード").Value
'	Query = Query & "'"
	Cn.Execute( Query )

	Csv.WriteLine Buffer
	Rs.MoveNext
'	UpdateCnt = UpdateCnt + 1
Loop

' **********************************************************
' ファイルクローズ
' **********************************************************
Csv.Close
' **********************************************************
' レコードセットクローズ
' **********************************************************
Rs.Close
' **********************************************************
' 接続解除
' **********************************************************
Cn.Close


hanbaic.mdb よりインポートする為の バッチファイル
C:\Windows\SysWOW64\cscript.exe import.vbs
Windows10 64ビットで、Office が 32ビットの場合を想定しています

hanbaic.mdb よりインポートする為の VBScript
' ***********************************************************
' hanbaic.mdb からインポート
' ***********************************************************
strMdbPath = "C:\Users\lightbox\Downloads\hanbaic_mdb\hanbaic.mdb"
strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strMdbPath & ";"

' ***********************************************************
' ADO
' ***********************************************************
Set Cn = CreateObject( "ADODB.Connection" )

' **********************************************************
' MDB 用接続文字列
' **********************************************************
ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strMdbPath & ";"

' **********************************************************
' 接続
' **********************************************************
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 実行
' **********************************************************
RefString = "[ODBC;Driver={SQL Server};Server=reiwa;Database=lightbox;Uid=sa;Pwd=passwordpassword]"
Query = "select * into " & RefString & ".[社員マスタ] from [社員マスタ]"

on error resume next
Cn.Execute Query
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 接続解除
' **********************************************************
Cn.Close




posted by lightbox at 2020-08-31 09:06 | SQLExpress | このブログの読者になる | 更新情報をチェックする

指定した位置でレジストリエディタを開く為の VBScript をダウンロードします

理屈としては、regedit は、終了する時に表示していたパスをレジストリに保存しており、その場所に書き込む事によって regedit を起動した時に好きな場所が表示されるようにしています。
保存場所 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey
コンボボックスにいくつかサンプルを用意しています。入力フィールドに直接セットしてもいいですし、いったんダウンロードしたソースの先頭のパスを変更しても OK です。
IE11 ソースエディタは、インターネットオプションのプログラムでメモ帳を選択してからアクセスします

一度ダウンロードしたソースコードの先頭の strParam にレジストリのパスを設定するだけで使えます
strParam = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI"

' レジストリ書き込み用
Set WshShell = CreateObject( "WScript.Shell" )
' WMI用
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

' レジストリエディタが最後に開いていたキーの登録を行います
strPath = "Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey"
if GetOSVersion() >= 6 then
	strRegPath = "コンピューター\" & strParam
else
	strRegPath = "マイ コンピュータ\" & strParam
end if

' 既に regedit が実行中の場合はいったん終了させます
Set colProcessList = objWMIService.ExecQuery _ 
	("Select * from Win32_Process Where Name = 'regedit.exe'") 
For Each objProcess in colProcessList
	' 最後のウインドウの位置とサイズを保存する為の終わらせ方
	WshShell.AppActivate("レジストリ エディタ")
	Wscript.Sleep(500)
	WshShell.SendKeys ("%{F4}")
	Wscript.Sleep(500)
	' 上記終わらせ方が失敗した時の強制終了
	on error resume next
	objProcess.Terminate() 
	on error goto 0
Next 

WshShell.RegWrite "HKCU\" & strPath, strRegPath, "REG_SZ"

' レジストリエディタを起動します
Call WshShell.Run( "regedit.exe" )
' レジストリエディタが終わるまで待つ場合は以下のようにします
' Call WshShell.Run( "regedit.exe", , True )

REM **********************************************************
REM OS バージョンの取得
REM **********************************************************
Function GetOSVersion()

	Dim colTarget,str,aData,I,nTarget

	Set colTarget = objWMIService.ExecQuery( _
		 "select Version from Win32_OperatingSystem" _
	)
	For Each objRow in colTarget
		str = objRow.Version
	Next

	aData = Split( str, "." )
	For I = 0 to Ubound( aData )
		if I > 1 then
			Exit For
		end if
		if I > 0 then
			nTarget = nTarget & "."
		end if
		nTarget = nTarget & aData(I)
	Next

	GetOSVersion = CDbl( nTarget )

End Function





posted by lightbox at 2020-08-31 08:43 | VBScript | このブログの読者になる | 更新情報をチェックする

2020年08月30日


タスクマネージャーで、実行中のアプリケーションが 32 ビットか 64 ビットかを確認する

詳細タブを選択
タイトル部分を右クリックして、列の選択をクリック
表示されたダイアログで、『プラットフォーム』にチェック

※ IE11 の場合は、32ビットの行があれば 32ビット






posted by lightbox at 2020-08-30 18:42 | Windows10 | このブログの読者になる | 更新情報をチェックする
container 終わり



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

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