SQLの窓

2015年11月30日

mysqli で使用していた PHP のアプリを mdb で使用する為の簡易クラス

完全ではありませんが、一通りのテストは完了しています。まだまだバージョンアップすべき部分もありますが、とりあえず学校が後二日で冬休みになるので、学生が家で手軽に勉強できるように作成しました。

ODBC + MDB なので、ソースコードを SHIFT_JIS にするとここで行っているキャラクタセットの変換は必要無くなるのですが、いろいろと今時は全て UTF-8N で揃えたほうが学生の為に良いので、内部で変換しています。
$connect_string = "Provider=MSDASQL;";
$connect_string .= "Driver={Microsoft Access Driver (*.mdb)};";
$connect_string .= "dbq={$rpath}hanbaic.mdb;charSet=MS932;";
$connect = new odbc_mdb($connect_string);

class odbc_result {

	var $connect;
	var $result;
	var $num_rows;

	function odbc_result( $connect, $result ) {
		$this->connect = $connect;
		$this->result = $result;
		$this->num_rows = 0;
	}

// ***************************
// フェッチ
// ***************************
	function fetch_array( $dummy ) {

		$row = odbc_fetch_array( $this->result );
		if ( $row === false ) {
			return false;
		}

		$new_row = array();
		foreach( $row as $k => $v ) {
			$new_row[$this->connect->utf8($k)] = $this->connect->utf8($v);
		}
	
		return $new_row;
	}

	function fetch_all( $dummy ) {

		$all_row = array();

		while ($row = odbc_fetch_array( $this->result )) {
			$new_row = array();
			foreach( $row as $k => $v ) {
				$new_row[$this->connect->utf8($k)] = $this->connect->utf8($v);
			}
			$all_row[] = (object)$new_row;
		}

		return $all_row;
	}

}

class odbc_mdb {
 
	var $connect;
	var $result;
 
	function odbc_mdb( $connect_string ) {
		$this->connect = odbc_connect( $connect_string, "", "" );
	}
 
// ***************************
// キャラクタ変換
// ***************************
function utf8($str) {

	return mb_convert_encoding($str,"utf-8","MS932");
}
function sjis($str) {

	return mb_convert_encoding($str,"MS932", "utf-8");
}

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

		$this->result = odbc_exec( $this->connect, $this->sjis($sql_query) );
		return new odbc_result( $this, $this->result );
	}

// ***************************
// 実行
// ***************************
	function exec( $sql_exec ) {
		$ret = odbc_exec( $this->connect, $this->sjis($sql_exec) );
		return $ret;
	}
 
 
}


関連する記事

実運用では無く、学習用の WWWサーバーとしてはこれ以外に無い『AN HTTP Server』ですが、古いソフトなので使い方にコツがあります



タグ:PHP DB MDB ODBC microsoft
posted by at 2015-11-30 22:35 | Comment(0) | PHP+DB | このブログの読者になる | 更新情報をチェックする

2015年11月27日

もうすぐクリスマスなんで

時間があれば、20人くらい作りたいですが、今日はとりあえず。


 

やってみて解ったのは、一人より複数でクリスマースガールするほうが華やかで絵になりますね

▼ Iray でもレンダリングしてみました

 



posted by at 2015-11-27 02:16 | Comment(0) | DAZ3D | このブログの読者になる | 更新情報をチェックする

DAZ3D で Quad Tank が無料になってたので手に入れました。わりといい感じです



 

3Delight でレンダリングするとしょぼいですが、NVIDIA Iray だとノーマルでもそれなりです。もちろん簡単なレタッチは GIMP で行いましたが、いい感じです。

Quad Tank の Product Store Page よりずっといい仕上がりかもしれないです。


posted by at 2015-11-27 01:48 | Comment(0) | DAZ3D | このブログの読者になる | 更新情報をチェックする

2015年11月20日

tableMagic : 単純に JSON から TABLE、TR、TH、TR、TD を作成する jQuery のプラグイン

デモページ

ダウンロードページ

純国産プラグインです。使用方法も日本語です。

とにかく、元データとして JSON を想定していて、とりあえず TABLE を作成したい場合に便利です。ここから他のプラグインで加工するベースにするといいと思います。

注意事項

圧縮バージョンが配布されていないので、必要ならば自分で行う必要がありますが、packer ではエラーになるので、Online JavaScript/CSS Compressor を使用しました

サンプルコード
<script src="tableMagic/js/jquery.tablemagic-min.js"></script>

<link rel="stylesheet" href="css.php">
<style>
.trEven {
	background-color: #FFFFFF;
}
.trOdd {
	background-color: #F1F4F8;
}

#target table * {
	font-family: "ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic Pro","メイリオ",Meiryo,"MS Pゴシック",Verdana,Arial,Helvetica,sans-serif;
	font-size: 16px;
}
#target table {
	border-collapse: collapse;
	border-style: solid;
	border-color: #000000;
	border-width: 1px;
	background-color: #FFFFFF;
}
#target table td {
	padding: 5px;
	border-style: solid;
	border-color: #000000;
	border-width: 1px;
	white-space: nowrap;
}
#target table th {
	padding: 5px;
	border-style: solid;
	border-color: #000000;
	border-width: 1px;
	background-color: silver;
	white-space: nowrap;
}
</style>
<script>
// jQuery 初期処理
$(function() {

	$.get("syain.php?cond=" , function(data){

		$('#target').tableMagic(
			data,
			{
				firstColTd2Th: false
			}
		);


		customTable();

	});



});

function customTable() {

		$("table").find("th").eq(6).css("text-align", "right");
		$("table").find("th").eq(7).css("text-align", "right");

		$("table").find("tr").each( function(){
			$(this).find("td").eq(6).css("text-align", "right");
			$(this).find("td").eq(7).css("text-align", "right");

			var kyuyo = $(this).find("td").eq(6).text();
			kyuyo = parseInt(kyuyo,10);
			kyuyo = kyuyo.toLocaleString();
			$(this).find("td").eq(6).text(kyuyo);

			var teate = $(this).find("td").eq(7).text();
			if ( teate != "" ) {
				teate = parseInt(teate,10);
				teate = teate.toLocaleString();
			}
			$(this).find("td").eq(7).text(teate);

		} );
}


</script>
</head>
<body>

<div id="target"></div>


customTable は、直接関係ありません。出来上がったテーブル内のデータを後から jQuery でカスタマイズしています。

firstColTd2Th: false は、デフォルトでは先頭列が TH になってしまうので変更しています。( テーブルの見栄えは、好みで CSS で変更するといいでしょう )



posted by at 2015-11-20 21:40 | Comment(0) | jQuery | このブログの読者になる | 更新情報をチェックする

2015年11月19日

雪を降らす snowstorm.js の 特定 DIV 内での実装

何故か、単純に指定するとズレるので、いろいろやってみました。が、どうも DIV の下で雪が止まってくれません。けっこう適当なライブラリですね。

と、思ったら snowStorm.flakeBottom = 500; を指定したらうまく行きました。

ページ全体でのデモ

ふふふふふ
雪のキャラクタを変更して、雪の結晶を使って CSS アニメーションで回転させています
<style>
@-webkit-keyframes snow-rotate {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}
@-moz-keyframes snow-rotate {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
@-o-keyframes snow-rotate {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
@keyframes snow-rotate {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.mysnow {
	color:#e0e0e0!important;
	-webkit-animation: 1.85s snow-rotate steps(8) infinite;
	-moz-animation: 1.85s snow-rotate steps(8) infinite;
	-o-animation: 1.85s snow-rotate steps(8) infinite;
	animation: 1.85s snow-rotate steps(8) infinite;

}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Snowstorm/20131208/snowstorm-min.js"></script>
<div style="width:500px;overflow:hidden; margin:60px auto">
<div id="snow_container" style="width:540px;overflow:hidden;position:relative;">
<img src="https://lh3.googleusercontent.com/-om6S8qEPmiQ/VZetF28tQnI/AAAAAAAAbPc/x1aQ7Uj2QVU/s500-Ic42/143594651057721985634.jpg">
</div>
ふふふふふ

</div>
<script>
snowStorm.excludeMobile = false;
snowStorm.animationInterval = 50;
snowStorm.flakesMax = 64;
snowStorm.className = "mysnow"
snowStorm.flakeWidth = 16;
snowStorm.flakeHeight = 16;
snowStorm.snowCharacter = '&#10052;';
snowStorm.targetElement = 'snow_container';
snowStorm.flakeBottom = 500;
</script>

snowstorm.js


タグ:javascript
posted by at 2015-11-19 17:06 | Comment(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2015年11月15日

Android Studio 1.4.1 : Android 純正 Data Binding テンプレート



▼ Google の英文説明
Data Binding Guide : Android Developers

開始メニューからのインポート時の注意事項

Android Studio のバグで、バインド用のクラスでエラーが出ると思いますが、そのまま動作するはずです。エラーを無くすには、activity_main.xml を変更すると参照エラーは消えます。( variable 要素を削ったり戻したりして確認しました )
しかし、メソッドの参照エラーが残るので、いったんプロジェクトを閉じてから、再度開くと正常に戻ると思います。

また、SDK の場所が違うので、以下のようなダイアログが出ますが、自動的に修復するようです



Data Binding の注意事項

1) 全て UTF-8 を使用しましょう
2) クラスから画面へ一方通行です
3) 画面定義内に日本語を使用してはいけません
4) 細かい技は使わないほうが吉です( Google Gson に任せましょう )

テンプレートの概要



1) 元データとして WEB を想定しています
2) 通信用のデータフォーマットは、JSON です
3) WEB 側は PHP を使用しています( PHP ソースコードも同梱 : app\web の中です。AN HTTP Server で直接その場所を atest としてエイリアスを作成してテストしています )
4) AN HTTP Server でテストしています( AN HTTP Server のダウンロードと注意事項はこちらから )
5) JSON の処理に、Google Gson を使用しています
6) データベースの定義は同梱していませんが、『コード、氏名、フリガナ』という簡単なテーブルです
7) 実機は、API 19: Android 4.4 (KitKat) を想定しています。必要ならば、Min Sdk を下げて下さい
8) 実機の場合、WiFi で接続して、IP アドレスで PC にアクセスしてテストしました



タグ:android PHP
posted by at 2015-11-15 00:42 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

2015年11月14日

とても凄い可愛い、ダンス動画



tumblr 経由なので、ソースが何で、何がどうなのか良くわかりませんが、Twitter に動画投稿できるのは今日解りました。長いものは無理なので、部分的にトリミングするように指示が出たのでやってみました。本編は相当長いので、そちらを見たほうが楽しいです。

動画のダウンロードは、Google Chrome の network でリンクを取得すればたいていは可能です( アンカー作って、右クリックからダウンロード )


posted by at 2015-11-14 02:45 | Comment(0) | 動画 | このブログの読者になる | 更新情報をチェックする

滑らかなスクロール(scroll bar)を提供する jQuery プラグイン jQuery.NiceScroll

デモページ

CDNホスティングなので、ダウンロード不要

https://cdnjs.com/libraries/jquery.nicescroll


概要

Nicescroll is a jquery plugin, for nice scrollbars with a very similar ios/mobile style.

IOS のような、スクロールバーインターフェイスを jQuery のプラグインとして実現しています。

ページや DIV に関して簡単に実装できます
$(function() {

	$( "#story" )
		.css({
			width: "700px",
			height: "200px",
			whiteSpace: "pre-wrap"
		});

	$( "html,#story" ).niceScroll();

});

その他、いろいろオプションがあるようですが、DIV に対してスクロール可能なコンテンツを実装したい場合に便利です。幅と高さを固定してプラグインすると、自動的に思ったようなコンテンツとして表示できます。


posted by at 2015-11-14 01:14 | Comment(0) | jQuery | このブログの読者になる | 更新情報をチェックする

2015年11月06日

ブログが国別の URL にリダイレクトされる

ブログが国別の URL にリダイレクトされる

Blogger のヘルプにこんなのがありますが、全くヘルプになってないような。殆ど使って無いブログだけれど、確かに調査すると、最後のドメインが .ie で表示された形跡がありました。アドレスバーに入力すると、確かに表示される。

調べてみると、3年くらい前に .com が .jp にリダイレクトされるとして問題になってたらしいですね。とりあえず、今やってみると .com でも .jp でも .ie でも表示されます。

というか、.ie(アイルランド) というドメインがあるのを初めて知りました。Microsoft が喜びそうですね、単純に。

おっと

いろいろ確かめないと解らないものです。Blogger で二つテストブログがあるのですが、片方は .jp にリダイレクトされて、片方は .com のままで表示されます。タイトルが日本語かそうでないかぐらいしか違い無いんですけど・・・。

それと、.ie でアクセスするこんなの表示されます
このサイトでは、サービスの配信、広告のカスタマイズ、トラフィックの分析に Google の Cookie を使用しています。サイトの使用状況に関する情報は Google と共有されます。このサイトを使用すると、Cookie の使用に同意することになります。
ほんと、何の役にも立たないですね
posted by at 2015-11-06 13:28 | Comment(0) | Google | このブログの読者になる | 更新情報をチェックする

お客様の広告コードは過去 7 日間で、承認していないウェブサイトに何度も表示されました。うーーん。何で最近急に。

Microsoft と言い、Google と言い、内容の把握には苦労します。たしかに、ありえる事なのでそのたびにいろいろチェックしてたのですが、最初から提示してたのですね?

気がつきませんでした。自分で設定したとばかり思い込んでましたが、よくよく見ると『webcaches』とあるではありませんか。たぶん最近自信を付けてきて、「無効なものは僕らが判断するから安心して許可しなさい」と言われているんだろうな・・・とは思います。パンダやペンギンは表に見える一部の事実なんですよね、そうですよね、解ります。

解るけど、許可しない

わたくしは、曲がりなりにもウェブマスターですし。


posted by at 2015-11-06 13:17 | Comment(0) | Google | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX