|
僕の方でもMySQLをインストールしてテストしてました。
で、なかなかうまくいかなかったんですが、Tetchiroさんのマクロのおかげで
うまくいったような気がします。
(テーブルの作成とかがよく分からなくて…)
で、Tetchiroさんのマクロを元にさらに発展させて、選択したメール(複数も
可)のMessage-Id, Subject, From, Dateをデータベースに登録するサンプルマ
クロを作ってみました。メール本文は改行コードが混じってるので、果たしてど
うやったらいいのかよく分かりませんでした。
外国語メールでもうまく動作しました。
// オブジェクトの作成とODBCとの接続
#objADO = createobject("ADODB.Connection");
callmethod #objADO, "Open", "dsn=odbc123;";
if( !getresultex(0) ) { message "Open Error!"; endmacro; }
// tableの削除
#rcdSet = callmethod_returnobj(#objADO, "Execute",
"drop table if exists TABLE_1;");
if( #rcdSet == 0 ) { message "Drop Error!"; endmacro; }
// tableの作成
#rcdSet = callmethod_returnobj(#objADO, "Execute",
"create table if not exists TABLE_1 ("
+ " MessageId varchar(300)" // 300文字まで
+ " , FromName varchar(300)"
+ " , FromEmail varchar(300)"
+ " , Subject varchar(300)"
+ " , Date varchar(300)"
+ ");"
);
if( #rcdSet == 0 ) { message "Create Error!"; endmacro; }
// insert処理
loaddll "tkinfo.dll";
#n = dllfunc("SetJapaneseCodePageMode");
#n = dllfunc("LockSelection");
while(1) {
#n = dllfunc("EnumSelection", 1);
if( #n == 0 ) {
break;
}
$messageid = dllfuncstr("CurrentHeader", "Message-id");
$from = dllfuncstr("CurrentHeader", "From");
$fromname = dllfuncstr("SetNameOnly", $from);
$fromemail = dllfuncstr("SetEmailOnly", $from);
$subject = dllfuncstr("CurrentHeader", "Subject");
$date = dllfuncstr("FormatDate"
, dllfuncstr("CurrentHeader", "Date"), "YYYY/MM/DD");
call SqlEscape $messageid; $messageid = $$return;
call SqlEscape $fromname; $fromname = $$return;
call SqlEscape $fromemail; $fromemail = $$return;
call SqlEscape $subject; $subject = $$return;
call SqlEscape $date; $date = $$return;
$command =
"insert into TABLE_1 ("
+ " MessageId"
+ " , FromName"
+ " , FromEmail"
+ " , Subject"
+ " , Date"
+ ") value ("
+ " '" + $messageid + "'"
+ " , '" + $fromname + "'"
+ " , '" + $fromemail + "'"
+ " , '" + $subject + "'"
+ " , '" + $date + "'"
+ ");";
#rcdSet = callmethod_returnobj(#objADO, "Execute",
$command );
if( #rcdSet == 0 ) {
message "Insert Error!";
message $command;
endmacro;
}
}
#n = dllfunc("UnlockSelection");
releaseobject #objADO;
endmacro;
SqlEscape:
// ' --> \'
// \ --> \\
// ユニコードで処理する
##len = wcslen($$1);
if( ##len > 300 ) {
##len = 300; //300文字までってことにする。
}
##i = 0;
$$ret = "";
while( ##i < ##len ) {
$$one = wcsmidstr($$1, ##i, 1);
if( $$one == "'"
|| $$one == "\\"
) {
$$one = "\\" + $$one;
}
$$ret = $$ret + $$one;
##i = ##i + 1;
}
return $$ret;
|
|