2011年10月2日日曜日

意外と便利なGROUP BY mysql(phpmyAdmin)

ログや注文日時などを「datetime型」でフィールドを入れると思うんですが、そんな時に例えば
      ID  |  order_date
レコード1:1  |  2011-01-01 11:11:11
レコード2:2  |  2011-01-01 12:12:12
レコード3:3  |  2011-01-01 13:13:13
レコード4:4  |  2011-01-01 14:14:14
レコード5:5  |  2011-02-01 15:15:15
レコード6:6  |  2011-02-01 16:16:16
レコード7:7  |  2011-02-01 17:17:17
レコード8:8  |  2011-03-01 18:18:18
レコード9:9  |  2011-03-01 19:19:19


こんな時に「order_date」を普通にGroup BYすると
結果は上と同じになってしまう。

そんな時に意外と便利な方法がこれ
SELECT substring(order_date,1,7) as o_date FROM TB1 GROUP BY o_date;

こうすれば、年と月だけを見てGROUP BYしてくれる。

とっても便利!!

2011年9月8日木曜日

CSSで改ページを挿入できるなんて〜

知りませんでした〜!

CSSでプリント時(印刷時)に改ページを挿入できるスタイルがあったとは〜w

page-break-before: always;

これは便利ですね〜〜〜!

2011年9月4日日曜日

jQueryでテーブルのヘッダ部分を固定するプラグイン

http://www.otchy.net/javascript/tablefix/

OTCHYさんのページで紹介というか、この方が作られたみたいですが
非常に簡単に、テーブルレイアウトをエクセルの「ウィンドウ枠の固定」のようなことができる。

これは、本当にすばらしぃ〜

2011年8月9日火曜日

phpで月末日の取得

PHPで月末日を調べる凄く簡単な方法があった〜

date('y-m-t');

とすると、例えば

例)
echo date('y-m-t', strtotime('2008-02-01'));
とすると、この年の2月は閏年なので結果として2008-02-29と帰って来たらOK

結果:2008-02-29でした

date関数の最後を「t」とする事で、PHP マニュアルに説明があります。
t指定した月の日数。28 から 31

だから、出てくるのか!すばらしぃPHP

2011年8月7日日曜日

MySql GROUP BYでLast idを取得

忘れん為に・・・

こんなテーブルがある。

ID 社員番号 名前
1 1111 Aさん
2 2222 Bさん
3 3333 Cさん
4 1111 Aさん
5 1111 Aさん
6 4444 Dさん
7 5555 Cさん
8 2222 Bさん

ここで、SELECT * FROM `Table_Name` WHERE `社員番号` = '1111' GROUP BY `社員番号`とすると

ID 社員番号 名前
1 1111 Aさん

こんな形で出てくるが
ここで欲しいのは、GROUP BYとして、重複データをまとめて、尚かつ社員番号1111のIDの大きい物を出したい

それで、調べてみたら合った
SELECT max(id), id, 社員番号, 名前 FROM `Table_Name` WHERE `社員番号` = '1111' GROUP BY `社員番号`

とすると
max(id)ID 社員番号 名前
51 1111 Aさん

と表示される。
これで、社員番号1111の新しいIDと古いIDが両方取得できる

2011年7月25日月曜日

GoogleのSpeech APIがすごぃ!

現在、GoogleのChromeしか対応してないものですが
inputの属性に下記のようにすると、マイクアイコンが出てきて音声入力が可能になっています。



属性「speech」は今のところ飾りのようですが、後々何かあるんでしょうね。
HTML5に実装かな?

IE、FireFoxと試してみましたが、だめでした。

ブラウザの設定なのか、日本語しか聞き取ってもらえませんでした。

「Hello」と発音しても、聞き返されだめでした(私の発音が悪いのかしら…いやいやそんなことないはず!

日本語で「しちがつじゅういちにちはあめでした」と言うとしっかり「7月11日は雨でした」と帰ってきました。

これはすごいですね~

もっともっとChromeが普及してIEを追い越してくれる事を説に願います

2011年6月27日月曜日

IE8からある互換機能をロックする方法

IE8からある、互換表示させる機能をロックする方法。

metaたぐで指定可能

IE7で固定する場合
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

IE8で固定する場合

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
これを入れておくと、互換表示のボタンがブラウザから消えて
どちらか設定したブラウザでしか開かない

2011年6月16日木曜日

AjaxZip2がAjaxZip3になっていた

ふと気がつくと、AjaxZip2からAjaxZip3になっていた。
以前からそうだったのか解らないのだけど、AjaxZip3は、GoogleCodeから引き出せる様になっていて、以前AjaxZip2を使っていた時みたいに郵便番号で格納されているファイルを
持つ必要が無い。
GoogleCodeから直接参照出来る様になっていた。

これだけでも便利だと思う。

そして、以前使っていたコード
AjaxZip2.zip2addr('zip1','ken','address','zip2','str);



AjaxZip3.zip2addr('zip1','zip2','ken','address','strt');

になる。
さほど変わりはしてないけど、まぁ便利になったと言えるのは無いかな!!!

AjaxZip2 => AjaxZip3になっている。
うしろについてる .zip2addr()は同じで中の引数の順番も変わっている。
ここだけ注意すれば問題無い!!!
便利っすねぇ〜

2011年5月27日金曜日

PHPでPDFを生成【mPDF】

PHPやHTMLで作成されたWEBページなどをそのままPDFヘ出力してくれる
便利なライブラリを発見(古い?)

まぁあまりPDF出力とか使ってなかったからね・・・・
調べもしてなかった

まぁ調べてると色々と有るみたいですが、私が気に入ったのは「mPDF」
これは便利だと思って、早速インストールしてみたが
最新版mpdf51は、どうも日本語対応してないのか文字化けする。

色々と調べたら「CJK Lang....(ry」ってのをDLして公式に「unifont」ディレクトリに入れろって書いてるが、mpdf51に「unifont」なんてディレクトリないしw

メンドクセ・・・・
色々と調べると、mpdf4xには「unifont」あった。
とりあえずこれで動かすかと思ってやった見たら、日本語奇麗に表示された。
しかし、なぜか画像が表示されない。

うーーーん・・・
と思ったら、見え難かったんだけど、「mPDF5.0」ってのがあった
どうも、これが日本語フォントとかもとりあえずサポート?してるっぽい。

早速使ってみたら
なんとも!イメージ通り表示された!!

おぉ〜ソースコードも奇麗になるし、たった5行6行でPDF出力
凄過ぎるぜ!!

とあるブログを見ると
$mpdf = new mPDF('UTF-8','A4');
と書いてあったが、これは間違い。
$mpdf = new mPDF('ja','A4');
こうしないと、日本語が文字化けしますので、後者が正解。

そして、ダウンロードするのであれば「mPDF v5.0」をDLしてやってください。
http://www.mpdf1.com/mpdf/download
ここからDLできるよん。

2011年5月22日日曜日

maximum execution time of 30 seconds exceeded php.iniの設定変更

php.iniのmax_execution_timeの設定がデフォルト30となっている。
これは30秒以上かかると、自動的にタイムアウトするって設定らしい。


なので、php.iniのmax_execution_timeの設定を60などと大きくすると
結構な量のデータを処理できる。


ブラウザ側でのタイムアウトの設定もあるみたいなので
大きいからといって、処理できるわけでもないみたい。


そういう時は、「ブラウザ タイムアウト 設定」などで検索するといろいろと出てきます。
IEの場合だとレジストリを触らないとだめみたいですね。


まぁ60とか180くらいならぜんぜんいけるのかな・・・

2011年5月19日木曜日

MySqlを外部接続するための設定

今更な気もしますが、忘れっぽいので・・・・

A.com と B.comがあって
A.comを外部データベースサーバーとして使用する。
B.comはA.comからのデータを取得して閲覧のみ。

A.comのmy.confの中にある
bind-address=127.0.0.1をコメントにする
↓↓↓↓↓↓↓↓↓↓
# bind-address = 12.0.0.1
(bind-addressは外部からの接続を許可しない時に使用します。)

次に、A.comにssh接続する
(phpMyAdminの特権ところでも確認やSQL文を発行して追加する事はできますがROOT権が無かったらエラーになるので、今回はターミナルなどのソフトでSSH接続で行います。)

ssh接続完了したら
mySqlへ移動します
> mysql -u root -p

mysql > となったらOK
次に、GRANTで発行する。

mysql> GRANT ALL PRIVILEGES ON *.* TO user@'%' IDENTIFIED BY '任意のパスワード';


「*.*」だと、全部のテーブルを見れる設定になってしまうので
「TABLE_NAME.*」とすると、見れるテーブルを指定できます。
「user@%」になっている「%」の所を外部のIPアドレスにする事で、指定されたIPからしか接続出来ない様にする。(セキュリティ強化の為)
「user」となってる所は接続用のUSER名かな?(ここらへん解らん)

あまり、私も詳しく理解してないので自己責任でお願いします。

上記QUERYを発行して、OKだったら

Query OK, 0 rows affected (0.00 sec)
でます。エラーだと何らかのエラー文が出ると思います。
あとは接続ですが


$hostname = ホストのIPアドレス;
$database = TABLE_NAME;
$dbuser = 設定したuser名;
$dbpass = 設定したパスワード;

$con = mysql_connect($hostname, $dbuser, $dbpass) or die(mysql_error());
mysql_select_db($database,$con) or die(mysql_error()); 
PHPで書くとこんな感じだとおもいますが

これで、接続できたらOKですね。

2011年5月15日日曜日

CKeditorを画像ファイルアップロード可能にする方法

以前から、色々と重宝してるCKEditorですが
デフォルトでは、画像のリンクは出来ますが、画像のファイルアップローダーは付いてないってことで

外部プラグイン「CKfinder」を利用します。
色々と調べると、有料版とか有償版とか書かれてるのですが
たぶん無料で使えます。
ただこんなコメント出てますので意味不明です(笑
「This is the DEMO version of CKFinder. Please visit the CKFinder web site to obtain a valid license.」
まぁとりあえず使えるならDEMOバージョンだろうがどーだっていい。

ってことで,設定を。

まずはCKfinderをDL
最新の物が良いかもしれないですね。

DLしたら、ファイルをサーバーへアップロード(好きな所へ)
アップロードしたら、CKfinderの中の
config.phpを触ります。

33行目のreturn false;をreturn true;へ変更
63行目の$baseUrl = '/user/userfile/'; を 好きなURLヘ変更します。
63行目で書いた場所が画像のアップロード先になります。
これで設定はほぼ完了。簡単。

config.jsの中の
language = "fr"とかってなってるコメントされてるところを
jaとして、コメントはずしてもOK
ちなみに、今回は触りませんが、ここでスキンの設定も出来そうですね。

次は参照元(先)を追加します。
<script type="text/javascript" src="/参照元/ckfinder/ckfinder.js"></script>

次に、今まで使っていたCKeditorですが
CKfinderを入れる前はたぶんこんな感じになってるのかな
<textarea id="ckeditor" class="ckeditor" name="details"></textarea>

これを変更せずに

<script type="text/javascript">
// This is a check for the CKEditor class. If not defined, the paths must be checked.
if ( typeof CKEDITOR == 'undefined' ){
//CKエディタが見つからん時の処理
}else{
var editor = CKEDITOR.replace( 'ckeditor' );
CKFinder.setupCKEditor( editor, '/参照元/ckfinder/' );
 ) ;
}
</script>

とします。


とまぁこれで、設定完了です。
超簡単でした。

2011年4月30日土曜日

SQLのUPDATEで自動で計算して計算してくれる。

MySqlをよく使うのですが
あるテーブル(ZAIKO_KANRI)で例えば

ID , item_name , zaiko
1  , 商品名1  ,  10
2  , 商品名2  ,  15
3  , 商品名3  ,  30
4  , 商品名4  ,  5
5  , 商品名5  ,  20

と言う感じでフィールドがあったとします。
ここで、例えばUPDATEでzaikoの数をコチラが渡す数値で勝手に足し算、引き算してほしい!って時に便利

例えば、在庫の減算
UPDATE `ZAIKO_KANRI` SET `zaiko` = `zaiko` - 1 WHERE `id` = 1
とすると、ID:1のフィルードzaiko の数値10-1となり、UPDATEと同時に計算してくれる
やっぱりデータベース便利だなぁ〜
結果はこうなる

ID , item_name , zaiko
1  , 商品名1  ,  9
2  , 商品名2  ,  15
3  , 商品名3  ,  30
4  , 商品名4  ,  5
5  , 商品名5  ,  20

もちろん + すると加算してくれる。

2011年3月27日日曜日

Androidアプリを公開する為の設定(Eclipse Export Wizard)

Androidのアプリを公開する為には、設定が必要!!!




 EclipceのPackageを右クリックして
Android Tool -> Export Signed Application Package
を選択する。



 アプリの名前が入ってるので、そのまま次へ



Create new keystoreを選択する。
Browse...(参照)を押して、公開するapkファイルを選択する。
次に、任意でパスワードを入力する。



こんな感じ〜
パスワードまで入力したら、次へを押す

こんな感じで設定して終了(Finish)を押したら公開出来る設定でapkが生成される。

これで、Androidマーケットに公開できる!
ひゃっほぃ!!!

Androidマーケットにアプリを公開するには、$25が必要です。(一回きり!)
一度$25を払うと、永遠?に払う事無くアプリをがんがん作ればアップできますよ!
ちなみに、Androidマーケットへ公開するには、開発者登録を行えばOKです。
ここで、$25を支払うってことになります。

また、登録方法は難しく無いので(個人情報とクレジット入力するだけ)あえて、紹介はしません。
Googleで「Android 開発者登録」と入力すると沢山でてきますのでそちらを参照してください!

2011年3月24日木曜日

PHP:今更かも・・・でも便利Glob()

PHPのGlob関数を改めて、良いなぁと思いました。
<?
$dir = "./img/gallery/*.jpg";
$f_list = glob($dir);

for($i=0;$i<count($flist);$i++){
       処理
}

var_dump($f_list);
?>

これで、img/gallery/の中にあるJPEGのみを全部取り出してくれる。

以前は、readdirなど使ってましたが・・readdirは「.」「..」とかの処理や
ディレクトリの中に「.txt」など、表示したく無い物を除外する為の処理をしなければダメでしたが、glob()を使えばサクッと取り出せます。

便利なので忘れない様にメモ

Android Manifestの編集(アップグレード処理)

Android ManifestをEclipsで開いて
Version Codeと言う所(Integer)の数字を1->2とすることで
すでに、そのアプリケーションが入ってる場合、アップグレードと聞かれる様になる。

それをしておかないと、毎回アンインストールして、インストールをし直さないとダメで
結構めんどくさい。

2011年2月22日火曜日

Excel(エクセル)のセル内で特定の文字をカウント

プログラムとは関係ない・・・

=LEN(A1)-LEN(SUBSTITUTE(A1,"特定文字",""))

こうすると、セルA1の中に特定の文字がいくつあるかカウントしてくれる。
例)
A1の中から、「¥」がいくつあるか探す。
A1の値が、「AAA¥BBB¥CCC¥DDD」の場合
上の式を書くと、3が返される。

2011年2月7日月曜日

Android ボタンを端末のセンターに持ってくる

端末の表示位置で忘れそうなのでMEMO!!
各パーツに黄色部分を追加する事で、パーツの位置を端末のセンターに持ってくる事が出来る。
赤字の部分が、CSSで言う所のマージン
<button
  android:text="ClickMe" 
    android:id="@+id/btClick" 
    android:layout_width="100px" 
    android:gravity="center_vertical|center_horizontal" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal|center"
  android:layout_marginTop="100px" >
</button>
 
marginに関しては、端末のディスプレイ解像度が違うので
位置がおかしくなるなぁ・・・
なにかいい方法は無いのか・・・ 

Android開発 独学で作ってみせる!

以前ブログで2月末くらいには!って思ってましたが
ぜんぜんあまかった!(^^;)

思っていた以上に、JAVAに慣れてなくて・・・ようやく少しずつですが
慣れてきました・・・(ヤベェ

躓いた問題点を忘れない為に!!

※ 画面レイアウトで背景を画像にする。

間違ってるかもしれないけど・・・・
/res/layout/main.xmlに下の赤字を追加する。
赤字の@drawable/の次のピクチャって所は、任意で設定
(画像はres/drawable-hdpi/の中に一緒に入れてみたら、あっさりと表示した)


<linearlayout
android:background="@drawable/ピクチャ名"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
</linearlayout>

layout_heightやwidthに関しては"fill_parent"と入ってますが
これは、端末の縦横をいっぱいまで表示するって意味らしぃです。

2011年2月6日日曜日

JavaScriptでPHPのnumber_format!

PHPにあるnumber_format()便利ですよね〜
JavaScriptにはそんな関数無いみたいなので、作ってみました
忘れない為にメモ 
 
var num = "10000000"; 
num.toString().replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,');

出力:10,000,000

JavaScriptでPHPのExplodeと同じSplit関数

すぐ忘れちゃうので、忘れない為にメモ
data1 = "aaa,bbb,ccc";
var str = data1.split(",");

出力
str[0]:aaa
str[1]:bbb
str[2]:ccc

こんな感じ。

2011年1月29日土曜日

【Mac】Android GoogleMap API Key 証明書の手順

Macで、Eclipseの環境をしっかりとして

ターミナルで

keytool -list -alias androiddebugkey -keystore ~/.Android/debug.keystore -storepass android -keypass android


とすると、認証キーが出てくる。
これを、Sign Up for the Android Maps APIに貼付けて(Generate API Key)押したら
おわり。

2011年1月27日木曜日

まだ出来てないけど!

ようやく、Androidで何を作るのか決まりました。
カミングスーーーーーーーーーーーーーーン!!

たぶん、2月の末には第一リリースしてみたい。

2011年1月20日木曜日

Android Appを勉強始めました

Androidの勉強でもがんばろうと思って、18日から環境を整えてがんばろうと思い
今日は出来てないけど、18日はとりあえず定番の「Hello World」からがんばりました。

これから、猛勉強してがんばって行こうと思う!!!

最近仕事も忙しいのですが、何でも作れるよ!って言えるまでがんばります!(^^;)

2011年1月16日日曜日

Google YouTubeAPIを使ってみた

Googleから提供されているYouTube APIを使ってみた。
色々と悩みましたが、慣れてしまえば何のその。

結構便利に良い物が面白く作れました!!

忘れない様にコードをここへ・・・

YouTubeに動画をアップロードするプログラム




if($_GET['status']==200){
    if($_GET['id']){
        $douga_insert = new Sql;
        $douga_insert->value = array($login->dataset[0]['id'],$_GET['id']);
        $douga_insert->sql_insert('Douga');
        $_SESSION['report'] = '動画のアップロードが完了しました';
        header('Location: ?dsp=douga_admin');
        exit();
    }
}

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

$sDeveloperKey = 'YouTubeAPIの開発コード';
$sAccount = 'YouTubeのログインアカウント(ID)';
$sPassword = 'YouTubeのログインパスワード';

$sMovieTitle = 'DatsuNet Movie '.$login->dataset[0]['user_name'];
$sDescription = '';
$sTags = '';
$sNextUrl = 'アップロード後の戻り先URL(フルパス)';

$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
    $username = $sAccount,
    $password = $sPassword,
    $service = 'youtube',
    $client = null,
    $source = 'gwiki', // a short string identifying your application
    $loginToken = null,
    $loginCaptcha = null,
    $authenticationURL);
$httpClient->setHeaders('X-GData-Key', "key=${sDeveloperKey}");
$yt = new Zend_Gdata_YouTube($httpClient);
// create a Zend_Gdata_YouTube_VideoEntry
$myVideoEntry= new Zend_Gdata_YouTube_VideoEntry();

// set up media group as in the example above
$mediaGroup = $yt->newMediaGroup();
$mediaGroup->title = $yt->newMediaTitle()->setText($sMovieTitle);
$mediaGroup->description = $yt->newMediaDescription()->setText($sDescription);

$categoryScheme = 'http://gdata.youtube.com/schemas/2007/categories.cat';
$developerTagScheme = 'http://gdata.youtube.com/schemas/2007/developertags.cat';

$mediaGroup->category = array(
    $yt->newMediaCategory()->setText('Autos')->setScheme($categoryScheme),
    $yt->newMediaCategory()->setText('mydevelopertag')->setScheme($developerTagScheme),
    $yt->newMediaCategory()->setText('anotherdevelopertag')->setScheme($developerTagScheme)
    );

$mediaGroup->keywords = $yt->newMediaKeywords()->setText($sTags);
$myVideoEntry->mediaGroup = $mediaGroup;

$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];

$nextUrl = $sNextUrl;

View部分
echo $form = '<form action="'. $postUrl .'?nexturl='. $nextUrl .
        '" method="post" enctype="multipart/form-data">'.
        '動画ファイルを選択して下さい:<input name="file" type="file"/>'.
        '<input name="token" type="hidden" value="'. $tokenValue .'"/>'.
        '<input value="動画アップロード" type="submit" />'.
        '</form>';

これで、アップロード出来ます。

そして、削除するには
$videoId = $_GET['YouTubeのVideoID'];
$videoEntryToDelete = $yt->getVideoEntry($videoId, null, true);
$yt->delete($videoEntryToDelete);

これで、消えます。

Googleってすばらしいですね〜最高ですね〜

2011年1月13日木曜日

VBAでFTPファイルアップロード

VBAを使って、ファイルをプットするためのプログラム。
これにはBASP21をインストールしておく必要がある。

使用用途としては、FTPのアカウントを教えたくない人に対して
これを使って、指定の位置へファイルをアップロードさせるためのもの。

HTML5になってからは、不要になりましたがIE8などは
まだ、FILE POSTにMultiが対応していないので、使えるのかなぁ~?

まぁ、VBAなのでプロジェクト保護してても、パスワードは抜き取られちゃうので
セキュリティ的には、ヘボヘボですが・・・・

一応、忘れないためにメモ。

Sub picture_uploader()
    Dim FTP, rc As Long, Server As String, User As String, Pass As String
    Dim Target As String, Folder As String
    Dim a           As String
    Dim folder_path As Object
    'FTPオブジェクト
   
    'TAKARA FTP設定(設定する場合は「'」を外してください。)
    Server = "ホスト"
    User = "ユーザーID"
    Pass = "ユーザーパスワード"

    Set folder_path = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 1, ",")
    If Not folder_path Is Nothing Then
        a = folder_path.Items.Item.Path
    End If
    If a = "" Then
        MsgBox "参照先が選択されませんでした。"
        Range("B1") = ""
        End
    Else
        fp = a
        Range("A1") = fp
        With Application.FileSearch
            .LookIn = fp
            .SearchSubFolders = True
            .FileType = msoFileTypeAllFiles
            .Filename = ".jpg"
            If .Execute(SortBy:=msoSortByFileName, _
                SortOrder:=msoSortOrderAscending) > 0 Then
                MsgBox .FoundFiles.Count & "個のファイルが見つかりました。"
                For i = 1 To .FoundFiles.Count
                    fname = .FoundFiles(i)
                    d = Len(fp)
                    fname1 = Len(fname)
                    fname2 = Right(fname, fname1 - d - 1)
                    'フォルダパス1を画像名から取り出す
                    'f_path1 = Len(fname2)
                    'f_path1_1 = Right(fname2, f_path1 - 3)
                    'f_path1_2 = Len(f_path1_1)
                    'f_path1 = Left(fname2, f_path1 - f_path1_2)
                    'フォルダパス2を画像名から取り出す
                    f_path2 = Replace(fname2, ".jpg", "")
                    f_path2_1 = Len(f_path2)
                    f_path2 = Left(f_path2, f_path2_1)
                    'Cells(i + 1, 2).Value = "/" & f_path1 & "/" & f_path2 & "/"
                    Cells(i + 1, 2).Value = fname2 'ファイル名
                Next i
            Else
                    MsgBox "条件を満たすファイルはありません。"
            End If
        End With

   
        Set FTP = CreateObject("basp21.ftp")
        'サーバー接続
        rc = FTP.Connect(Server, User, Pass)
        If rc <> 0 Then
            MsgBox "接続できませんでした。", vbCritical
            FTP.Close
            Exit Sub
        End If
        For i = 2 To 65536
            Range("B" & i).Activate
           
            If Range("B" & i) = "" Then
                Exit For
            Else
                'ローカルファイルの場所
                Target = Range("A1") & "\" & Range("B" & i)
                'FTP送信先
                Folder = "/IMAGES/"
           
                rc = FTP.PutFile(Target, Folder, 1)
                If rc <> 1 Then
                    MsgBox Range("B" & i) & "の画像がアップロード出来ませんでした。", vbCritical
                    FTP.Close
                    Exit Sub
                Else
                    Range("C" & i) = "OK"
                End If
            End If
        Next
        MsgBox "全ての画像がアップロード出来ました。", vbInformation
        FTP.Close
        Set FTP = Nothing
    End If
End Sub

2011年1月12日水曜日

Qdsmtpを使ってGmail SMTPを使ってメール送信

PHPのライブラリQdsmtpでSMTPメールを送信するのですが
いつもなら、PHPのファンクションのmb_send_mail()を使うのですが
今回は、サーバーにメールサーバーを構築してないので、GmailのSMTPを使って
メール送信するんですが、ちょっとハマってしまったので忘却記録を・・・


こんな事で、つまづくとは・・・・

とりあえず、Qdsmtpをダウンロードしてきて
あとは、インクルードするだけだったので、結構簡単です。

問題は初期設定。

$setting = array(
'host' => 'ssl://smtp.gmail.com',
'port' => '465',
'from' => 'sample@gmail.com',
'user' => 'sample@gmail.com',
'pass' => 'password',
'protocol' => 'SMTP_AUTH'
);
つまずいたのは、hostの部分とポートの部分。
まぁ調べたらすぐ解った事だったので、一件落着。
hostの部分は smtp.gmail.comとだけ入力してたのですがエラーがずっと出ていて
なんで!なんで!って思いながら
http://mail.google.com/support/bin/answer.py?hl=jp&answer=44793
を読むとSSLだったので、tlsでも動くと思うんですが上のURL見たら解決出来ました。

Qdsmtpの良い所は、mb_send_mail()と同じように扱えるので便利です。

例えば
$smtp = new QdSmtp($setting);
$smtp -> mail('送り先','件名','メール内容','ヘッダ(省略可)','パラメータ(省略可)');

とすれば、メール送信されます。

色々とQdsmtpの中身を見てましたが、便利なクラスです。
送信したいメールアドレスを配列にして
$mail_array = array('1@test.jp', '2@test.jp', '3@test.jp');
$smtp->to($mail_array);

でもOK!!
すごい便利ですねぇぇぇ

世の中、良い物が転がってますね。

QdsmtpはMITライセンスなので、ご自由にダウンロードして使用してください。

VBA TextBoxを配列処理する

Dim Val_Array as Variant

For i = 1 to 20
    if UserForm1.Controls("TextBox" & i) = "" Then
         Exit For
    Else
        Text_Val = UserForm1.Controls("TextBox" & i) & "," & Text_Val
    End if
Next

Values = split(Text_Val, ",")

たぶん、考えたらもっといい方法あるんですが
なにぶん時間がなかったので、微妙なコードになっちゃいました・・・

まぁ、これで配列に格納出来るし良いかな・・・

VBAでフォルダダイアログを開く

With Application.FileDialog(msoFileDialogFolderPicker)
       if .Show = True Then
           dir_path = .SelectedItems(1) & "¥"
       End if
End With

WSHで作るダイアログの方が好きなんですが
まぁ、VBAで関数あるならそれ使っとこうってことで。

これを実行すると、フォルダを選択と言うダイアログが表示され
開きたいフォルダの所まで行ってOK押したら

変数 dir_path の中にそのフォルダまでのフルパスが格納される。

フォルダの中にある(サブフォルだも含む)情報を取り出した場合は

Dim buf As String

buf = Dir(dir_path & "*.*" , vbDirectory)
Do While buf <> ""
    i = i + 1
    Worksheets("Sheet1").Cells(i , 1) = dir_path
    Worksheets("Sheet1").Cells(i , 2) = buf & "¥"
    buf = Dir()
Loop

これで、サブフォルダの情報をぶっこ抜きます。
Dir(dir_path & "*.jpg", vbDirectory)とするとJPEGファイルを取り出せる。

これ結構忘れて、いつも探しまわっちゃうのでそろそろ保管しておこう