SQLの窓 イラストAC フリー素材

2019年08月23日

下半分が IFRAME なページ【 height: calc( 100% - 120px ) 】

デモページ

関連する記事

下半分がスクロールするページ【 height: calc( 100% - 120px ) 】

<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section-iframe.css">
</head>
<body>
	<div id="head">
	</div>

	<iframe id="extend" name="extend" class="iframe-option" src="/demo/template/basic/basic-php-iframe-req/req/control.php"></iframe>

</body>
</html>



two-section-iframe.css
@charset utf-8;


/* ****************************
 上下エリア
 フィットコントロール用
******************************/
html,body {
	height: 100%;
}
/* ****************************
 それぞれのエリアの特性
******************************/
/* 基本枠 */
body {
	margin: 0;
}
/* 上固定部分 */
#head {
	padding: 16px;
	display: block;
	margin: auto;
	width: 100%;							/* 幅 */
	height: 120px;							/* 高さ */
	background-color: #e0e0e0;
}
/* 下スクロール部分 */
#extend {
	display: block;
	margin: auto;
	width: calc( 100% - 3px );				/* 幅 */
	height: calc( 100% - 120px - 2px );		/* 高さ */
	border: solid 2px #c0c0c0;
}





posted by at 2019-08-23 08:28 | CSS | このブログの読者になる | 更新情報をチェックする

2019年08月22日

JScript( WSH ) : fake sendmail for windows でメールを送信する

関連する記事

fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信 : Gmail なので ssl(465)
VBScript : JavaScript のライブラリを呼び出して、Base64 エンコードを行う

ソースコードを読んだら、標準入力に -t は必要無くて、引数にファイルを指定して実行可能でした。

JScript で実行する以上、標準入力に直接アクセスして処理しています。

テストすると、今時の WEB メーラでは本文は普通に UTF-8 で利用可能でした。有名どころの WEB メーラですと、Subject も そのままで可能でしたが、まだ対応されていない業者もあったので、JavaScript の Base64 変換ライブラリを使用しています。
<JOB>
<SCRIPT language="JScript" src="https://winofsql.jp/base64.js"></SCRIPT>
<SCRIPT language="JScript">

WshShell =  new ActiveXObject("WScript.Shell");

// ファイルを作成して引数で渡しても実行可能
var oExec = WshShell.Exec("\"C:\\pleiades\\xampp\\sendmail\\sendmail.exe\"");

var mail_text = getResource("mail_data");


// 先頭の空白文字列を取り去る
mail_text = mail_text.replace(/^[ \s]+/, "");

// http://logicalerror.seesaa.net/article/151155394.html
var subject = Base64.encode("日本語の表示");

// UTF8 文字列を BASE64 に変換したものをセット
mail_text = mail_text.replace(/--UTF8TEXT--/, subject);

// 本文を渡す
oExec.StdIn.Write( mail_text );

// 標準入力を終了
oExec.StdIn.Write(String.fromCharCode(0x1a));

// 実行が終わるまで待つ
while (oExec.Status != 1) {

	WScript.Sleep(2000);
}
</SCRIPT>
<RESOURCE id="mail_data">
From: a@yourdomain.jp
To: 送り先メールアドレス
Subject: =?utf-8?B?--UTF8TEXT--?=

mail testing

abcdef

あいうえお
</RESOURCE>

</JOB>


base64.js のオリジナルサイト



posted by at 2019-08-22 14:56 | WSH( JScript ) | このブログの読者になる | 更新情報をチェックする

JSP で単純な MySQL アクセス ( mysql-connector-java-5.1.47.jar )

C:\pleiades\xampp\tomcat\lib\mysql-connector-java-5.1.47.jar を使用しています。

関連する記事

Java : 単純な MySQL アクセス ( mysql-connector-java-5.1.47.jar )
<%@ page
	language="java"
	import="java.io.*"
	import="java.text.*"
	import="java.util.*"

	import="java.text.SimpleDateFormat"
	import="com.mysql.jdbc.*"
	import="java.sql.DriverManager"
	import="java.sql.ResultSet"
	import="java.sql.SQLException"

	contentType="text/html;charset=utf-8" %>
<%!
// *********************************************************
// ローカル関数
// *********************************************************
public String getData( HttpServletRequest request,String name ) {

	String strGet = request.getParameter(name);
	if ( strGet == null ) {
		strGet = "";
	}

	return strGet;
}
%>
<%
// *********************************************************
// 入力値の表示
// GET で setCharacterEncoding を有効にするには
// sever.xml => Connector で useBodyEncodingForURI="true"
// *********************************************************
request.setCharacterEncoding("utf-8");	// 入力値のエンコーディング

// GET 入力
String strGet = getData( request, "InputGet" );

// POST 入力
String strPost = getData( request, "InputPost" );

%>
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
<style>
.result {
	display: inline-block;
	width: 400px;
	border: 1px solid #c0c0c0;
	padding: 10px;
}
</style>
</head>
<body>
	<div id="head">
		<div class="result">InputGet = <%= strGet %> </div><div class="result"> InputPost = <%= strPost %></div>
	</div>

	<div id="extend">

		フォーム : GET( InputGet )
		<form method="get">
			<input type="text" name="InputGet" value="<%= strGet %>">
			<input class="btn btn-primary" type="submit" name="send_get" value="GET">
		</form>
		
		フォーム : POST( InputPost )
		<form method="post">
			<input type="text" name="InputPost" value="<%= strPost %>">
			<input class="btn btn-primary" type="submit" name="send_post" value="POST">
		</form>

		<hr>

<%

// データベース用変数
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try {

	Class.forName("com.mysql.jdbc.Driver");
	// MySQL Connector/J 接続
	conn = (Connection) DriverManager.getConnection(
		"jdbc:mysql://localhost/lightbox?user=root&password="
	);

	stmt = (Statement) conn.createStatement();

	if ( getData( request, "send_post" ).equals( "POST" ) ) {
		// % は %% で表現
		rs = stmt.executeQuery( String.format( "select * from 社員マスタ where 氏名 like '%%%s%%'", strPost) );
	}
	else {
		rs = stmt.executeQuery("select * from 社員マスタ");
	}

	// select の結果の列情報の取得
	ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();

	// 列数
	int columnCount = rsmd.getColumnCount();

	// 列名
	for( int i = 1; i <= columnCount; i++) {
		out.println(rsmd.getColumnName(i));
	}
	out.println("\n<br>");

	// 日付フォーマット
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
	while( rs.next() ) {

		for( int i = 1; i <= columnCount; i++) {

			if ( i != 1 ) {
				out.println(",");
			}

			// 日付型の列
			if ( rsmd.getColumnTypeName(i).equals("DATETIME") ) {
				out.println( sdf.format(rs.getDate(i)) );
			}
			// それ以外
			else {
				out.println( rs.getString(i) );
			}


		}
		out.println("\n<br>");
	}

	rs.close();
	stmt.close();
	conn.close();

} catch (SQLException ex) {
	// handle any errors
	out.println("SQLException: " + ex.getMessage());
	out.println("SQLState: " + ex.getSQLState());
	out.println("VendorError: " + ex.getErrorCode());
}

%>

	</div>

</body>
</html>






posted by at 2019-08-22 11:42 | Java | このブログの読者になる | 更新情報をチェックする

Java : 単純な MySQL アクセス ( mysql-connector-java-5.1.47.jar )

C:\pleiades\java\8\jre\lib\mysql-connector-java-5.1.47.jar を使用しています。

※ mysql-connector-java-8.0.11 で serverTimezone=JST が必要

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class Main {

	public static void main(String[] args) {

		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;

		String connectionString = "jdbc:mysql://localhost/lightbox?user=root&password=";

		try {
			// 接続文字列で接続
			conn = (Connection) DriverManager.getConnection(connectionString);

			String query = "select * from 社員マスタ";

			stmt = (Statement) conn.createStatement();
			rs = stmt.executeQuery(query);

			String scode;
			String sname;
			while( rs.next() ) {

				scode = rs.getString(1);
				sname = rs.getString(2);

				System.out.print(String.format("番号 : %s,%s / ", scode, sname));

				scode = rs.getString("社員コード");
				sname = rs.getString("氏名");

				System.out.println(String.format("列名 : %s,%s", scode, sname));


			}


			rs.close();
			stmt.close();
			// 接続を閉じる
			conn.close();

		} catch (SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}


		System.out.println("終了");
	}

}




posted by at 2019-08-22 10:29 | Java | このブログの読者になる | 更新情報をチェックする

2019年08月21日

一般的な PHP のアップロードページに対して jQuery の $.ajax でファイルをアップロードする

PHP における標準的なテスト用アップロードのテンプレート に対してアップロードしています。

ファイルのアップロードの PHP 側のインターフェイスに合わせてデータを用意して実行します。
PHP では、エラーの場合ページに文字列が出力されるたけなので、その文字列を検索して結果を判断します。

FileReader を使用して、選択したファイルが画像の場合は img 要素で表示し、それ以外ならば FileReader 由来のファイル名と MIME を表示します
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<title>単純ファイルアップロード</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
<style>
#extend {
	white-space: pre;
}
</style>

<script>

$(function(){

	// ***************************
	// form 送信イベント
	// ***************************
	$("#frm").on("submit", function(event){

		// 本来の処理をキャンセル
		event.preventDefault();

		// 新規送信用オブジェクト
		var formData = new FormData();

		// テストの為、約100K の制限
		formData.append("MAX_FILE_SIZE", 1048576);

		// ファイル
		var uploadData = $("#target").get(0);

		formData.append("target", uploadData.files[0]);

		// オリジナルファイル名
		console.log( uploadData.files[0].name );

		// **************************************
		// サーバ呼び出し
		// **************************************
		$.ajax({
			url: "http://localhost/php/upload/php-upload-basic.php",
			type: "POST",
			data: formData,
			processData: false,  // jQuery がデータを処理しないよう指定
			contentType: false   // jQuery が contentType を設定しないよう指定
		})
		.done(function( data, textStatus ){
			console.log( "status:" + textStatus );

			// ajax 対応のページでは無いので、ページ上の文字列を検索して判断する
			if ( data.search(/失敗/) != -1 ) {
				alert("アップロードに失敗しました");
			}

		})
		.fail(function(jqXHR, textStatus, errorThrown ){
			console.log( "code:" + jqXHR.status );
			console.log( "status:" + textStatus );
			console.log( "errorThrown:" + errorThrown );

			// エラーメッセージを表示
			alert("システムエラーです");

		})
		.always(function() {
		})
		;

	});

	// *************************************
	// ファイル選択 <input type="file">
	// *************************************
	$("#target").on("change", function(){

		$("#extend").html("");

		var reader = new FileReader();

		reader.name = this.files[0].name;
		reader.type = this.files[0].type;
		
		console.dir(reader);

		reader.refid = "image";

		// FileReader に画像が読み込まれた時のイベント
		$(reader).on("load", function () {
		
			if ( this.type.indexOf("image/") == 0 ) {
				$("<img>").appendTo("#extend")
					.prop( {"src": this.result, "title": this.name, "id": this.refid } )	// title にはオリジナルファイル名
					.css( {"width": "100px", "margin": "10px" } );
			}
			else {
				$("<div>").appendTo("#extend")
					.html( this.name + "<br>" + this.type );
			}
			
		});

		// 上記イベントを発動するための処理( this.files[i] は blob )
		if (this.files[0]) {
			reader.readAsDataURL(this.files[0]);
		}

	});
	

});

</script>

</head>
<body>
	<div id="head">
		<form
			id="frm">
		
			<div>
				<input id="target" type="file" class="ml-4 btn btn-outline-primary">
				<input type="submit" name="send" value="アップロード" class="ml-4 btn btn-outline-primary">
				<a class="ml-4 btn btn-info" href="/php/upload/php-upload-basic.php">GET 再読み込み</a>
			</div>
		 
		</form>
	</div>

	<div id="extend">

	</div>

</body>
</html>





posted by at 2019-08-21 20:00 | jQuery | このブログの読者になる | 更新情報をチェックする

PHP における標準的なテスト用アップロードのテンプレート

1) 一度にアップロードできるファイルは一つです。
2) PHP とおなじ場所にファイルをアップロードします( 本来は場所を変えるべきです )
3) アップロードできる最大サイズは 1048576 バイトです
4) アップロードするファイル名の日本語対応をしないので、uniqid() 関数でファイル名を作成しています
5) 拡張子は、アップロードされたファイルとおなじものを使用しています
6) PHP が $_FILE にセットする MIME が画像の場合は、HTML で画像を表示します
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<title>単純ファイルアップロード</title>
<meta charset="utf-8">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
<style>
#extend {
	white-space: pre;
}
</style>
</head>
<body>
	<div id="head">
		<form 
			enctype="multipart/form-data"
			method="POST">
		
			<div>
				<input name="target" type="file" class="ml-4 btn btn-outline-primary">
				<input type="submit" name="send" value="アップロード" class="ml-4 btn btn-outline-primary">
				<a class="ml-4 btn btn-info" href="<?= $_SERVER["PHP_SELF"] ?>">GET 再読み込み</a>

				<input type="hidden" name="MAX_FILE_SIZE" value="1048576">
			</div>
		 
		</form>
	</div>

	<div id="extend">

<?php
if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {

	// 拡張子を得る為に pathinfo
	$path_parts = pathinfo($_FILES['target']['name']);
	$file_name = uniqid() . ".{$path_parts['extension']}";

	// アップロード先の パス
	$upload = realpath("./");
	$upload .= DIRECTORY_SEPARATOR . $file_name;

	// アップロード先の パス の表示
	print "$upload\n";

	// PHP のアップロード処理( 一時ファイルを移動 )
	if ( move_uploaded_file($_FILES['target']['tmp_name'], $upload ) ) {
		print "<p>アップロードに成功しました</p>\n";
	}
	else {
		print "<p>アップロードに失敗しました</p>\n";
	}

	// アップロード情報の表示
	print_r( $_FILES );

	// 画像の場合は HTML で表示
	if ( stristr($_FILES['target']['type'],'image' ) != false  ) {
		print "<img src='{$file_name}'>";
	}
}

?>
	</div>

</body>
</html>





posted by at 2019-08-21 18:22 | PHP | このブログの読者になる | 更新情報をチェックする

IE11 : JScript : Excel.Application で既存の Book を開いてその中のテンプレートシートをコピーして名前を付けて保存する

IE11 の画面上の情報を決められた書式を使用して転送して新たにブックを作成する処理です。

印刷は、Excel を Windows から開いて実行します。

印刷内容は随時変更して自由度の高い業務作業を実現する事ができます。
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">
<title>ブックを開いてシートをコピーして使用する</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">

<script>
// ****************************
// Excel.Application 用
// ****************************
var Excel = null;
var Book = null;
var Worksheet = null;
var WshShell = new ActiveXObject("WScript.Shell");

$(function(){

	$("#action").on("click", function(){
	
		if ( Excel == null ) {
			// ****************************
			// 基本オブジェクトを作成
			// ****************************
			Excel = new ActiveXObject("Excel.Application");
		}

		// ****************************
		// 表示( テストの時は表示 )
		// ****************************
		Excel.Visible = true;

		// ****************************
		// 警告を出さないようにする
		// 使用すると上書きの警告が
		// 出なくなります
		// ****************************
		Excel.DisplayAlerts = false;

		// ****************************
		// 対象
		// ****************************
		var filePath = "c:\\temp\\test.xlsx";
		var filePath2 = "c:\\temp\\test2.xlsx";

		// ****************************
		// ブックを開く
		// ****************************
		Book = Excel.Workbooks.Open(filePath);

		// ****************************
		// シート名で直前にコピー
		// ****************************
		Book.Sheets("新しい情報").Copy( Book.Sheets("新しい情報") );
		Book.ActiveSheet.Name = "コピーしたシート";
		Book.Worksheets("コピーしたシート").Select();		// 無くても OK
		Worksheet = Book.ActiveSheet;

		// ****************************
		// シート内のセルをコピー
		// ****************************
	    Worksheet.Range("A1:K5").Select();
	    Excel.Selection.Copy();
	    Worksheet.Range("A6").Select();
	    Excel.ActiveSheet.Paste();

		try {
			Book.SaveAs(filePath2);
			Book.Close();
		}
		catch (e) {
			alert("Book.Save でエラーが発生しました");

			console.dir(e);
			ExcelQuit();
			return;
		}

		ExcelQuit();

		// ****************************
		// 終了確認
		// ****************************
		alert("処理が終了しました \n\n 保存したブックを開きます");

		// ****************************
		// Windows からの Excel 起動
		// ****************************
		WshShell.Run( "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " + filePath2 );

	});

});

// ****************************
// 終了処理
// ****************************
function ExcelQuit() {
	Excel.Quit();
	Excel = null;
	idTmr = window.setTimeout("Cleanup();",1);
}
function Cleanup() {
	CollectGarbage();
}
</script>
</head>
<body>
	<div id="head">
		<input id="action" type="button" value="ブックを開いて処理を実行" class="btn btn-primary">
	</div>

	<div id="extend">
		<table class="table">
		<tbody id="tbl">
			<tr><th>実行手順概要</th><th>テンプレートシートを使って新しいシートを作成して、新しいブックとして結果を保存</th></tr>
			
			<tr><td>1</td><td>開く</td></tr>
			<tr><td>2</td><td>テンプレートシート名で直前にコピー</td></tr>
			<tr><td>3</td><td>新しいシート名セット</td></tr>
			<tr><td>4</td><td>シート内のセルをクリップボードでコピー</td></tr>
			<tr><td>5</td><td>名前を付けて保存</td></tr>

		</tbody>
		</table>

	</div>

</body>
</html>





posted by at 2019-08-21 16:16 | IE | このブログの読者になる | 更新情報をチェックする

IE11 : JScript : Excel.Application で新しい Excel の Book を作成する

Excel.Application は、常にメモリ上に置くのは問題が出ると困るので、実行毎に開放します。

ここで実行している機能は
1) ブックを追加
2) デフォルトシートの名称変更
3) シートを前のシートの後ろにもう一つ追加
4) 列の表示形式の設定
5) ブラウザ上のデータを jQuery で セルに転送
6) セルの表示幅を自動調整
7) 保存
8) Excel の終了と解放
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">
<title>新しい Excel の Book を作成する</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">

<script>
// ****************************
// Excel.Application 用
// ****************************
var Excel = null;
var Book = null;
var Worksheet = null;
var WshShell = new ActiveXObject("WScript.Shell");

$(function(){

	$("#action").on("click", function(){
	
		if ( Excel == null ) {
			// ****************************
			// 基本オブジェクトを作成
			// ****************************
			Excel = new ActiveXObject("Excel.Application");
		}

		// ****************************
		// 表示( テストの時は表示 )
		// ****************************
		Excel.Visible = true;

		// ****************************
		// 警告を出さないようにする
		// 使用すると上書きの警告が
		// 出なくなります
		// ****************************
		Excel.DisplayAlerts = false;

		// ****************************
		// ブック追加
		// ****************************
		Excel.Workbooks.Add();

		// ****************************
		// 追加したブックを取得
		// ※ 新規なのて 1 番目
		// ****************************
		Book = Excel.Workbooks( Excel.Workbooks.Count );

		// ****************************
		// 先頭シートを選択する
		// ****************************
		Worksheet = Book.Worksheets( 1 );

		// ****************************
		// シート名設定
		// ( アクティブなので直接 )
		// ****************************
		Worksheet.Name = "新しい情報";

		// ****************************
		// Add では 第二引数に指定した
		// オブジェクトのシートの直後に、
		// 新しいシートを追加します。
		// ****************************
		Book.Worksheets.Add(null,Worksheet);

		// ****************************
		// シート名設定
		// ( 2番目のシート )
		// ****************************
		Book.Worksheets(2).Name = "予備情報";

		// ****************************
		// 新しい情報 シートを選択
		// ****************************
		Book.Worksheets("新しい情報").Select();

		// ****************************
		// コード列を文字列に設定
		// ****************************
		Worksheet.Columns("A:A").Select();
	    Excel.Selection.NumberFormatLocal = "@";
		Worksheet.Columns("D:D").Select();
		Excel.Selection.NumberFormatLocal = "@";
		Worksheet.Columns("J:J").Select();
		Excel.Selection.NumberFormatLocal = "@";

		// ****************************
		// セルへセット
		// ****************************
		// タイトル部分の参照
		$("#tbl th").each(function(idx){
			Worksheet.Cells(1, idx+1) = $(this).text();
		});

		// 行一覧の参照
		$("#tbl tr").each(function(row){
			$(this).find("td").each(function(idx){
				Worksheet.Cells(row, idx+1) = $(this).text();
			});
		});

		// ****************************
		// セルをデータに合わせて
		// 整理して左上を選択
		// ****************************
		Worksheet.Columns("A:K").Select();
		Worksheet.Columns("A:K").EntireColumn.AutoFit();
		Worksheet.Range("A1").Select();

		// ****************************
		// 保存
		// 拡張子を .xls で保存するには
		// Call ExcelBook.SaveAs( FilePath, 56 ) とします
		// ****************************
		var filePath = "c:\\temp\\test.xlsx";

		try {
			Book.SaveAs( filePath );
			Book.Close();
		}
		catch (e) {
			alert("Book.SaveAs でエラーが発生しました");

			console.dir(e);
			ExcelQuit();
			return;
		}

		ExcelQuit();

		// ****************************
		// 終了確認
		// ****************************
		alert("処理が終了しました \n\n 保存したブックを開きます");

		// ****************************
		// Windows からの Excel 起動
		// ****************************
		WshShell.Run( "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " + filePath );

	});

});

// ****************************
// 終了処理
// ****************************
function ExcelQuit() {
	Excel.Quit();
	Excel = null;
	idTmr = window.setTimeout("Cleanup();",1);
}
function Cleanup() {
	CollectGarbage();
}
</script>
</head>
<body>
	<div id="head">
		<input id="action" type="button" value="Excel.Application の実行" class="btn btn-primary">
	</div>

	<div id="extend">
		<table class="table">
		<tbody id="tbl">
			<tr><th>社員コード</th><th>氏名</th><th>フリガナ</th><th>所属</th><th>性別</th><th>作成日</th><th>更新日</th><th>給与</th><th>手当</th><th>管理者</th><th>生年月日</th></tr>
			
			<tr><td>0001</td><td>山田 太郎</td><td>ウラオカ トモヤ</td><td>0003</td><td>0</td><td>2005-09-12</td><td>2005-11-28</td><td>400000</td><td>9000</td><td>0001</td><td>2012/03/21</td></tr>
			<tr><td>0002</td><td>山村 洋代</td><td>ヤマムラ ヒロヨ</td><td>0003</td><td>1</td><td>2005-06-17</td><td>2005-09-18</td><td>300000</td><td></td><td>0001</td><td>2001/01/02</td></tr>
			<tr><td>0003</td><td>多岡 冬行</td><td>タオカ フユユキ</td><td>0002</td><td>0</td><td>2005-08-14</td><td>2005-11-14</td><td>250000</td><td></td><td>0001</td><td>2001/01/01</td></tr>
			<tr><td>0004</td><td>高田 冬美</td><td>タカタ フユミ</td><td>0003</td><td>1</td><td>2005-06-13</td><td>2005-10-05</td><td>250000</td><td></td><td>0001</td><td>2001/01/01</td></tr>
			<tr><td>0005</td><td>内高 友之</td><td>ウチタカ トモユキ</td><td>0003</td><td>0</td><td>2005-09-12</td><td>2005-11-10</td><td>150000</td><td></td><td></td><td>2001/01/01</td></tr>

		</tbody>
		</table>

	</div>

</body>
</html>


IE11 のバグの対処方法( 英文 )

BUG: Excel Does Not Shut Down After Calling the Quit Method When Automating from JScript

IE11 の設定








posted by at 2019-08-21 14:16 | IE | このブログの読者になる | 更新情報をチェックする

2019年08月20日

Firebase の Realtime Database の JSON を jQuery の $.ajax で読み込んで TABLE を作成する

Firebase の Realtime Database の JSON は、access-control-allow-origin: * を出力するので、どこからでも利用できます。


<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
<script src="https://lightbox.sakura.ne.jp/demo/number-format.js"></script>

<script>

$(function(){

	// **************************************
	// ボタン
	// **************************************
	$("#load_json").on( "click", function(){

		$.ajax({
			url: "https://プロジェクト名-xxxxx.firebaseio.com/syain.json",
			cache: false,
			data: { "name" : $("#sname").val() }
		})
		.done(function( data, textStatus ){
			console.log( "status:" + textStatus );
			console.log( "data:" + JSON.stringify(data, null, "    ") );

			// tabble 作成
			loadData( data );

		})
		// 失敗
		.fail(function(jqXHR, textStatus, errorThrown ){
			console.log( "status:" + textStatus );
			console.log( "errorThrown:" + errorThrown );
		})
		// 常に実行
		.always(function() {

		})
		;
	
	});

	// **************************************
	// このページ自身の QRコードの表示
	// **************************************
	$('#qrcode')
		.css({ "margin" : "20px 20px 20px 20px" })
		.qrcode({width: 160,height: 160,text: location.href });

});

// **************************************
// JSON => table
// **************************************
function loadData( data ) {

	$("#tbl").html("");

	// データ用
	var row_data;

	var index = 0;

	// 行のループ  ( <tr></tr> )
	$.each(data, function( key, syain ) {

		// 初回はタイトル作成
		if ( index == 0 ) {
			// テーブルに行を追加	
			row_data = $("<tr></tr>").appendTo( "#tbl" );

			$("<th></th>").appendTo( row_data ).text( "社員コード" );
			$("<th></th>").appendTo( row_data ).text( "氏名" );
			$("<th></th>").appendTo( row_data ).text( "フリガナ" );
			$("<th></th>").appendTo( row_data ).text( "給与" );
			$("<th></th>").appendTo( row_data ).text( "性別" );
			$("<th></th>").appendTo( row_data ).text( "管理者" );
			$("<th></th>").appendTo( row_data ).text( "生年月日" );

		}

		var re = new RegExp($("#sname").val());
		if ( syain.name.search(re) != -1  ) {
			// テーブルに行を追加	
			row_data = $("<tr></tr>").appendTo( "#tbl" );
	
			$("<td></td>").appendTo( row_data ).text( syain.code );
			$("<td></td>").appendTo( row_data ).text( syain.name );
			$("<td></td>").appendTo( row_data ).text( syain.furi );
			$("<td></td>").appendTo( row_data ).text( syain.kyuyo );
			$("<td></td>").appendTo( row_data ).text( (syain.sex == 0 ? "男性" : "女性"  ) );
			$("<td></td>").appendTo( row_data ).text( syain.kanri );
			$("<td></td>").appendTo( row_data ).text( syain.birthday );
		
		}

		// キーの数
		index++;
	
	});

}
</script>
</head>
<body>
	<div id="head">
		<input type="text" id="sname" name="sname">
		<input type="button" id="load_json" value="検索">
	</div>

	<div id="extend">
		<table class="table">
		<tbody id="tbl">

		</tbody>
		</table>

		<div id="qrcode"></div>
	</div>

</body>
</html>




posted by at 2019-08-20 17:52 | JavaScript | このブログの読者になる | 更新情報をチェックする

Firebase に定義した Realtime Database の API を使用して TABLE を作成する

このアプリは問い合わせとして TABLE で 一覧を作成しますが、API を使用すると容易に更新も実行する事が可能です



参考にするべきドキュメント

ウェブ上でデータリストを操作する

Firebase を JavaScript プロジェクトに追加する

<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
<script src="https://lightbox.sakura.ne.jp/demo/number-format.js"></script>

<script>

$(function(){

	// **************************************
	// ボタン
	// **************************************
	$("#load_json").on( "click", function(){

		// データベース参照
		var myFirebaseRef;

		myFirebaseRef = firebase.database().ref('syain');

		myFirebaseRef.once('value', 
			function(snapshot) {

				if ( !snapshot.exists() ) {
					alert( "データが存在しません" );
					return;
				}

				loadData( snapshot );

			},
			function(error){
				console.dir(error);
			}
		);
	
	});

	// **************************************
	// このページ自身の QRコードの表示
	// **************************************
	$('#qrcode')
		.css({ "margin" : "20px 20px 20px 20px" })
		.qrcode({width: 160,height: 160,text: location.href });

});

// **************************************
// firebase => table
// **************************************
function loadData( snapshot ) {

	$("#tbl").html("");

	// データ用
	var row_data;

	var index = 0;

	snapshot.forEach(function(data){

		var obj = data.val();
		
		// 初回はタイトル作成
		if ( index == 0 ) {
			// テーブルに行を追加	
			row_data = $("<tr></tr>").appendTo( "#tbl" );

			$("<th></th>").appendTo( row_data ).text( "社員コード" );
			$("<th></th>").appendTo( row_data ).text( "氏名" );
			$("<th></th>").appendTo( row_data ).text( "フリガナ" );
			$("<th></th>").appendTo( row_data ).text( "給与" );
			$("<th></th>").appendTo( row_data ).text( "性別" );
			$("<th></th>").appendTo( row_data ).text( "管理者" );
			$("<th></th>").appendTo( row_data ).text( "生年月日" );

		}
		

		var re = new RegExp($("#sname").val());
		if ( obj.name.search(re) != -1  ) {

			// テーブルに行を追加	
			row_data = $("<tr></tr>").appendTo( "#tbl" );

			$("<td></td>").appendTo( row_data ).text( obj.code );
			$("<td></td>").appendTo( row_data ).text( obj.name );
			$("<td></td>").appendTo( row_data ).text( obj.furi );
			$("<td></td>").appendTo( row_data ).text( obj.kyuyo );
			$("<td></td>").appendTo( row_data ).text( (obj.sex == 0 ? "男性" : "女性"  ) );
			$("<td></td>").appendTo( row_data ).text( obj.kanri );
			$("<td></td>").appendTo( row_data ).text( obj.birthday );

		}
		
		index++;

	});

}
</script>
</head>
<body>
	<div id="head">
		<input type="text" id="sname" name="sname">
		<input type="button" id="load_json" value="検索">
	</div>

	<div id="extend">
		<table class="table">
		<tbody id="tbl">

		</tbody>
		</table>

		<div id="qrcode"></div>
	</div>

<!-- https://firebase.google.com/docs/web/setup?authuser=0#add-sdks_CDN -->

<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/6.4.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/6.4.0/firebase-database.js"></script>

<!-- TODO: Add SDKs for Firebase products that you want to use
     https://firebase.google.com/docs/web/setup#config-web-app -->

<script>
  // Your web app's Firebase configuration
  var firebaseConfig = {
// *****************************************
// Firebase より取得した WEB 用 API情報
// *****************************************
  };
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
</script>

</body>
</html>

強調部分が Firebase より取得する部分ですが、firebase-database.js の行は追加になります



posted by at 2019-08-20 17:28 | JavaScript | このブログの読者になる | 更新情報をチェックする

PHP : MySQL から JSON 文字列を返す自作(テスト用) API テンプレート

access-control-allow-origin: * を出力して JavaScript から自由に読み込めるようにしています。

fetch_all を使用してJSON 文字列を一括で取得しています。
<?php
error_reporting( E_ALL & ~E_NOTICE );

session_cache_limiter('nocache');
session_start();

// 取得対象列
$list = "社員コード,氏名,フリガナ,所属,性別,作成日,更新日,給与,ifnull(手当,0) as 手当,ifnull(管理者,'') as 管理者";
// json encode オプション
$flg = 0x0000;

// JavaScript ajax 用
header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: application/json; charset=utf-8" );

// DB 接続
$mysqli = new mysqli('サーバ', 'ユーザ', 'パスワード', 'データーベース');
if ( $mysqli->connect_error ) {
	// 接続失敗
	$json = array( "error" => "Connect Error ({$mysqli->connect_errno}) {$mysqli->connect_error}" );
}
else {
	// json encode オプション
	if ( $_GET["pretty"] != "no" ) {
		$flg = $flg | JSON_PRETTY_PRINT;
	}
	if ( $_GET["escape"] != "no" ) {
		$flg = $flg | JSON_UNESCAPED_UNICODE;
	}

	$mysqli->set_charset("utf8");

	// ~E_NOTICE なので、単純化
	if ( $_GET["name"] == "" ) {
		$query = "select {$list} from 社員マスタ";
	}
	else {
		$query = "select {$list} from 社員マスタ";
		// 条件オプション
		$query .= " where 氏名 like ?";
	}

	// SQL 準備
	$stmt = $mysqli->prepare($query);
	if ( $stmt === false ) {
		// SQL 失敗
		$json = array( "error1" => "$mysqli->error : {$query}" );
	}
	else {
		// バインドは変数で
		$param = "%{$_GET["name"]}%";

		// パラメータの数が一致しない場合の warning を出さない為の @ 抑制
		@$stmt->bind_param('s', $param );
		if ( false === $stmt->execute() ) {
			$json = array( "error2" => "$mysqli->error" );
		}
		else {
			// MySQL ネイティブドライバ限定(PHP 5.3.0 以降)
			$result = $stmt->get_result();
			if ( $result === false ) {
				$json = array( "error3" => "$mysqli->error" );
			}
			else {
				// DB 読み出し成功
				$json = $result->fetch_all( MYSQLI_ASSOC );
			}
		}
	}
}

print json_encode( $json, $flg );

?>




posted by at 2019-08-20 17:10 | PHP | このブログの読者になる | 更新情報をチェックする

jQuery の $.ajax で JSON 文字列を WEB より取得して TABLE を作成する

IE11 でも動作します。

JSON 文字列は、PHP で access-control-allow-origin: * を出力してどこからでも読み込めるようにしています。

<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
<script src="https://lightbox.sakura.ne.jp/demo/number-format.js"></script>

<script>

$(function(){

	// **************************************
	// ボタン
	// **************************************
	$("#load_json").on( "click", function(){

		$.ajax({
			url: "https://lightbox.sakura.ne.jp/demo/json/syain_api_bind.php",
			cache: false,
			data: { "name" : $("#sname").val() }
		})
		.done(function( data, textStatus ){
			console.log( "status:" + textStatus );
			console.log( "data:" + JSON.stringify(data, null, "    ") );

			// tabble 作成
			loadData( data );

		})
		// 失敗
		.fail(function(jqXHR, textStatus, errorThrown ){
			console.log( "status:" + textStatus );
			console.log( "errorThrown:" + errorThrown );
		})
		// 常に実行
		.always(function() {

		})
		;
	
	});

	// **************************************
	// このページ自身の QRコードの表示
	// **************************************
	$('#qrcode')
		.css({ "margin" : "20px 20px 20px 20px" })
		.qrcode({width: 160,height: 160,text: location.href });

});

// **************************************
// JSON => table
// **************************************
function loadData( data ) {

	$("#tbl").html("");

	// データ用
	var row_data;

	// 行のループ  ( <tr></tr> )
	$.each(data, function( index, syain ) {

		// 初回はタイトル作成
		if ( index == 0 ) {
			// テーブルに行を追加	
			row_data = $("<tr></tr>").appendTo( "#tbl" );
			$.each( syain, function( key, value ) {
				$("<th></th>")
					.appendTo( row_data )
					.text( key );
			});
		}


		// テーブルに行を追加	
		row_data = $("<tr></tr>").appendTo( "#tbl" );

		// 列のループ ( <td></td> )
		$.each( syain, function( key, value ) {

			$("<td></td>")
				.appendTo( row_data )
				.text( value );

		});
	
	});

}
</script>
</head>
<body>
	<div id="head">
		<input type="text" id="sname" name="sname">
		<input type="button" id="load_json" value="検索">
	</div>

	<div id="extend">
		<table class="table">
		<tbody id="tbl">

		</tbody>
		</table>

		<div id="qrcode"></div>
	</div>

</body>
</html>


関連する記事

下半分がスクロールするページ【 height: calc( 100% - 120px ) 】

PHP : MySQL から JSON 文字列を返す自作(テスト用) API テンプレート




posted by at 2019-08-20 17:00 | jQuery | このブログの読者になる | 更新情報をチェックする

JScript( WSH ) : Msxml2.ServerXMLHTTP の GET で WEB 上の文字列を取得して JSON オブジェクトに変換して利用する

open Method (ServerXMLHTTP-IServerXMLHTTPRequest)

JSON 文字列を JSON に変換するのは、MDN でも紹介されている eval で行います。

JSON 文字列を送りたい場合は少し面倒ですが、受け側を自作できるのならば他に代替え方法はいくらでも可能です( どうしても必要ならば ポリフィル 使えばいいと思います )。

URL エンコードは encodeURIComponent で行います。
var cond = "name=" + encodeURIComponent("田");
srvXmlHttp.open("GET", "https://lightbox.sakura.ne.jp/demo/json/syain_api_bind.php?" + cond, false);
<JOB>
<SCRIPT language="JScript">
// ************************************
// cscript.exe での実行を強制
// ※ 一覧表示の為
// ************************************
str = WScript.FullName;
str = str.substr( str.length - 11, 11 );
str = str.toUpperCase();
if ( str != "CSCRIPT.EXE" ) {
	str = WScript.ScriptFullName;
	WshShell =  new ActiveXObject("WScript.Shell");
	WshShell.Run( "cmd.exe /c cscript.exe \"" + str + "\" & pause", 3 );
	WScript.Quit();
}

// ************************************
// タイムアウト設定用データ
// ※ デフォルトでも特に問題なし
// ( setTimeouts なし )
// ************************************
var lResolve = 60;
var lConnect = 60;
var lSend = 30;
var lReceive = 30;

// ************************************
// HTTP( GET )
// ※ syain_api_bind.php は utf-8
// ※ open の false は同期処理
// ************************************
var srvXmlHttp;
srvXmlHttp = new ActiveXObject("Msxml2.ServerXMLHTTP.3.0");
srvXmlHttp.open("GET", "https://lightbox.sakura.ne.jp/demo/json/syain_api_bind.php", false);
srvXmlHttp.setTimeouts(lResolve, lConnect, lSend, lReceive);
srvXmlHttp.send();

// ************************************
// JSONフォーマットのテキスト
// ************************************
var text = srvXmlHttp.responseText;

// ************************************
// text を JSON オブジェクトに変更
// ************************************
var json = eval('(' + text + ')');

// ************************************
// 氏名部分を表示
// ************************************
for( i = 0; i < json.length; i++ ) {
	WScript.Echo( json[i]["氏名"] );
}

</SCRIPT>
</JOB>


関連する記事

VBscript(または JScript) で簡単にバイナリファイルをアップロードする



posted by at 2019-08-20 00:11 | WSH( JScript ) | このブログの読者になる | 更新情報をチェックする

2019年08月18日

JScript( WSH ) で MsgBox と InputBox を使う

相互に呼び出し可能ですが、メインとなるほうを下に定義するのが経験則的に間違いがありません。
( つまり、メインに無い機能は先に関数として定義しておく )

<JOB>
<SCRIPT language="VBScript">
function input_box( title )

	input_box = InputBox( title )

end function
function msg_box( message )

	MsgBox( message )

end function
</SCRIPT>
<SCRIPT language="JScript">

var text = input_box("入力してください")
if ( typeof( text ) == "undefined" ) {
	WScript.Echo( "キャンセルされました" );
	WScript.Quit()
}

msg_box( text + " が入力されました" )

</SCRIPT>
</JOB>




posted by at 2019-08-18 19:19 | WSH( JScript ) | このブログの読者になる | 更新情報をチェックする

2019年08月17日

下半分がスクロールするページ【 height: calc( 100% - 120px ) 】

デモページ



<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
</head>
<body>
	<div id="head">
	</div>

	<div id="extend">
		<table class="table">
		<tbody id="tbl">
			<th>社員コード</th><th>氏名</th><th>フリガナ</th><th>所属</th><th>性別</th><th>作成日</th><th>更新日</th><th>給与</th><th>手当</th><th>管理者</th><th>生年月日</th>
			
			<!-- ここに複数の行データ -->

		</tbody>
		</table>

	</div>

</body>
</html>


two-section.css
@charset utf-8;


/* ****************************
 上下エリア
 フィットコントロール用
******************************/
html,body {
	height: 100%;
}
/* ****************************
 それぞれのエリアの特性
******************************/
/* 基本枠 */
body {
	margin: 0;
}
/* 上固定部分 */
#head {
	padding: 16px;
	display: block;
	margin: auto;
	width: 100%;							/* 幅 */
	height: 120px;							/* 高さ */
	background-color: #e0e0e0;
}
/* 下スクロール部分 */
#extend {
	padding: 4px 16px;
	display: block;
	margin: auto;
	width: calc( 100% - 3px );				/* 幅 */
	height: calc( 100% - 120px - 2px );		/* 高さ */
	border: solid 2px #c0c0c0;
	overflow: scroll;
}

/* ****************************
 一覧用テーブル
******************************/
/* 列の改行コードを有効 */
td,th {
	white-space: pre;
}

/* テーブル内のデータを選択不可 */
#tbl {
	user-select: none;
	-moz-user-select: none;
	-webkit-user-select: none;
	-ms-user-select: none;
}





posted by at 2019-08-17 14:48 | CSS | このブログの読者になる | 更新情報をチェックする

2019年08月16日

Android Studio : LiveDoor のお天気情報をリストビューに表示する手順

手順1

AndroidManifest.xml に、以下を追加する

<uses-permission android:name="android.permission.INTERNET"/>

手順2

build.gradle(Module) に、OkhttpGoogle Gson の記述を追加する
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.squareup.okhttp3:okhttp:4.1.0'
}


activity_main.xml に ListView をセット
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>


JSON データをデシリアイズする為のクラスを作成
public class Weather {

	WebData[] pinpointLocations;

}
public class WebData {

	String link;
	String name;

	@Override
	public String toString() {
		return name;
	}
}

インターネットアクセス用のクラス

HttpAccess クラスを追加
import android.os.AsyncTask;

import java.io.IOException;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class HttpAccess {

	private OkHttpClient okHttpClient;
	private String url;

	public interface OnAsyncTaskListener {
		abstract public void onAsyncTaskListener(String s);
	}

	public HttpAccess(String url) {
		this.okHttpClient = new OkHttpClient();
		this.url = url;
	}

	public void sendGet(final OnAsyncTaskListener listener ) {

		new AsyncTask<Void,Void,String>(){
			@Override
			protected String doInBackground(Void... params) {
				String result = "[\"error\"]";

				Request.Builder builder = new Request.Builder();
				builder.url(HttpAccess.this.url);
				Request request = builder.build();

				Response response = null;
				try {
					response = HttpAccess.this.okHttpClient.newCall(request).execute();
					result = response.body().string();
				}
				catch (IOException e) {
					e.printStackTrace();
				}

				return result;
			}

			// UI スレッド処理
			@Override
			protected void onPostExecute(String s) {
				super.onPostExecute(s);

				listener.onAsyncTaskListener(s);

			}
		}.execute();

	}

}


private 変数を三つ作成
private ListView listView;
private ArrayAdapter<WebData> arrayAdapter;
private HttpAccess httpAccess;


ListView と ArrayAdapter のインスタンスを作成

以降 onCreate にて。
listView = (ListView) MainActivity.this.findViewById(R.id.listView);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

		// クリックされたアイテムを取得
		WebData mydata = (WebData) parent.getItemAtPosition(position);
		// LogCatに表示
		Log.i("lightbox", mydata.name);
		Log.i("lightbox", mydata.link);

		// URL を開く
		Uri uri = Uri.parse(mydata.link);
		Intent intent = new Intent(Intent.ACTION_VIEW, uri);
		if (intent.resolveActivity(MainActivity.this.getPackageManager()) != null) {
			MainActivity.this.startActivity(intent);
			return;
		}

	}
});
arrayAdapter = new ArrayAdapter<WebData>(MainActivity.this,android.R.layout.simple_list_item_1);


ListView に ArrayAdapter をセット

listView.setAdapter(arrayAdapter);

API を呼び出して結果をリストビューにセット
最新の Android では、https 通信以外では設定が必要なので、Firebase にJSON を登録してテストしました

( http://weather.livedoor.com/forecast/webservice/json/v1?city=270000 )
new HttpAccess("https://your-project-xxxxx.firebaseio.com/weather.json")
	.sendGet(new HttpAccess.OnAsyncTaskListener() {
		@Override
		public void onAsyncTaskListener(String s) {

			Gson gson = new Gson();
			Weather weather = gson.fromJson(s, Weather.class);

			arrayAdapter.clear();
			arrayAdapter.addAll(weather.pinpointLocations);

		}
	});


さらに Intent で第二画面

Android Studio : LiveDoor のお天気情報をリストビューに表示した後、第二画面で name を変更して第一画面で再表示する手順



タグ:android java
posted by at 2019-08-16 23:08 | Android | このブログの読者になる | 更新情報をチェックする

WSH( JScript ) : MySQL から Excel へエクスポート ( Microsoft.ACE.OLEDB.12.0 接続 )

テストした環境では、MySQL の ODBC ドライバは 32 ビットしかないので、SysWOW64\cscript.exe を使用する必要があります

<JOB>
<SCRIPT language="JScript">
// ****************************
// SysWOW64\cscript.exe を使用
// ****************************
str = WScript.FullName;
if ( str.search(/syswow/i) == -1 ) {

	shell = new ActiveXObject("Shell.Application");
	folder = shell.Namespace( 0x29 );
	folderItem = folder.Self;
	target_path = folderItem.Path;

	str = WScript.ScriptFullName;
	WshShell =  new ActiveXObject("WScript.Shell");
	WshShell.Run( "cmd.exe /c " + target_path + "\\cscript.exe \"" + str + "\" & pause", 3 );
	WScript.Quit();
}

// ****************************
// オブジェクト作成
// ****************************
var cn = new ActiveXObject( "ADODB.Connection" )

// ****************************
// 接続用の文字列を準備
// ****************************
var file_path1_accdb = "C:\\Users\\sworc\\Documents\\hanbaic-set\\hanbaic.accdb";
var connection_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_path1_accdb + ";";

// ****************************
// エクスポート用の文字列を準備
// ****************************
var import_target = "[ODBC;Driver={MySQL ODBC 5.3 Unicode Driver};server=localhost;database=lightbox;uid=root;pwd=]";
var target_name = "社員マスタ";
var file_path_xlsx = "C:\\Users\\sworc\\Documents\\hanbaic-set\\new.xlsx";
var export_target = "[Excel 12.0 xml;DATABASE=" + file_path_xlsx +"]";
var export_query = "select * into " + export_target + "." + target_name + " from " + import_target + "." + target_name;

WScript.Echo( export_query );

// ****************************
// エクスポート
// ****************************
cn.Open( connection_string );
cn.Execute( export_query );
cn.Close();

WScript.Echo( target_name + " の Excel へのエクスポート処理が終了しました" );

</SCRIPT>
</JOB>





posted by at 2019-08-16 18:04 | WSH( JScript ) | このブログの読者になる | 更新情報をチェックする

デスクトップにユーザアイコン( 右クリックでメニュー )



デスクトップにネームスペース( {6100C8E5-973E-40B7-8254-807855D2C355} ) を作成して、初期名 を USER で設定してアイコンを割り付け、右クリックで実行可能なメニューを登録しています。




Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{6100C8E5-973E-40B7-8254-807855D2C355}]
@="USER"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}]
@="USER"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\DefaultIcon]
@="%SystemRoot%\\system32\\imageres.dll,1"


[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\ShellFolder]
"Attributes"=dword:00000010

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\000]
@="Google Chrome"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\000\command]
@="\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --incognito https://www.google.co.jp/"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\001]
@="   サービス"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\001\command]
@=hex(2):6d,00,6d,00,63,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,53,00,79,\
  00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,\
  73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,65,00,72,00,76,00,69,00,63,\
  00,65,00,73,00,2e,00,6d,00,73,00,63,00,22,00,20,00,2f,00,73,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\002]
@="   システム情報"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\002\command]
@=hex(2):22,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,\
  00,65,00,73,00,25,00,5c,00,43,00,6f,00,6d,00,6d,00,6f,00,6e,00,20,00,46,00,\
  69,00,6c,00,65,00,73,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,\
  00,74,00,20,00,53,00,68,00,61,00,72,00,65,00,64,00,5c,00,4d,00,53,00,49,00,\
  6e,00,66,00,6f,00,5c,00,6d,00,73,00,69,00,6e,00,66,00,6f,00,33,00,32,00,2e,\
  00,65,00,78,00,65,00,22,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\003]
@="   プログラムと機能"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\003\command]
@="RunDLL32.EXE shell32.dll,Control_RunDLL appwiz.cpl"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\004]
@="   ODBC アドミニストレータ"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\004\command]
@="RunDLL32.EXE shell32.dll,Control_RunDLL odbccp32.cpl"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\005]
@="   レジストリエディタ"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\005\command]
@="regedit.exe"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\006]
@="   コマンドプロンプト"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\006\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,63,00,6d,00,\
  64,00,2e,00,65,00,78,00,65,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\007]
@="   UAC"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\007\command]
@=hex(2):55,00,73,00,65,00,72,00,41,00,63,00,63,00,6f,00,75,00,6e,00,74,00,43,\
  00,6f,00,6e,00,74,00,72,00,6f,00,6c,00,53,00,65,00,74,00,74,00,69,00,6e,00,\
  67,00,73,00,2e,00,65,00,78,00,65,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\008]
@="   イベント ビューアー"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\008\command]
@=hex(2):6d,00,6d,00,63,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,77,00,69,\
  00,6e,00,64,00,69,00,72,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,\
  33,00,32,00,5c,00,65,00,76,00,65,00,6e,00,74,00,76,00,77,00,72,00,2e,00,6d,\
  00,73,00,63,00,22,00,20,00,2f,00,73,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\009]
@="   ユーザーアカウント"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\009\command]
@="rundll32.exe netplwiz.dll,UsersRunDll"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\010]
@="   環境変数"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\010\command]
@="rundll32.exe sysdm.cpl,EditEnvironmentVariables"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\011]
@="   HOSTS"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\011\command]
@=hex(2):63,00,6d,00,64,00,2e,00,65,00,78,00,65,00,20,00,2f,00,63,00,20,00,70,\
  00,6f,00,77,00,65,00,72,00,73,00,68,00,65,00,6c,00,6c,00,20,00,2d,00,4e,00,\
  6f,00,50,00,72,00,6f,00,66,00,69,00,6c,00,65,00,20,00,2d,00,45,00,78,00,65,\
  00,63,00,75,00,74,00,69,00,6f,00,6e,00,50,00,6f,00,6c,00,69,00,63,00,79,00,\
  20,00,75,00,6e,00,72,00,65,00,73,00,74,00,72,00,69,00,63,00,74,00,65,00,64,\
  00,20,00,2d,00,57,00,69,00,6e,00,64,00,6f,00,77,00,53,00,74,00,79,00,6c,00,\
  65,00,20,00,68,00,69,00,64,00,64,00,65,00,6e,00,20,00,2d,00,43,00,6f,00,6d,\
  00,6d,00,61,00,6e,00,64,00,20,00,22,00,73,00,74,00,61,00,72,00,74,00,20,00,\
  6e,00,6f,00,74,00,65,00,70,00,61,00,64,00,2e,00,65,00,78,00,65,00,20,00,25,\
  00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,\
  73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,72,00,69,00,76,\
  00,65,00,72,00,73,00,5c,00,65,00,74,00,63,00,5c,00,68,00,6f,00,73,00,74,00,\
  73,00,20,00,2d,00,76,00,65,00,72,00,62,00,20,00,72,00,75,00,6e,00,61,00,73,\
  00,22,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\012]
@="   フォルダオプション"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\012\command]
@="RUNDLL32.EXE shell32.dll,Options_RunDLL 7"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\013]
@="   タスク スケジューラ"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\013\command]
@=hex(2):6d,00,6d,00,63,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,77,00,69,\
  00,6e,00,64,00,69,00,72,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,\
  33,00,32,00,5c,00,74,00,61,00,73,00,6b,00,73,00,63,00,68,00,64,00,2e,00,6d,\
  00,73,00,63,00,22,00,20,00,2f,00,73,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\014]
@="   ローカル グループ ポリシーエディタ"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\014\command]
@=hex(2):6d,00,6d,00,63,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,53,00,79,\
  00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,\
  73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,67,00,70,00,65,00,64,00,69,00,74,\
  00,2e,00,6d,00,73,00,63,00,22,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\015]
@="   リモートデスクトップ"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\015\command]
@="mstsc.exe"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\016]
@="   Windows Update"

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\016\command]
@="control.exe /name Microsoft.WindowsUpdate"


[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\Manage]
@=hex(2):40,00,25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,74,\
  00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,\
  79,00,63,00,6f,00,6d,00,70,00,75,00,74,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
  00,34,00,30,00,30,00,00,00
"HasLUAShield"=""
"MUIVerb"=hex(2):40,00,25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,6d,00,79,00,63,00,6f,00,6d,00,70,00,75,00,74,00,2e,00,64,00,6c,00,6c,00,\
  2c,00,2d,00,34,00,30,00,30,00,00,00
"SuppressionPolicy"=dword:4000003c

[HKEY_CLASSES_ROOT\CLSID\{6100C8E5-973E-40B7-8254-807855D2C355}\shell\Manage\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,43,00,6f,00,\
  6d,00,70,00,4d,00,67,00,6d,00,74,00,4c,00,61,00,75,00,6e,00,63,00,68,00,65,\
  00,72,00,2e,00,65,00,78,00,65,00,00,00








posted by at 2019-08-16 14:37 | Windows | このブログの読者になる | 更新情報をチェックする

2019年08月15日

WSH( JScript ) : .accdb より Excel へのエクスポート

★ 主キーはあとから作成する必要があります。
★ 主キー作成しなければ、insert 〜 select で重複したデータを追加する事ができます

<JOB>
<SCRIPT language="JScript">
// ****************************
// オブジェクト作成
// ****************************
var cn = new ActiveXObject( "ADODB.Connection" )

// ****************************
// 接続用の文字列を準備
// ****************************
var file_path1_accdb = "C:\\Users\\sworc\\Documents\\hanbaic-set\\hanbaic.accdb";
var connection_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_path1_accdb + ";";

// ****************************
// エクスポート用の文字列を準備
// ****************************
var target_name = "社員マスタ";
var file_path_xlsx = "C:\\Users\\sworc\\Documents\\hanbaic-set\\new.xlsx";
var export_target = "[Excel 12.0 xml;DATABASE=" + file_path_xlsx +"]";
var export_query = "select * into " + export_target + "." + target_name + " from " + target_name;

// ****************************
// エクスポート
// ****************************
cn.Open( connection_string );
cn.Execute( export_query );
cn.Close();

WScript.Echo( target_name + " の Excel へのエクスポート処理が終了しました" );

</SCRIPT>
</JOB>




posted by at 2019-08-15 17:18 | WSH( JScript ) | このブログの読者になる | 更新情報をチェックする

WSH( JScript ) の基本

拡張子を js にして、SCRIPT 要素内のみでも実行可能です。
但しその場合は、オブジェクトは new ActiveXObject で作成しておくと 他(IE11/HTA)へ 転用しやすくなります。

<JOB>
<OBJECT id="objShell" progid="Shell.Application" />
<SCRIPT language="JScript">
// OBJECT 要素を使用しない場合は以下
// var objShell = new ActiveXObject("Shell.Application"); // タイプ1
// var objShell = WScript.CreateObject("Shell.Application"); // タイプ2

objShell.ShutdownWindows();
</SCRIPT>
</JOB>


<JOB>
<OBJECT id="objShell" progid="Shell.Application" />
<SCRIPT language="JScript">
// OBJECT 要素を使用しない場合は以下
// var objShell = new ActiveXObject("Shell.Application"); // タイプ1
// var objShell = WScript.CreateObject("Shell.Application"); // タイプ2

objShell.FileRun();
</SCRIPT>
</JOB>


<JOB>
<SCRIPT language="JScript">
str = WScript.FullName;
str = str.substr( str.length - 11, 11 );
str = str.toUpperCase();
if ( str != "CSCRIPT.EXE" ) {
	str = WScript.ScriptFullName;
	WshShell =  new ActiveXObject("WScript.Shell");
	WshShell.Run( "cmd.exe /c cscript.exe \"" + str + "\" & pause", 3 );
	WScript.Quit();
}

WScript.Echo();
WScript.Echo("表示");
WScript.Echo("5000ミリ秒停止");

WScript.Sleep(5000);

WScript.Echo("終了します");
WScript.Quit();

</SCRIPT>
</JOB>





posted by at 2019-08-15 16:50 | WSH( JScript ) | このブログの読者になる | 更新情報をチェックする

WSH(JScript) + Excel : 名前の定義がされた範囲をテーブルとして SELECT 文で 標準出力に CSV 出力

▼ CSV を作成するには以下のようにコマンドプロンプトで実行します。
cscript //nologo read-excel12-ado.wsf > table.csv 
★ テスト実行は、エクスプローラより実行します。 ★ .xls でも動作します read-excel12-ado.wsf
<JOB>
<SCRIPT language="JScript">

str = WScript.FullName;
str = str.substr( str.length - 11, 11 );
str = str.toUpperCase();
if ( str != "CSCRIPT.EXE" ) {
	str = WScript.ScriptFullName;
	WshShell =  new ActiveXObject("WScript.Shell");
	WshShell.Run( "cmd.exe /c cscript.exe //Nologo \"" + str + "\" & pause", 3 );
	WScript.Quit();
}

// ****************************
// オブジェクト作成
// ****************************
var cn = new ActiveXObject( "ADODB.Connection" )
var rs = new ActiveXObject( "ADODB.Recordset" )

var file_path = "C:\\Users\\sworc\\Documents\\hanbaic-set\\hanbaic.xlsx";
var target_name = "社員マスタ";

// ****************************
// 接続用の文字列を準備
// ****************************
var connection_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_path + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\"";

// ****************************
// 接続
// ****************************
cn.Open( connection_string );

// ****************************
// レコードセット取得
// ****************************
query = "select * from " + target_name;
rs.Open( query, cn );

// ****************************
// タイトル出力
// ****************************
var line_buffer = "";
for( i = 0; i < rs.Fields.Count; i++ ) {
	if ( line_buffer != "" ) {
		line_buffer += ",";
	}
	line_buffer += rs.Fields(i).Name;
}
WScript.echo( line_buffer );

// ****************************
// データ出力
// ****************************
while( !rs.EOF ) {
	line_buffer = "";
	if ( line_buffer != "" ) {
		line_buffer += ",";
	}
	for( i = 0; i < rs.Fields.Count; i++ ) {
		if ( line_buffer != "" ) {
			line_buffer += ",";
		}
		line_buffer += rs.Fields(i).Value;
	}
	WScript.echo( line_buffer );

	rs.MoveNext();
}

// ****************************
// レコードセットクローズ
// ****************************
rs.Close();

// ****************************
// 接続解除
// ****************************
cn.Close();

</SCRIPT>
</JOB>




posted by at 2019-08-15 16:27 | WSH( JScript ) | このブログの読者になる | 更新情報をチェックする

2019年08月14日

IE11 : new ActiveXObject("ADODB.Connection") で .accdb のテーブル一覧を jQuery で TABLE に作成する

関連する記事

VBScript : 3種のMDB(または accdb)内の テーブル一覧取得方法

var cn = new ActiveXObject("ADODB.Connection");
var rs = new ActiveXObject("ADODB.Recordset");
var schema;

// ******************************
// データベースの接続
// ******************************
function connectDb(){

	// データベースの処理
	var path = "C:\\Users\\sworc\\Documents\\hanbaic-set\\hanbaic.accdb";
	var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";";

	cn.Open( connectionString );

	schema = cn.OpenSchema( 20, [,,,] );

}

// ******************************
// jQuery でテーブル作成
// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/schemaenum?view=sql-server-2017
// ******************************
function buildTable( ){

	while( !schema.EOF ) {

		var table_name = schema.Fields("TABLE_NAME").Value;
		if ( table_name.indexOf("MSys") == 0 ) {
			schema.MoveNext();
			continue;
		}

		var tr = $("<tr class='rowdata'></tr>")
			.appendTo("#tbl");

		$("<td></td>")
			.appendTo(tr)
			.css({
				"color": "#007bff",
				"text-decoration": "underline",
				"cursor": "pointer",
				"width": "250px"
			})
			.text(schema.Fields("TABLE_NAME").Value)
			// セルにイベントを作成
			.on("click", function(){

				console.log( $(this).text() );

			})
			;

		$("<td></td>")
			.appendTo(tr)
			.text(schema.Fields("TABLE_TYPE").Value);


		schema.MoveNext();
	}

	cn.Close();

}

$(function(){

	// ロード時の全ての行の表示
	connectDb();
	buildTable( );

});



※ これ以外に、ドメイン間のデーターソースのアクセスを【有効】にしてください

<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">

<script>
var cn = new ActiveXObject("ADODB.Connection");
var rs = new ActiveXObject("ADODB.Recordset");
var schema;

// ******************************
// データベースの接続
// ******************************
function connectDb(){

	// データベースの処理
	var path = "C:\\httpd142p\\ie11\\hanbaic-set\\hanbaic.accdb";
	var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";";

	cn.Open( connectionString );

	schema = cn.OpenSchema( 20, [,,,] );

}

// ******************************
// jQuery でテーブル作成
// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/schemaenum?view=sql-server-2017
// ******************************
function buildTable( ){

	while( !schema.EOF ) {

		var table_name = schema.Fields("TABLE_NAME").Value;
		if ( table_name.indexOf("MSys") == 0 ) {
			schema.MoveNext();
			continue;
		}

		var tr = $("<tr class='rowdata'></tr>")
			.appendTo("#tbl");

		$("<td></td>")
			.appendTo(tr)
			.css({
				"color": "#007bff",
				"text-decoration": "underline",
				"cursor": "pointer",
				"width": "250px"
			})
			.text(schema.Fields("TABLE_NAME").Value)
			// セルにイベントを作成
			.on("click", function(){

				console.log( $(this).text() );

			})
			;

		$("<td></td>")
			.appendTo(tr)
			.text(schema.Fields("TABLE_TYPE").Value);


		schema.MoveNext();
	}

	cn.Close();

}

$(function(){

	$("#action").on("click", function(){

		// ロード時の全ての行の表示
		connectDb();
		buildTable( );

	});


});
</script>
</head>
<body>
	<div id="head">
		<input type="button" value="実行" id="action">
	</div>

	<div id="extend">
		<table class="table">
		<tbody id="tbl">

		</tbody>
		</table>

	</div>

</body>
</html>


関連する記事

下半分がスクロールするページ【 height: calc( 100% - 120px ) 】



posted by at 2019-08-14 21:09 | IE | このブログの読者になる | 更新情報をチェックする

IE11 + jQuery で、select( リスト)をタブルクリックした時に OPTION 要素の処理を行うコード

Google Chrome では、OPTION 要素に直接 dblclick イベントを作成できましたが、IE11 では無視されたので以下のようにして実装しました

select でイベントを作成して、その後選択されている場所が対象なので $(this).find(":selected") で参照します

※ デモページ
$(function(){

	// **************************************
	// 対象追加
	// **************************************
	$("#target").on("dblclick", function(){

		var target = $(this).val();

		$("#code option").each(function( idx ){

			if ( $(this).val() == target ) {
				alert( "この対象は既にセットされています" );
				target = null;
				return;
			}

		});

		if ( target != null ) {
			$("<option></option>")
				.val( target )
				.text( $(this).find(":selected").text() )
				.appendTo("#code")
			;
		}

	});

	// **************************************
	// メンバ削除
	// **************************************
	$("#code").on("dblclick", function(event){

		console.log("dblclick");

		$(this).find(":selected").remove();

	});

});



posted by at 2019-08-14 19:48 | IE | このブログの読者になる | 更新情報をチェックする

ActiveXObject("WScript.Shell" ) でコマンドプロンプトベースの外部プログラムより情報を取得

wscript.Run で、同期処理でコマンドプロンプトを表示せずに cmd.exe を呼び出して、標準出力に結果を出力するアプリを実行させてリダイレクトでファイルに書き込みます。

すぐにそのテキストを読み込んで、IE11 内の処理で使用します。

var wscript = new ActiveXObject("WScript.Shell" );

wscript.Run("cmd /c ipconfig > " + getFullPath("log.txt"),0 , true);
var infile = fs.OpenTextFile( getFullPath("log.txt"), 1 );
var text = infile.ReadAll();
infile.Close();







posted by at 2019-08-14 17:55 | IE | このブログの読者になる | 更新情報をチェックする

ActiveXObject("CDO.Message") でメール送信

ほぼほぼ IE11 での利用となります。





var cdo = new ActiveXObject("CDO.Message");

var server = "SMTPサーバー";
var port = 587; // または 465
var user = "ユーザ";
var from = "メールアドレス";
var pass = "パスワード";

// ***************************
// メール送信
// ***************************
function cdo_mail_send(to, subject, text_body) {

	// ***************************
	// 自分のアドレスと宛先
	// ***************************
	cdo.From = from
	cdo.To = to

	// ***************************
	// 件名と本文
	// ***************************
	cdo.Subject	= subject;
	cdo.Textbody = text_body;

	// ***************************
	// 設定
	// ***************************
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = server;
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = port;

	// ポートが 465 の場合は true に変更
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = false;

	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = user;
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = pass;

	// ***************************
	// 設定
	// ***************************
	cdo.Configuration.Fields.Update();

	// ***************************
	// 送信
	// ***************************
	try {
		cdo.Send();

		console.log( "cdo.Send() : " + to + ":" + subject);
	}
	catch (e) {
		console.dir(e);
		alert("cdo.Send() でエラーが発生しました");
	}

}

// http://logicalerror.seesaa.net/article/312259839.html




posted by at 2019-08-14 15:50 | IE | このブログの読者になる | 更新情報をチェックする

C# : Microsoft Access の接続で、他の RDBMS( ここでは MySQL ) にエクスポートを行う

OleDb で接続し、select 〜 into 構文の出力先を [ODBC; ... ] を使用した接続文字列の記述で SQL 上で直接参照してエクスポートを実現します。この際、キーは設定されないので2回目以降の insert 〜 select 構文で追加エクスポートが可能です

using System;
using System.Data.OleDb;

namespace Export_MySQL
{
	class Program
	{
		static void Main(string[] args)
		{
			OleDbConnection accdb;
			bool bError = false;
			string mysql_connection_string = "[ODBC;Driver={MySQL ODBC 5.3 Unicode Driver};server=localhost;database=lightbox;uid=root;pwd=]";

			using (accdb = new OleDbConnection())
			using (OleDbCommand command = new OleDbCommand())
			{
				string file_path = @"C:\Users\sworc\Documents\hanbaic-set\hanbaic.accdb";
				accdb.ConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={file_path};";
				try
				{
					accdb.Open();
					Console.WriteLine($"{file_path} で接続されました");
				}
				catch (Exception ex)
				{
					Console.WriteLine("接続エラーです:" + ex.Message);
					bError = true;
				}

				if (bError)
				{
					return;
				}

				// テーブルを新規作成してエクスポート
				string query = 
$@"select * into {mysql_connection_string}.社員マスタ_accdb
	from 社員マスタ";

				Console.WriteLine(query);

				try
				{
					// コマンドオブジェクトに接続をセット
					command.Connection = accdb;
					command.CommandText = query;
					command.ExecuteNonQuery();

					Console.WriteLine("エクスポートされました");
				}
				catch (Exception ex)
				{
					Console.WriteLine("SQL 実行エラーです:" + ex.Message);
					
					bError = true;
				}

				if (bError)
				{
					// 既存テーブルにエクスポート
					query = 
$@"insert into {mysql_connection_string}.社員マスタ_accdb
	select * from 社員マスタ";

					Console.WriteLine(query);

					try
					{
						// コマンドオブジェクトに接続をセット
						command.Connection = accdb;
						command.CommandText = query;
						command.ExecuteNonQuery();

						Console.WriteLine("エクスポートされました");
					}
					catch (Exception ex)
					{
						Console.WriteLine(query);
						Console.WriteLine("SQL 実行エラーです:" + ex.Message);
					}
				}
			}

			Console.ReadLine();
		}
	}
}


関連する記事

System.Data.OleDb で select into 構文を使って簡単に Microsoft Access のデータを他の データベースにエクスポートする

データーベース間 テーブルアクセス




posted by at 2019-08-14 01:35 | C# | このブログの読者になる | 更新情報をチェックする

2019年08月12日

C# : TKMP.DLLを使った、Gmail 用メール送信テンプレート

Gmail 用テンプレート




Gmail は、安全性の低いアプリの許可を『有効』にする必要があります。( 使用した後は無効にしましょう )
using System;
using System.Windows.Forms;
using TKMP.Net;

namespace TKMP_SendMail_Gmail
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{

			MailClass mc = new MailClass()
			{
				SmtpServer = "smtp.gmail.com",
				Port = 587,
				User = "アカウント",
				Pass = password.Text,
				Protocol = AuthenticationProtocols.TLS
			};

			var result = mc.SendMail(
				"宛先",
				"自メールアドレス",
				this.subject.Text,
				this.body.Text,
				null,   // 必要な場合、宛先を日本語で
				null,   // 必要な場合、差出人を日本語で
				(MailClass.MailClassErrorArg _e) =>
				{
					this.error.Text = _e.Message;
				}
			);

			if (result)
			{
				MessageBox.Show("メールを送信しました");
			}

		}

	}
}


TKMP を使用した MailClass
using System;
using TKMP.Writer;
using TKMP.Net;

namespace TKMP_SendMail_Gmail
{
	class MailClass
	{
		private MailWriter mailWriter = null;

		public string SmtpServer { get; set; }
		public int Port { get; set; }
		public string User { get; set; }
		public string Pass { get; set; }
		public AuthenticationProtocols Protocol { get; set; }

		private string err_message = "";

		public class MailClassErrorArg
		{
			public string Message { get; set; }
		}

		public delegate void MailClassError(MailClassErrorArg e);

		public bool SendMail(string To, string From, string Subject, string Body, string To_J, string From_J, MailClassError mailClassError)
		{
			bool bResult = true;

			mailWriter = new MailWriter();

			try
			{
				mailWriter.ToAddressList.Add(To);
			}
			catch (Exception ex)
			{
				bResult = false;
			}

			// エラー処理
			if (!bResult)
			{
				if (mailClassError != null)
				{
					MailClassErrorArg e = new MailClassErrorArg() { Message = "宛先が正しくありません" };
					mailClassError(e);
				}
				return bResult;
			}

			// From が未指定や正しくない文字列の場合
			try
			{
				mailWriter.FromAddress = From;
			}
			catch (Exception ex)
			{
				mailWriter.FromAddress = "______@gmail.com";
			}

			TextPart textPart = new TextPart(Body);
			mailWriter.MainPart = textPart;

			if (To_J != null)
			{
				mailWriter.Headers.Add("To", To_J + " <" + To + ">");
			}
			else
			{
				mailWriter.Headers.Add("To", To);
			}

			if (From_J != null)
			{
				mailWriter.Headers.Add("From", From_J + " <" + From + ">");
			}
			else
			{
				mailWriter.Headers.Add("From", From);
			}

			mailWriter.Headers.Add("Subject", Subject);
			mailWriter.Headers.Add("X-Mailer", "TKMP Version 3.1.2");

			var logon = new TKMP.Net.AuthLogin(User, Pass);
			SmtpClient smtpClient = new SmtpClient(SmtpServer, Port, logon);
			smtpClient.AuthenticationProtocol = Protocol;

			try
			{
				if (!smtpClient.Connect())
				{
					err_message = "接続に失敗しました";
					bResult = false;
				}
				else
				{
					smtpClient.SendMail(mailWriter);
					smtpClient.Close();
				}
			}
			catch (Exception ex)
			{
				err_message = ex.Message;
				bResult = false;
			}

			// エラー処理
			if (!bResult)
			{
				if (mailClassError != null)
				{
					MailClassErrorArg e = new MailClassErrorArg() { Message = err_message };
					// このメソッドの引数である、ErrorHandler デリゲートを呼び出す
					mailClassError(e);
				}
			}

			return bResult;
		}

		// エラー処理なし
		public bool SendMail(string To, string From, string Subject, string Body, string To_J, string From_J)
		{
			return SendMail(To, From, Subject, Body, To_J, From_J, null);
		}

		// 日本語なし、エラー処理なし
		public bool SendMail(string To, string From, string Subject, string Body)
		{
			return SendMail(To, From, Subject, Body, null, null, null);
		}

	}

}




posted by at 2019-08-12 21:59 | C# | このブログの読者になる | 更新情報をチェックする

C# : DataGridView を使用したナチュラルな行データの更新

DataGridView のセルをダブルクリックして編集可能にして、編集後更新ボタンで更新されます。







using System;
using System.Data;
using System.Data.Odbc;
using System.Windows.Forms;

namespace MySQL_DataGridView
{
	public partial class Form1 : Form
	{
		// *****************************
		// SQL文字列格納用
		// *****************************
		private string query = "select * from 社員マスタ";

		// *****************************
		// 接続文字列作成用
		// *****************************
		private OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();

		// *****************************
		// コンストラクタ
		// *****************************
		public Form1()
		{
			InitializeComponent();

			setBuilderData();
		}

		// *****************************
		// 接続文字列の準備
		// *****************************
		private void setBuilderData()
		{
			// ドライバ文字列をセット ( 波型括弧{} は必要ありません ) 
			// builder.Driver = "MySQL ODBC 8.0 Unicode Driver";
			builder.Driver = "MySQL ODBC 5.3 Unicode Driver";

			// 接続用のパラメータを追加
			builder.Add("server", "localhost");
			builder.Add("database", "lightbox");
			builder.Add("uid", "root");
			builder.Add("pwd", "");
		}

		// *****************************
		// 参照実行用クリックイベント
		// *****************************
		private void select_Click(object sender, EventArgs e)
		{
			loadMySQL();
		}

		// *****************************
		// SELECT 文よりデータ表示
		// *****************************
		private void loadMySQL()
		{

			// 接続と実行用のクラス
			using (OdbcConnection connection = new OdbcConnection())
			using (OdbcCommand command = new OdbcCommand())
			{
				// 接続文字列
				connection.ConnectionString = builder.ConnectionString;

				try
				{
					// 接続文字列を使用して接続
					connection.Open();
				}
				catch (Exception ex)
				{
					MessageBox.Show(ex.Message);
					return;
				}

				// コマンドオブジェクトに接続をセット
				command.Connection = connection;
				// コマンドを通常 SQL用に変更
				command.CommandType = CommandType.Text;

				// *****************************
				// 実行 SQL
				// *****************************
				command.CommandText = query;

				try
				{
					// レコードセット取得
					using (OdbcDataReader reader = command.ExecuteReader())
					{
						// データを格納するテーブルクラス
						DataTable dataTable = new DataTable();
						// DataReader よりデータを格納
						dataTable.Load(reader);

						// 画面の一覧表示用コントロールにセット
						dataGridView_Syain.DataSource = dataTable;

						// データがあった場合は更新ボタンを使用可能にする
						if ( dataTable.Rows.Count != 0 )
						{
							// 更新ボタン
							update.Enabled = true;
						}

						// リーダを使い終わったので閉じる
						reader.Close();
					}

				}
				catch (Exception ex)
				{
					// 接続解除
					connection.Close();
					MessageBox.Show(ex.Message);
					return;
				}

				// 接続解除
				connection.Close();
			}

			// カラム幅の自動調整
			dataGridView_Syain.AutoResizeColumns();
		}


		// *****************************
		// 更新実行用クリックイベント
		// *****************************
		private void update_Click(object sender, EventArgs e)
		{
			using (OdbcConnection connection = new OdbcConnection())
			{
				// 接続文字列
				connection.ConnectionString = builder.ConnectionString;

				// 更新を管理するクラス
				// ※ 更新するには、テーブルに主キーが必要です
				OdbcDataAdapter adapter = new OdbcDataAdapter();
				// 参照用のマップを追加
				adapter.TableMappings.Add("Table", "社員マスタ");
				// 接続とコマンド( コマンドは更新用のレコードを取得した SQL ) 
				adapter.SelectCommand = new OdbcCommand(query, connection);

				// 更新用のオブジェクトを準備
				OdbcCommandBuilder commandBuilder = new OdbcCommandBuilder(adapter);
				// 更新用のコマンドを取得
				adapter.UpdateCommand = commandBuilder.GetUpdateCommand();

				// 更新用 SQL のベース文字列
				Console.WriteLine(adapter.UpdateCommand.CommandText);

				// *****************************
				// 更新
				// *****************************
				try
				{
					// DataGridView の内容を使用して更新
					// ※ 他で更新されてしまった行は更新エラーとなります
					// ※ 内部で管理された更新予定行を対象として更新します
					adapter.Update((DataTable)dataGridView_Syain.DataSource);

					MessageBox.Show("更新を終了しました");
				}
				catch (Exception ex)
				{
					MessageBox.Show(ex.Message);
				}
			}
		}
	}
}


列定義を自分で作成する場合は以下を参照してください

Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード




posted by at 2019-08-12 19:49 | C# | このブログの読者になる | 更新情報をチェックする

2019年07月02日

家に持ち帰った mdb で簡単に php からアクセスしてテストプログラムを作る( MDBクラス付き )

もう、いまどき PHP + MDB なんてのは、仕事でしか書かないですが・・・

こんなことする人もまれだとは思いますが、知ってると結構便利だと思いますよ。
<?php
header( "Content-Type: text/html; charset=utf-8" );
session_cache_limiter('nocache');
session_start();

require_once("db.php");

$connect_string = "Provider=MSDASQL;";
$connect_string .= "Driver={Microsoft Access Driver (*.mdb, *.accdb)};";
$connect_string .= "dbq=C:\\Users\\sworc\\Downloads\\hanbaic_masters.mdb;";

$db = new MDB( $connect_string, "UTF-8" );

$query = "select * from [社員マスタ]";

$column = $db->query_ex( $query );

while ( $column ) {
	print "<pre>";
	print_r( $column );
	print "</pre>";

	$column = $db->query_ex( );
};

$db->close();

?>


db.php
<?php
// ***************************
// データベースクラス
// ***************************
class MDB {
 
	var $connect;
	var $result;
	var $encoding;
 
// ***************************
// コンストラクタ
// ***************************
	function MDB( $connect_string, $encoding="MS932", $user='', $password='' ) {

		$this->encoding = $encoding;

		$this->connect = odbc_connect($connect_string, $user, $password);
	}
 
// ***************************
// 接続解除
// ***************************
	function close( ) {
		odbc_close( $this->connect );
	}
 
// ***************************
// クエリー
// ***************************
	function query( $sql_query ) {

		if ( $this->encoding != "MS932" ) {
			$sql_query = mb_convert_encoding($sql_query,"MS932",$this->encoding);
		}

		$ret = odbc_exec( $this->connect, $sql_query );
		return $ret;
	}
 
// ***************************
// フェッチ
// ***************************
	function fetch( $result ) {

		$ret = odbc_fetch_array( $result );
		if ($ret) {
			if ( $this->encoding != "MS932" ) {
				foreach($ret as $_key => $_value) {
					$ret2[mb_convert_encoding($_key,$this->encoding,"MS932")] = mb_convert_encoding($_value,$this->encoding,"MS932");
				}
			}
			else {
				$ret2 = $ret;
			}
			$cnt = 0;
			foreach($ret as $_key => $_value) {
				if ( $this->encoding != "MS932" ) {
					$ret2[$cnt] = mb_convert_encoding($_value,$this->encoding,"MS932");
				}
				else {
					$ret2[$cnt] = $_value;
				}
				$cnt++;
			}
			return $ret2;
		}
		else {
			return false;
		}
	}
 
// ***************************
// クエリーとフェッチ
// ***************************
	function query_ex( $sql_query='' ) {
 
		if ( $sql_query != '' ) {
			$this->result = $this->query( $sql_query );
			if ( !$this->result ) {
				return false;
			}
			return $this->fetch( $this->result );
		}
		else {
			return $this->fetch( $this->result );
		}
 
	}
 
// ***************************
// 実行
// ***************************
	function Execute( $sql_exec ) {
		if ( $this->encoding != "MS932" ) {
			$sql_exec = mb_convert_encoding($sql_exec,"MS932",$this->encoding);
		}

		$ret = odbc_exec( $this->connect, $sql_exec );
		return $ret;
	}
 
 
}
?>


▼ 出力結果の例
Array
(
    [社員コード] => 0001
    [氏名] => 浦岡 友也
    [フリガナ] => ウラオカ トモヤ
    [所属] => 0003
    [性別] => 0
    [作成日] => 2005-09-12 00:00:00
    [更新日] => 2005-11-28 00:00:00
    [給与] => 270000
    [手当] => 9000
    [管理者] => 
    [生年月日] => 2000-01-01 00:00:00
    [社員区分] => 0
    [年代] => A
    [0] => 0001
    [1] => 浦岡 友也
    [2] => ウラオカ トモヤ
    [3] => 0003
    [4] => 0
    [5] => 2005-09-12 00:00:00
    [6] => 2005-11-28 00:00:00
    [7] => 270000
    [8] => 9000
    [9] => 
    [10] => 2000-01-01 00:00:00
    [11] => 0
    [12] => A
)
Array
(
    [社員コード] => 0002
    [氏名] => 山村 洋代
    [フリガナ] => ヤマムラ ヒロヨ
    [所属] => 0003
    [性別] => 1
    [作成日] => 2005-06-17 00:00:00
    [更新日] => 2005-09-18 00:00:00
    [給与] => 300000
    [手当] => 
    [管理者] => 
    [生年月日] => 2000-01-02 00:00:00
    [社員区分] => 0
    [年代] => A
    [0] => 0002
    [1] => 山村 洋代
    [2] => ヤマムラ ヒロヨ
    [3] => 0003
    [4] => 1
    [5] => 2005-06-17 00:00:00
    [6] => 2005-09-18 00:00:00
    [7] => 300000
    [8] => 
    [9] => 
    [10] => 2000-01-02 00:00:00
    [11] => 0
    [12] => A
)
昔仕事場の古い SQLServer がぶっ壊れた時、新しい OS やら新しい SQLServer やらで結局 PHP からアクセスする DB のドライバは ODBC で総とっかえしました。これが一番簡単で安全だという結果になっています





posted by at 2019-07-02 23:57 | PHP+DB | このブログの読者になる | 更新情報をチェックする

2019年06月28日

IE や Firefox の開発者ツールのコンソールで簡単に localStorage を見る為の1行コード

Google Chrome では、Application のタブで見る事も消す事もできますが、IE や Firefox ではコンソールから JavaScript を実行します
for(i=0;i<localStorage.length;i++){console.log(localStorage.key(i)+":"+localStorage[localStorage.key(i)])}




タグ:IE Firefox
posted by at 2019-06-28 23:02 | JavaScript | このブログの読者になる | 更新情報をチェックする


×

この広告は90日以上新しい記事の投稿がないブログに表示されております。