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

2019年08月14日

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();
		}
	}
}





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)])}




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