テキスト広告:Amazon Primeday

木曜日, 7月 03, 2008

[PHP]WordPressとMySQLのインストール or トラブルシューティング

▼質問
ブログツールのWordPressをWindowsで動かしたいんだ。どうやったらいいか教えてくれ!

▼回答
ここでは、IISでPHPが動いていることを前提に話すから、そこまではやっておいてくれ!

1.MySQLを下記のサイトからダウンロードする。
  今回はバージョン4.1.22のmysql-4.1.22-win32.zipをダウンロードした。
  http://dev.mysql.com/downloads/mysql/4.1.html
2.ダウンロードしたファイルを解凍する。Setup.exeファイルができる。
3.「Setup.exe」をダブルクリックすると対話形式でインストールができる。その手順を下記に示す。
①「Next >」ボタンを押下する。
②「Custom」を選択し、「Next >」ボタンを押下する。
③インストールディレクトリの変更がなければ、「Next >」ボタンを押下する。
 インストールディレクトリを変更したい時は、ここで「Change」ボタンをクリックし指定する。
④インストール内容を確認し、「Install」ボタンを押下する。
⑤「Skip Sign-Up」を選択し、「Next >」ボタンを押下する。
⑥「Finish」ボタンを押下する。
⑦「Next >」ボタンを押下する。
⑧「Detailed Configuration」を選択し、「Next >」ボタンを押下する。
⑨「Developer Machine」を選択し、「Next >」ボタンを押下する。
⑩「Multifunctional Database」を選択し、「Next >」ボタンを押下する。
⑪テーブルスペースのドライブとディレクトリの場所を確認し、「Next >」ボタンを押下する。
⑫「Decision Support(DSS)/OLAP」を選択し、「Next >」ボタンを押下する。
⑬ネットワークオプションを確認し、「Next >」ボタンを押下する。
⑭「Manual Selected Default Character Set / Collation」を選択する。
 Character Setから「sjis」を選択し、「Next >」ボタンを押下する。
⑮Windowsオプションを確認し、「Next >」ボタンを押下する。
⑯「Modify Security Settings」のみがチェックされていることを確認する。
 パスワードを入力し、「Next >」ボタンを押下する。
⑰「Execute」ボタンを押下する。
⑱「Finish」ボタンを押下し、MySQLのインストールは終了です。
4.WordPressを下記のサイトからダウンロードする。
  今回はバージョン2.3.3のwordpress-2.3.3-ja.zipをダウンロードした。
  http://ja.wordpress.org/releases/
2.ダウンロードしたファイルをIISが動いているホームディレクトリに解凍する。
  例: C:\InetPub\wwwroot\wordpress
3.「インターネット インフォメーション サービス」 から仮想ディレクトリの設定をする。
  設定方法については省略する。下記参照。
  http://phponwindows.net/WordPress.aspx
4.WordPress用のデータベースをMySQLに作成する。
  実行した手順を下記に示す。コマンドプロンプトから次の実行を行う。

①ログイン
C:\>mysql -u root -p
Enter password: *****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.22-community-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

②データベースの作成
mysql> create database wordpressdb;
Query OK, 1 row affected (0.02 sec)

mysql> show create database wordpressdb;
+-------------+----------------------------------------------------------------------+
Database Create Database

+-------------+----------------------------------------------------------------------+
wordpressdb CREATE DATABASE `wordpressdb` /*!40100 DEFAULT CHARACTER SET sjis */
+-------------+----------------------------------------------------------------------+
1 row in set (0.02 sec)

③ユーザーの作成
mysql> grant all on wordpressdb.* to 'user'@'localhost' identified by 'pass';
Query OK, 0 rows affected (0.17 sec)

5.

▼質問
次のエラーが出てデータベースに接続できないんだ。どうしてなのか教えてくれ!

C:\Program Files\MySQL\MySQL Server 4.1\bin>mysqladmin ping -u root -p
Enter password: *****
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to MySQL server on 'localhost' (10061)'
Check that mysqld is running on localhost and that the port is 3306.
You can check this by doing 'telnet localhost 3306'

タスクマネージャにもmysql.exeがいるのに?!なぜ、つながらない!!

▼回答
も一度、インストールしなおせばうまくいくかもよ!

もう一回、インストールしてみることにしよう!

うまくつながった!v(^^)v

▼質問
http://localhost/wordpress/wp-admin/install.phpを実行すると次のエラーが出る。
「データベース接続確立のエラー」

▼回答
次のコマンドを試してみてくれ!

SET PASSWORD FOR root@localhost = OLD_PASSWORD('*****')

水曜日, 7月 02, 2008

[C#]ファイル操作

▼質問
C#でファイルを操作したいんだ。どうやったらできるか教えてくれ!

▼回答
主に2通りのやり方があるんだ。そのやり方のサンプルを示しておくから参考にしてくれ!

private void FileTest()
{
if (!System.IO.Directory.Exists("Dir")) System.IO.Directory.CreateDirectory("Dir");
string fileName = string.Format(@"Dir\{0}.txt", System.DateTime.Now.ToString("yyyyMMddHHmmss"));
string contents = "";
for (int i = 0; i < 5; ++i)
{
contents = contents + string.Format("Test file RowNo. {0}\n", i + 1);
}
System.IO.File.WriteAllText(fileName, contents);
}

private void StreamWriterTest()
{
if (!System.IO.Directory.Exists("Dir")) System.IO.Directory.CreateDirectory("Dir");
string fileName = string.Format(@"Dir\{0}.txt", System.DateTime.Now.ToString("yyyyMMdd"));
System.IO.StreamWriter sw = new System.IO.StreamWriter(fileName);
string contents = "";
for (int i = 0; i < 5; ++i)
{
contents = contents + string.Format("Test file RowNo. {0}\n", i + 1);
}
sw.WriteLine(contents);
sw.Close();
}

private void StreamReaderTest()
{
if (!System.IO.Directory.Exists("Dir")) System.IO.Directory.CreateDirectory("Dir");
string fileName = string.Format(@"Dir\{0}.txt", System.DateTime.Now.ToString("yyyyMMdd"));
System.IO.StreamReader sr = new System.IO.StreamReader(fileName);
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
sr.Close();
}

土曜日, 6月 21, 2008

[PHP]WindowsでPHP

▼質問
WindowsにPHPをインストールしたいんだ。インストール手順を教えてくれ!

▼回答
1.PHPを下記のサイトからダウンロードする。
  今回はバージョン3.2.3のphp-4.2.3-Win32.zipをダウンロードした。
  http://jp.php.net/releases/index.php
2.ダウンロードしたファイルをC:\に解凍し、フォルダ名をphpにする。
3.解凍してできた下記のファイルを複製しファイル名をphp.iniに変更する。
4.変更したphp.iniファイルの設定内容を変更する。
①magic_quotes_gpc を修正する。
; Magic quotes for incoming GET/POST/Cookie data.
; magic_quotes_gpc = On
magic_quotes_gpc = Off
②文字コードを修正する。
; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header. To disable sending of the charset, simply
; set it to be empty.
;
; PHP's built-in default is text/htmldefault_mimetype = "text/html"
;default_charset = "iso-8859-1"
default_charset = "Shift_JIS"
③PHPの拡張関係のディレクトリを設定する。
; Directory in which the loadable extensions (modules) reside.
; extension_dir = ./
extension_dir = "C:\php\extensions"
④マルチバイト(日本語など)が使えるように設定する。
;Windows Extensions;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
;
;extension=php_bz2.dll
;extension=php_ctype.dll
;extension=php_cpdf.dll
;extension=php_curl.dll
;extension=php_cybercash.dll
;extension=php_db.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_dbx.dll
;extension=php_domxml.dll
;extension=php_dotnet.dll
;extension=php_exif.dll
;extension=php_fbsql.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
;extension=php_gd.dll
;extension=php_gettext.dll
;extension=php_hyperwave.dll
;extension=php_iconv.dll
;extension=php_ifx.dll
;extension=php_iisfunc.dll
;extension=php_imap.dll
;extension=php_ingres.dll
;extension=php_interbase.dll
;extension=php_java.dll
;extension=php_ldap.dll
;extension=php_mbstring.dll
extension=php_mbstring.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_ming.dll
;extension=php_mssql.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
;extension=php_pdf.dll
;extension=php_pgsql.dll
;extension=php_printer.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_sockets.dll
;extension=php_sybase_ct.dll
;extension=php_tokenizer.dll
;extension=php_w32api.dll
;extension=php_xslt.dll
;extension=php_yaz.dll
;extension=php_zlib.dll
⑤マルチバイトを利用する際は「日本語」であると設定する。
[mbstring]
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.detect_order = auto
;mbstring.substitute_character = none
;mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
5.作成したINIファイルと下記のファイルをウィンドウズのsystem32フォルダにコピーする。
  C:\php\php.ini
  C:\php\php4ts.dll
  C:\php\dllsの全てのdllファイル
6.IISの設定をする。
①「インターネット インフォメーション サービス」から「既定の Web サイト」を選択し、プロパティ
  ウィンドウを表示する。
② 「ホーム ディレクトリ」タブをクリックする。
③「構成(G)...」ボタンを押下する。
④「追加」ボタンを押下する。
⑤下記の設定をする。
  実行ファイル:「C:\php\sapi\php4isapi.dll」
  拡張子:「.php」
  動詞:制限を選択する。
     :GET,HEAD,POST,TRACE
  ファイルの存在を確認する:チェックを外す。
⑥「OK」ボタンを押下する。
⑦「適用(A)」ボタンを押下する。




■参考サイト
2php : PHPのインストール(Windows)
http://2php.jp/php/install_php_windows.html
Windows で PHP > インストール・設定方法(IIS 編) @みっちーわーるど
http://www1.mahoroba.ne.jp/~mitt/itmemo/php/04.htm

水曜日, 6月 18, 2008

[VB→C#]VB 6 Functions to C#
































VB 6 FunctionsC# code
AbsSystem.Math.Abs
ArrayNew Object() { }
Asc, AscB, AscWMicrosoft.VisualBasic.Strings.Asc
AtnSystem.Math.Atan
ChooseInteraction.Choose
CBoolSystem.Convert.ToBoolean
CByteSystem.Convert.ToByte
CCurSystem.Convert.ToDecimal
CDateSystem.Convert.ToDateTime
CDblSystem.Convert.ToDouble
Chr(char)
CIntSystem.Convert.ToInt32
CLngSystem.Convert.ToInt64
CosSystem.Math.Cos
CommandInteraction.Command
CreateObjectCreateObject or New Instance in .NET
CStrSystem.Convert.ToString
CurDirFileSystem.CurDir
DateDateTime.Today
DateAddMicrosoft.VisualBasic.DateAndTime.DateAdd
DateDiffMicrosoft.VisualBasic.DateAndTime.DateDiff
DatePartMicrosoft.VisualBasic.DateAndTime.DatePart
DateSerialMicrosoft.VisualBasic.DateAndTime.DateSerial
DateValueMicrosoft.VisualBasic.DateAndTime.DateValue
DayMicrosoft.VisualBasic.DateAndTime.Day
DDBFinancial.DDB
DirFileSystem.Dir
EnvironInteraction.Environ
EofFileSystem.EOF
ExpSystem.Math.Exp
FileAttrFileSystem.FileAttr
FileDateFileSystem.FileDateTime
FileLenFileSystem.FileLen
FilterMicrosoft.VisualBasic.Strings.Filter
FixMicrosoft.VisualBasic.Conversion.Fix
FormatCurrencyMicrosoft.VisualBasic.Strings.FormatCurrency
FormatDateTimeMicrosoft.VisualBasic.Strings.FormatDateTime
FormatNumberMicrosoft.VisualBasic.Strings.FormatNumber
FreeFileFileSystem.FreeFile
FVFinancial.FV
GetAllSettingsInteraction.GetAllSettings
GetAttrFileSystem.GetAttr
GetObjectMicrosoft.VisualBasic.Interaction.GetObject
HexMicrosoft.VisualBasic.Conversion.Hex
HourMicrosoft.VisualBasic.DateAndTime.Hour
IIFInteraction.IIf
InputFileSystem.InputString
InputBoxMicrosoft.VisualBasic.Interaction.InputBox
InStr, InstrBMicrosoft.VisualBasic.Strings.InStr
InStrRevMicrosoft.VisualBasic.Strings.InStrRev
IntMicrosoft.VisualBasic.Conversion.Int
IpmtFinancial.IPmt
IRRFinancial.IRR
IsArrayMicrosoft.VisualBasic.Information.IsArray
IsDateMicrosoft.VisualBasic.Information.IsDate
IsEmptyMicrosoft.VisualBasic.Information.IsEmpty
IsMissingInformation.IsNothing
IsNullSystem.Convert.IsDBNull
IsNumericMicrosoft.VisualBasic.Information.IsNumeric
IsObjectInformation.IsReference
JoinMicrosoft.VisualBasic.Strings.Join
LBoundMicrosoft.VisualBasic.Information.LBound
LCaseSystem.String.ToLower
Left, LeftBSystem.String.Substring(0,..)
Len, LenBStrings.Len
LocFileSystem.Loc
LofFileSystem.LOF
LogSystem.Math.Log
LTrimSystem.String.TrimStart
Mid, MidBSystem.String.Substring
MinuteMicrosoft.VisualBasic.DateAndTime.Minute
MirrFinancial.MIRR
MonthMicrosoft.VisualBasic.DateAndTime.Month
MonthNameMicrosoft.VisualBasic.DateAndTime.MonthName
MsgBoxSystem.Windows.Forms.MessageBox.Show
NowSystem.DateTime.Now
NPerFinancial.NPer
PMTFinancial.Pmt
PPMTFinancial.PPmt
PVFinancial.PV
OctMicrosoft.VisualBasic.Conversion.Oct
QBColorInformation.QBColor
RateFinancial.Rate
ReplaceMicrosoft.VisualBasic.Strings.Replace
RGBMicrosoft.VisualBasic.Information.RGB
Right, RightBSystem.String.Substring
RndMicrosoft.VisualBasic.VBMath.Rnd
RoundSystem.Math.Round
RTrimSystem.String.TrimEnd
SecondMicrosoft.VisualBasic.DateAndTime.Second
SeekFileSystem.Seek
SgnSystem.Math.Sign
ShellInteraction.Shell
SinSystem.Math.Sin
SLNFinancial.SLN
Spacenew String(' ',...)
SPCFileSystem.SPC
SplitMicrosoft.VisualBasic.Strings.Split
SqrSystem.Math.Sqrt
StrConversion.Str
StrConvStrings.StrConv
StrCompSystem.String.Compare
StringNew String()
StrReverseMicrosoft.VisualBasic.Strings.StrReverse
SwitchInteraction.Switch
SydFinancial.SYD
TabFileSystem.TAB
TanSystem.Math.Tan
TimeMicrosoft.VisualBasic.DateAndTime.TimeOfDay
TimerMicrosoft.VisualBasic.DateAndTime.Timer
TimeSerialMicrosoft.VisualBasic.DateAndTime.TimeSerial
TimeValueMicrosoft.VisualBasic.DateAndTime.TimeValue
TrimSystem.String.Trim
TypeNameMicrosoft.VisualBasic.Information.TypeName
UBoundMicrosoft.VisualBasic.Information.UBound
UCaseSystem.String.ToUpper
ValConversion.Val
VarTypeMicrosoft.VisualBasic.Information.VarType
WeekdayMicrosoft.VisualBasic.DateAndTime.Weekday
WeekdayNameMicrosoft.VisualBasic.DateAndTime.WeekdayName
YearMicrosoft.VisualBasic.DateAndTime.Year
DoEventsSystem.Windows.Forms.Application.DoEvents()
CallByNameUNSUPPORT
CVErrUNSUPPORT
ErrorUNSUPPORT
GetAutoServerSettingsUNSUPPORT
GetAutoServerSettingsUNSUPPORT
IMEStatusUNSUPPORT
IsErrorUNSUPPORT
LoadPictureUNSUPPORT
LoadResPictureUNSUPPORT
LoadResDataUNSUPPORT
LoadResStringUNSUPPORT


■参考サイト
Netcoole Migration Solutions
http://www.netcoole.com/default.htm

[C#]日付関連(日数・・・)

▼質問
2つあるDateTime型の日付範囲の日数を知りたいんだけど・・・。どうしたらよいの?

▼回答
C#で簡単にやるには次の様にすると良いよ!

Microsoft.VisualBasic.DateAndTime.DateDiff(Microsoft.VisualBasic.DateInterval.Day,fromDate, toDate,Microsoft.VisualBasic.FirstDayOfWeek.System,Microsoft.VisualBasic.FirstWeekOfYear.System)

なぜか?C#では、パラメータの4と5がないとエラーになる。

■参考サイト
DateDiffをC#で使いたい。: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-14/7944.html

金曜日, 6月 06, 2008

[C言語]プリプロセッサ命令

__LINE__と__FILE__マクロは現在処理中の行数と現在処理中のファイル名を表す
__DATE__マクロには現在の日付が月/日/年 というフォーマットで入る
__TIME__マクロには現在の時刻が時/分/秒 というフォーマットで入る
_cplusplusはC++のソースコードをコンパイルしているときに定義される
__STDC__はC言語のソースコードをコンパイルしているときに定義される。C++のソースをコンパイルしているときにもおそらく定義される

■参考サイト
プリプロセッサ命令
http://www.cppll.jp/cppreference/preproc_details.html

[C++]エラーメッセージを取得する

▼質問
予期しないエラーでアプリケーションが終了したんだ。

そのときのエラー内容を取得したいんだ。どうしたらいいの?

▼回答
GetLastError関数とFormatMessage関数で次の様に取得できるよ。

#include
#include
#include
using namespace std;

try {
throw "Exception";
bool b;
if (b) throw 10.1;
else throw 100;
}
catch ( ... ) {
LPTSTR lpBuffer = NULL;
BOOL result = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER FORMAT_MESSAGE_FROM_SYSTEM FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
(LPTSTR)&lpBuffer, 0, NULL );
CString str = (LPCTSTR)lpBuffer;
str.Replace( "\r\n", "" );
logprintf( "エラー番号:%d,エラー内容:%s", GetLastError(), str );
// MessageBox( NULL, lpBuffer, "Last Error Message", MB_ICONHANDMB_OK );
LocalFree( lpBuffer );
// cout << "Exception : " << e << '\n'; exit( EXIT_FAILURE );
}


■参考サイト
peslab C,C++
http://peslab.blog70.fc2.com/category5-1.html
FormatMessage 関数
http://msdn.microsoft.com/ja-jp/library/cc428939.aspx
[C/C++]なんとエラーメッセージが取得出来た

http://blogs.wankuma.com/ch3cooh/archive/2008/03/22/129144.aspx


木曜日, 6月 05, 2008

[C++]例外処理(try文)

▼質問
アプリケーションがメッセージを出して死んじゃうんだ。どう対処したらよいの?

とりあえず、途中でメッセージを出して止まらないようにしたいんだ。

▼回答
try文を使ってエラーをキャッチすればエラーで止まることは対処できると思うよ。

次の方法は、あらゆる型の例外を受け取ることができるよ。

try {
}
catch ( ... ) {
}
finally {
}

■参考サイト
例外処理
http://wisdom.sakura.ne.jp/programming/cpp/cpp35.html

月曜日, 6月 02, 2008

[C#]longのキャスト

▼質問
次の様にするとエラーになるんだ。

long型のキャストはどうしたらよいんだい?

DataRow oRow = oDataSet.Tables[0].Rows[0];
long count = (long)(oRow[0]);

▼回答
次の様にすればうまくいくぞ!

DataRow oRow = oDataSet.Tables[0].Rows[0];
long count = Convert.ToInt64(oRow[0]);


変換先の型名→Convertクラス名
int→Convert.ToInt32
uint→Convert.ToUInt32
short→Convert.ToInt16
usort→Convert.ToUInt16
long→Convert.ToInt64
ulong→Convert.ToUInt64
float→Convert.ToSingle
double→Convert.ToDouble
sbyte→Convert.ToSByte
byte→Convert.ToByte
bool→Convert.ToBoolean
char→Convert.ToBoolean
date→Convert.ToDateTime
decimal→Convert.ToDecimal
string→Convert.ToString

■参考サイト
C# の庭園(Data)
http://www.apfield.jp/csgarden/data.html

木曜日, 5月 22, 2008

[C#]構造体

▼質問
構造体(struct)で作成した変数を関数に渡してその中身をその関数の中で取得して
データを取得したいんだけど・・・うまく値がセットされないんだ!?

どうしてだい?

▼回答
C#のstructは、C/C++のstructとは違うものなんだ。

C#での構造体は、値型でクラスは、参照型なんだ。

値型とは、情報を引き渡すときに情報をコピーする方式のデータ型である。
参照型とは、データの実体がある場所を保存しておき、情報を引き渡す必要がある場合は、
データの本体をコピーせず、データの場所だけを伝えるという方式である。

構造体で参照渡しをしたい時は、関数の引数と呼び出し側の引数に「ref」を付けるんだ。

public struct ユーザ定義名
{
public int num;
public string name;
}

public void Test( ref ユーザ定義名 user )
{
user.num = 1;
user.name = "テスト";
}

ユーザ定義名 getUser;

Test( ref getUser );


■参考サイト
@IT:連載 改訂版 C#入門 第5章 C#のデータ型
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_005/cs2_005_03.html
青島のしま~Blue Islands~ : .NET Tips
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_2E4E45542054697073.html

水曜日, 5月 21, 2008

[C#]object型のキャスト

▼質問
次のプログラムで 「指定されたキャストは有効ではありません。」のエラーが出る。どうして?

string sql = "SELECT * FROM テーブル名";
OracleDataAdapter objAdapter;
objAdapter = new OracleDataAdapter(sql, objOraConn);

DataSet objOraDataSet;
objOraDataSet = new DataSet("objDataSet");

// Fill the DataSet
objAdapter.Fill(objOraDataSet, "テーブル名");

DataRow objRow = objOraDataSet.Tables[0].Rows[0];
int val = (int)objRow["フィールド名"]; ← ここでエラー

▼回答
次の2つを使い分けてやればOK?!
Convert.ToInt32(objRow["フィールド名"]);
((IConvertible)objRow["フィールド名"]).ToInt32(null);

■参考サイト
object型のキャストについて: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-16/9607.html

日曜日, 5月 18, 2008

[VB→C#]My.Computer.FileSystem関連

▼質問
「My.Computer.FileSystem」関連の処理をVBからC#に移植しようと思うんだが・・・。

うまくいかないんだ。

▼回答
「My.Computer.FileSystem」を「Microsoft.VisualBasic.FileIO」に変換すれば問題ないよ。

名前空間のインポートに「Microsoft.VisualBasic.FileIO」を宣言すると次のエラーになる。

「エラー 1 'FileSystem' は、'Microsoft.VisualBasic.FileIO.FileSystem' と 'Microsoft.VisualBasic.FileSystem'' 間のあいまいな参照です。 ファイルパス」

「'Microsoft.VisualBasic」と「Microsoft.VisualBasic.FileIO」は共存できないようだ。

そこで考えた。

名前空間のインポートに「using FileIO = Microsoft.VisualBasic.FileIO;」を宣言して、

「My.Computer」を「FileIO」に変換すれば問題ないことがわかった。

土曜日, 5月 17, 2008

[VB→C#]INIファイル関連(WIN32API)

▼質問
INIファイル関連の関数宣言を教えてくれ!

▼回答
サンプルを示しておくから参考にしてくれ!!

[VB]
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileString" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As StringBuilder, _
ByVal nSize As UInt32, _
ByVal lpFileName As String) As UInt32

' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileInt Lib "kernel32" _
Alias "GetPrivateProfileInt" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal intDefault As Integer, _
ByVal lpFileName As String) As UInt32

' INIファイルに値を設定する関数の宣言
Public Declare Auto Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileString" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As UInt32

[C#]
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileString(
string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
uint nSize,
string lpFileName);

// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileInt(
string lpAppName,
string lpKeyName,
int nDefault,
string lpFileName);

// INIファイルに値を設定する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpString,
string lpFileName);

[C#]VBからの移植でのエラー

▼質問
VBからC#に移植しているんだけど。

次のコードで、次のエラーが出るんだ。どういう意味なのかな?

DataSet objDataSet = new DataSet("objDataSet");
 ~ 略 ~
DataRow objRow = objDataSetOra.Tables(0).Rows(0);

「エラー 1 'System.Data.DataSet.Tables' は 'プロパティ' ですが、'メソッド' のように使用されています。 ファイルパス」

▼回答
VBとC#で配列の文法が違うから気を付けた方がいいよ。

DataRow objRow = objDataSetOra.Tables[0].Rows[0];


▼質問
次のエラーが出るんだ。

「エラー 1 'objRow' は '変数' ですが、'メソッド' のように使用されています。 ファイルパス」

▼回答
これも、上記の回答と同じだよ。

[C#]型変換(キャスト)

▼質問
次のプログラムで

public string cnvString(double data) {
return data.ToString();
}

下記のエラーになるんだ。どうしてなんだ?

「エラー 1 メソッド グループ 'ToString' を非デリゲート型 'string' に変換することはできません。このメソッドを呼び出すことはできません。 ファイルパス」

次の様にするとエラーは出なくなるんだ。何か違う気がする・・・。

public string cnvString(double data) {
string s = data.ToString();
return s;
}

▼回答
VBやC言語で言う共通関数(値を渡して結果を返すだけの処理)のようなものならstaticを
付けてあげれば問題ないと思うよ。

public static string cnvString(double data) {
return data.ToString();
}

静的変数・静的メソッドはクラスごとに唯一つの実体を持ち、すべてのオブジェクトの間で共有される。
また、数学関数や数学定数などのインスタンスを持つ必要のない関数を定義する場合にも使う。

クラス内に処理実態とデータが含む場合はstaticにしてはいけない。

■参考サイト
静的変数・静的メソッド(C# によるプログラミング入門)
http://ufcpp.net/study/csharp/oo_static.html

金曜日, 5月 16, 2008

[C#]Oracle参照エラー

▼質問
下記のエラーが出るんだ。どうしたらいいんだ?!
「エラー 1 型または名前空間名 'Oracle' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 ファイルパス」

▼回答
ソリューション エクスプローラの参照設定から次の手順で設定するんだ。

参照設定を選択し、プロパティウィンドウ(右クリック)から「参照の追加」を選択するんだ。

「.NET」タブからコンポーネント名「Oracle.DataAccess」を選んで「OK」をクリックして終了だ。

ODP.NETのインストールとバージョンに注意してくれ!

■参考サイト
Oracle 散策
http://www.okisoft.co.jp/esc/db/ora04.html

[C#]デファイン or インクルード

▼質問
デファイン(#define)を定義するインクルードファイル(ヘッダファイル)ってないの?

▼回答
C#には、拡張子が(.h)のようなヘッダファイル(インクルード)は存在しないよ。

■参考サイト
C# 言語と .NET Framework の概要
http://msdn.microsoft.com/ja-jp/library/z1zx9t92(VS.80).aspx

[C#]C#の日付型

▼質問
C#にDate型はないの?

▼回答
Date型はないけど日付型を扱うにはSystem名前空間にあるDateTime型を使うんだ。

使用方法には、次に上げる2通りがあるぞ!

プログラムの最初で「using System;」と宣言する方法と、

プログラムの中で「System.DateTime」とする方法だ。

前者の方が、プログラムがスッキリして一般的に使われる

方法だと思うから、その方法をお勧めするよ!

木曜日, 5月 15, 2008

[C#]VBからC#への移植方法

■VBからC#への移植方法
1.「’(シングルコーテイション)」を置換で「//(ダブルスラッシュ)」にする。

2.「Imports」を「using」に変換し、行の最後に「;(セミコロン)」を付ける。

3.「Public」を「public」に「Private」を「private」に置換する。

4.「Public Class クラス名 ~ End Class」を「public class クラス名 { ~ }」にする。

5.「Public Enum 列挙名 ~ End Enum」を「public enum 列挙名 { ~ }」にし、列挙子の間を
「,(カンマ)」で区切る。

6.「Public Structure 構造体名 ~ End Structure」を「public struct 構造体名 { ~ }」にし、
メンバの型を次の様に変換する。
  Public 変数名 As Integer → public int 変数名;
  Public 変数名 As String → public string 変数名;
  Public 変数名 As Long → public long 変数名;
  Public 変数名 As Double → public double 変数名;
  Public 変数名 As Boolean → public bool 変数名;
  Public 変数名 As Date → public System.DateTime 変数名;

7.コンストラクタ「Sub New() ~ End Sub」を「public クラス名() { ~ }」にする。

8.下記の様に置換する。
  「New」 → 「new」
  「True」 → 「true」
  「False」 → 「false」
  「.ToString」 → 「.ToString()」
  「Try ~ Catch ex As Exception ~ Finally ~ End Try」 → 
「try { ~ } catch (Exception ex) {  ~ } finally { ~ }」
  ※注意:using Systemが必要!
  「GoTo」 → 「goto」
  「Nothing」 → 「null」

9.「IsDBNull」関数を下記に置き換え実装する。
public static bool IsDBNull(object data)
{
これよくなかった!
if (data == null) return true;
return false;
return Microsoft.VisualBasic.Information.IsDBNull(data);
}

10.「Format」関数を下記に置き換え実装する。
public static string Format(object data, string format)
{
これ間違えだった!
return String.Format(format, data);
return Microsoft.VisualBasic.Strings.Format(data, format);
}

11.配列宣言の型を次の様に変換する。
  「Dim val(2) As Integer」 → 「int[] val = new int[2];」

12.「Select Case 」文を次の様に変換する。

Select Case 変数名
Case 値
Case Else
End Select

switch ( 変数名 ) {
case 値:
default:
}

13.「For」文を次の様に変換する。

For i as Integer = 0 To 10
Next i

for ( int i = 0 ; i <= 10 ; i++ ) { } 14.「& _」を使った文字列の連結を「+」に変換する。 15.下記に示すものを削除し、プログラムの処理を変更する。   「On Error GoTo」 16.「Err.Number」を「Microsoft.VisualBasic.Information.Err().Number」とするか次の様にする。    ソリューション エクスプローラの参照設定から「参照の追加」より「Microsoft.VisualBasic」を    追加し、「Err.Number」を「Information.Err().Number」とする。    このやり方ではエラーの取得は駄目みたい(>_<)

17.定数宣言を次の様に変更する。
  「Public Const 定数名 As Integer = 0」 → 「public const int 定数名 = 0」

18.VB定数を次の様に変更する。
  「Chr(13)」 or 「vbCr」 → 「\r」 : キャリッジリターン文字
  「Chr(10)」 or 「vbLf」 → 「\n」 : ラインフィード文字
  「Chr(13) + Chr(10)」 or 「vbCrLf」 or 「vbNewLine」 → 「\r\n」 : キャリッジリターンとラインフィードの組合せ
  「Chr(9)」 or 「vbTab」 → 「\t」 : タブ文字
  「Chr(0)」 or 「vbNullChar」 or 「vbNullString」 → 「\0」 : 値 0 を持つ文字
  「Chr(8)」 or 「vbBack」 → 「\b」 : バックスペース文字

土曜日, 5月 10, 2008

[VB2005]コントロールを名前で探す

▼質問
コントロールを名前で探すにはどうしたらいいんだい。

▼回答
次の様にすれば直接コントロールを操作できるようになるよ。

CType(Me.Controls.Find(名前, True)(0), コントロール名)

■参考サイト
VB.NET - フォーム内のコントロールを名前で探して取得する
http://jeanne.wankuma.com/tips/vb.net/form/findcontrol.html

金曜日, 5月 09, 2008

[VB2005]別ウィンドウ(別EXE)の最前面表示

▼質問
別ウィンドウ(別EXE)で起動したアプリを最前面に表示したいんだ。どうしたらよいのか?

▼回答
次のAPIを使えばできるぞ!

API名は『BringWindowToTop』だ。

次にサンプルを示しておくから参考にしてくれ!!

'ウィンドウを最前面に表示する関数宣言
Declare Function BringWindowToTop Lib "user32.dll" Alias "BringWindowToTop" (ByVal hWnd As Int32) As Int32

'最上位フォーム設定解除
Me.TopMost = False

'プロセスを起動する.
prs = Process.Start(起動EXEパス, パラメータ)

'最上位フォーム設定
BringWindowToTop(CInt(prs.MainWindowHandle))

prs.WaitForExit()
prs.Dispose()
prs.Close()

'最上位フォーム設定
Me.TopMost = True

木曜日, 5月 01, 2008

[VBA]QueryTable

▼質問
Oracleからのデータバックアップで次のプログラムで実行しているんだが・・・。

「Selection.QueryTable.Refresh BackgroundQuery:=False」

どうやってODBCやSQL文の設定をしているかわからん!?

教えてくれ~!!

▼回答
一度「外部データの取込み」をやると、その時の操作が設定してしまい

変更ができないみたいなんだ。

だから、汎用的にやるには次のプログラムがお勧めだよ!?

With Worksheets(シート名).QueryTables.Add(Connection:="ODBC;DSN=データソース名;UID=ユーザ名;PWD=パスワード名", Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM テーブル名")
.Refresh
End With

水曜日, 4月 30, 2008

[VC2005]GetGmtTmとGetLocalTmでエラー

▼質問
GetGmtTmとGetLocalTmメソッドで次のエラーが出る。
「Debug Assertion Failed! Program: パスZZZZ.exe File: パス\atltime.inl Line: 999
Expression: _atl_condVal
For information on how your program can cause an assertion failure. see the Visual C++
documentation on asserts.
(Press Retry to debug the application)」

▼回答
インクルードやデファインを次の様にすれば上手く行くよ!
#pragma warning(disable: 4996)
#define _SECURE_ATL 0
#include
#include
#include
#include
#include
#define ATLTIME_INLINE inline
#include
#include
#define ATLCOMTIME_INLINE inline
#include

■参考サイト
A problem with ATL::CTime.GetLocalTm() - MSDN Forums
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=126206&SiteID=1
ワーニングを抑制する方法 - #pragma warning - VC++
http://www.ailight.jp/blog/sha256/archive/2005/05/04/6684.aspx

木曜日, 4月 24, 2008

[C言語]Run-Time Check Failure #2エラー

▼質問
次のエラーが発生する。
「Run-Time Check Failure #2 - Stack around the variable 'xxx' was corrupted」

▼回答
「xxx」を使っているサイズをチェックすることぐらいかな?!

多分、格納しようとしているサイズが「xxx」より大きいじゃないのかな!?

金曜日, 4月 18, 2008

[VB2005]OO4Oの警告

▼質問
次の警告が出る。どうして?
警告 1 '_IOraBindVariable.GetPersistentPointer' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 2 プロパティ get アクセス操作子 'ResultCode' (有効な戻り値の型のない型 'OracleInProcServer._IExDispatch' 上) がタイプ ライブラリ インポータで見つかりました。インポータはこのプロパティをメソッドとしてインポートすることを試行します。
警告 3 '_IOraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 4 'OraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 5 '_IOraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 6 'OraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 7 '_IOraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 8 'OraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。

▼回答
Oracle InProc Server 5.0 Type Library (oip10.tlb) を追加してリビルドすると1度目はでないようだ。

2度目のリビルドで発生することがわかったが・・・。何の解決にもならない。。。

ん~わからない。

毎回、リビルドするたびに削除してリビルドして追加してリビルドするのか!?

めんどくせー!!

もう少し調べて次の様にすることにした。

プロジェクトプロパティ→コンパイル→「ビルド イベント」ボタンのビルド前と後で次のイベントを
実行するようにした。

ビルド前に実行するコマンド ライン
Copy $(ProjectDir)*.dll $(ProjectDir)\obj\Release
Copy $(ProjectDir)*.cache $(ProjectDir)\obj\Release

ビルド後に実行するコマンド ライン
Copy $(ProjectDir)obj\Release\*.dll $(ProjectDir)
Copy $(ProjectDir)obj\Release\*.cache $(ProjectDir)

完璧じゃないけど・・・少しはましになったかも?!

無視してもいい警告だからリビルドしてビルドするだけども良いかも?!

それにしても、よくわからん!!

火曜日, 4月 15, 2008

[C#]Windowアプリケーションの基本機能

▼質問
フォームに「閉じる」ボタンを貼ったんだけど、「閉じる」ボタンがクリックした時の

イベント処理の方法がわからないんだけど。

VBだとMeなんだけど...

▼回答
C#は、thisを使って次の様に記述するんだ。

this.Close();

■参考サイト
[C#][VB]フォームを閉じる
http://jeanne.wankuma.com/tips/form/close.html

月曜日, 4月 14, 2008

[VB2005]PrintDocumentコントロール

▼質問
印刷の前に出るメッセージの表示名はどうやったら変更できるの?

▼回答
DocumentNameプロパティを変更すれば表示が変わるよ。
Me.PrintDocument1.DocumentName = "表示名"

[VB2005]文字サイズチェック

▼質問
データベースに文字列を格納する時に下記のエラーが出るんだ。

ORA-12899: 列"○×△□"."テーブル名"."フィールド名"の値が大きすぎます(実際: 256、最大: 255)

文字列のサイズをチェックをして、格納サイズより大きい時は

格納サイズより大きい部分は削除したいんだ。どうしたらできるんだい。

文字数のチェックはMaxLengthプロパティに値を入れておけば

自動的にやってくれてはいるんだけど...

▼回答
こんなのできたよ。

Public Shared Function ChkByte(ByVal strValue As String, ByVal byteSize As Integer) As Boolean
If (System.Text.Encoding.GetEncoding("Shift-JIS").GetByteCount(strValue) <= byteSize) Then ChkByte = True
End Function

Public Shared Function GetByte(ByVal strValue As String, ByVal byteSize As Integer) As String
Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
Dim bBytes As Byte() = hEncoding.GetBytes(strValue)
Dim count As Long
For i As Long = Len(strValue) To 1 Step -1
If (ChkByte(Mid(strValue, 1, Len(strValue) - count), byteSize)) Then
Return System.Text.Encoding.GetEncoding("Shift-JIS").GetString(bBytes, 0, Len(strValue) - count)
End If
count = count + 1
Next i
Return strValue
End Function

■参考サイト
VB.NET 全角・半角でのLEFT関数 - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24347&forum=7&start=8

木曜日, 4月 03, 2008

[VB2005]閉じるボタンのキャンセル

▼質問
閉じるボタン(「×」ボタン)をクリックされても閉じないようにするにはどうしたらいいの?

▼回答
FormClosingイベントで次のコードを記述すればできるらしいよ。(^^;

If (e.CloseReason = CloseReason.UserClosing) Then
e.Cancel = True
End If


■参考サイト
ウィンドウの閉じるボタンを押しても終了させない
http://katamari.jp/index.php?dev%2Fvb%2F%A5%A6%A5%A3%A5%F3%A5%C9%A5%A6%A4%CE%CA%C4%A4%B8%A4%EB%A5%DC%A5%BF%A5%F3%A4%F2%B2%A1%A4%B7%A4%C6%A4%E2%BD%AA%CE%BB%A4%B5%A4%BB%A4%CA%A4%A4

日曜日, 3月 30, 2008

[VB2005]ReadOnlyコンボボックス

Public Class useComboBox
Inherits System.Windows.Forms.ComboBox
Private blnReadOnly As Boolean = False
Private iSelectedIndex As Integer = Me.SelectedIndex
'-------------------------------------------------------------------------------
'
' コンストラクタ処理
'
Public Sub New()

End Sub

'-------------------------------------------------------------------------------
'
' デストラクタ処理
'
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub

'-------------------------------------------------------------------------------
'
' 概要 : 読み取り専用かどうかを示す値を取得または設定します。
'
' 戻り値 : 読み取り専用の場合は true。それ以外の場合は false。既定値は false です。
'
Public Property ControlReadOnly() As Boolean
Get
Return blnReadOnly
End Get
Set(ByVal value As Boolean)
Me.Enabled = True
If (value) Then
Me.BackColor = SystemColors.Control
iSelectedIndex = Me.SelectedIndex
Else
Me.BackColor = SystemColors.Window
End If
blnReadOnly = value
End Set
End Property

Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnMouseUp(e)
End Sub

Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnMouseDown(e)
End Sub

Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnMouseClick(e)
End Sub

Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnGotFocus(e)
End Sub

End Class

[VB.NET or VB2005]カラー名称

▼質問
システムのカラー名称を指定したいんだけどどうやったらできるの?

▼回答
次の様に指定すればできるよ。
Me.BackColor = SystemColors.Window

■参考サイト
Control.BackColor プロパティ (System.Windows.Forms)
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.backcolor(VS.80).aspx


システムカラー名称 ARGB値
ActiveBorder FFD4D0C8
ActiveCaption FFC0C0C0
ActiveCaptionText FF0E1010
AppWorkspace FF808080
Control FFE0DFE3
ControlDark FF9D9DA1
ControlDarkDark FF716F64
ControlLight FFF1EFE2
ControlLightLight FFFFFFFF
ControlText FF000000
Desktop FF585768
GrayText FFACA899
Highlight FFB2B4BF
HighlightText FF000000
HotTrack FF648BCB
InactiveBorder FFD4D0C8
InactiveCaption FFFFFFFF
InactiveCaptionText FFA2A1A1
Info FFFFFFE1
InfoText FF000000
Menu FFFFFFFF
MenuText FF000000
ScrollBar FFD4D0C8
Window FFFFFFFF
WindowFrame FF000000
WindowText FF000000
Transparent FFFFFF
AliceBlue FFF0F8FF
AntiqueWhite FFFAEBD7
Aqua FF00FFFF
Aquamarine FF7FFFD4
Azure FFF0FFFF
Beige FFF5F5DC
Bisque FFFFE4C4
Black FF000000
BlanchedAlmond FFFFEBCD
Blue FF0000FF
BlueViolet FF8A2BE2
Brown FFA52A2A
BurlyWood FFDEB887
CadetBlue FF5F9EA0
Chartreuse FF7FFF00
Chocolate FFD2691E
Coral FFFF7F50
CornflowerBlue FF6495ED
Cornsilk FFFFF8DC
Crimson FFDC143C
Cyan FF00FFFF
DarkBlue FF00008B
DarkCyan FF008B8B
DarkGoldenrod FFB8860B
DarkGray FFA9A9A9
DarkGreen FF006400
DarkKhaki FFBDB76B
DarkMagenta FF8B008B
DarkOliveGreen FF556B2F
DarkOrange FFFF8C00
DarkOrchid FF9932CC
DarkRed FF8B0000
DarkSalmon FFE9967A
DarkSeaGreen FF8FBC8B
DarkSlateBlue FF483D8B
DarkSlateGray FF2F4F4F
DarkTurquoise FF00CED1
DarkViolet FF9400D3
DeepPink FFFF1493
DeepSkyBlue FF00BFFF
DimGray FF696969
DodgerBlue FF1E90FF
Firebrick FFB22222
FloralWhite FFFFFAF0
ForestGreen FF228B22
Fuchsia FFFF00FF
Gainsboro FFDCDCDC
GhostWhite FFF8F8FF
Gold FFFFD700
Goldenrod FFDAA520
Gray FF808080
Green FF008000
GreenYellow FFADFF2F
Honeydew FFF0FFF0
HotPink FFFF69B4
IndianRed FFCD5C5C
Indigo FF4B0082
Ivory FFFFFFF0
Khaki FFF0E68C
Lavender FFE6E6FA
LavenderBlush FFFFF0F5
LawnGreen FF7CFC00
LemonChiffon FFFFFACD
LightBlue FFADD8E6
LightCoral FFF08080
LightCyan FFE0FFFF
LightGoldenrodYellow FFFAFAD2
LightGray FFD3D3D3
LightGreen FF90EE90
LightPink FFFFB6C1
LightSalmon FFFFA07A
LightSeaGreen FF20B2AA
LightSkyBlue FF87CEFA
LightSlateGray FF778899
LightSteelBlue FFB0C4DE
LightYellow FFFFFFE0
Lime FF00FF00
LimeGreen FF32CD32
Linen FFFAF0E6
Magenta FFFF00FF
Maroon FF800000
MediumAquamarine FF66CDAA
MediumBlue FF0000CD
MediumOrchid FFBA55D3
MediumPurple FF9370DB
MediumSeaGreen FF3CB371
MediumSlateBlue FF7B68EE
MediumSpringGreen FF00FA9A
MediumTurquoise FF48D1CC
MediumVioletRed FFC71585
MidnightBlue FF191970
MintCream FFF5FFFA
MistyRose FFFFE4E1
Moccasin FFFFE4B5
NavajoWhite FFFFDEAD
Navy FF000080
OldLace FFFDF5E6
Olive FF808000
OliveDrab FF6B8E23
Orange FFFFA500
OrangeRed FFFF4500
Orchid FFDA70D6
PaleGoldenrod FFEEE8AA
PaleGreen FF98FB98
PaleTurquoise FFAFEEEE
PaleVioletRed FFDB7093
PapayaWhip FFFFEFD5
PeachPuff FFFFDAB9
Peru FFCD853F
Pink FFFFC0CB
Plum FFDDA0DD
PowderBlue FFB0E0E6
Purple FF800080
Red FFFF0000
RosyBrown FFBC8F8F
RoyalBlue FF4169E1
SaddleBrown FF8B4513
Salmon FFFA8072
SandyBrown FFF4A460
SeaGreen FF2E8B57
SeaShell FFFFF5EE
Sienna FFA0522D
Silver FFC0C0C0
SkyBlue FF87CEEB
SlateBlue FF6A5ACD
SlateGray FF708090
Snow FFFFFAFA
SpringGreen FF00FF7F
SteelBlue FF4682B4
Tan FFD2B48C
Teal FF008080
Thistle FFD8BFD8
Tomato FFFF6347
Turquoise FF40E0D0
Violet FFEE82EE
Wheat FFF5DEB3
White FFFFFFFF
WhiteSmoke FFF5F5F5
Yellow FFFFFF00
YellowGreen FF9ACD32

土曜日, 3月 29, 2008

[Windows]バッチ

▼質問
バッチからイベントログに情報を書込みたいんだ。どうしたらできるの?

▼回答
eventcreateコマンドを使えばできるよ。でも、このコマンドが使えるOSは、Windows XP と
Windows Server 2003だから気をつけてね。



/s computer イベントの出力先であるリモート コンピュータの名前または IP アドレスを指定します。デフォルトのコンピュータは、ローカル コンピュータです。

/u domain\user指定したユーザーのアクセス許可を使用してコマンドを実行します。デフォルトのユーザーは、現在のユーザーです。

/p password /u パラメータで指定したユーザー アカウントのパスワードを指定します。

/l イベントを作成するログの名前を指定します。APPLICATION または SYSTEM のみを指定できます。

/so source nameイベントを生成する "ソース" 名を指定します。任意の文字列を指定できますが、通常はプログラム名が指定されます。

/t 作成するイベントの "種類" を指定します。有効なイベントの種類は、Error (エラー)、Warning (警告)、Infomation (情報) です。

/id EventIDイベントの "イベント ID" を指定します。1 ~ 1000 の範囲の整数である必要があります。ID が一意になる必要はないため、これらを使用して、プログラムからの終了コードなどを識別できるエラー番号を記録することをお勧めします。

/d description 新しく作成されるイベントに使用する "説明" を指定します。文字列に複数の単語を指定する場合は、二重引用符 (") で囲みます。

/? コマンド プロンプトでヘルプを表示します。 注 : /t、/id、および /d の各オプションの値は必須指定であり、/l オプションや /so オプションの値を追加指定できます。

"アプリケーションが失敗しました" という説明が付いたエラー イベントをアプリケーション ログに作成するには、eventcreate /t error /id 1000 /l application /d "アプリケーションが失敗しました" とコマンドを指定します。

■参考サイト
@IT:Windows TIPS -- Tips:イベント・ログに任意の文字列を出力する
http://www.atmarkit.co.jp/fwin2k/win2ktips/489evtout/evtout.html

土曜日, 3月 22, 2008

マイクロソフトの開発者向けツールバー

Silverlight ダウンロード
http://www.microsoft.com/japan/msdn/silverlight/downloads.aspx

Microsoft Internet Explorer Developer Toolbar (英語)
Web アプリケーションのデバッグが非常に効率的に行えるツールです。

■参考サイト
13種類のブラウザ用人気ツールバー徹底検証――開発者/マーケターに便利かどうか【後半】 Web担当者Forum
http://web-tan.forum.impressrd.jp/e/2008/02/20/2637

土曜日, 3月 01, 2008

[C言語orC++]ODBC(SQLGetData関数)

▼質問?
OracleのCHAR型を下記のように取得すると復帰値に1が返ってくるんだけどどうしてかな?
データベースの中身は取得できているみたいなんだ?!
復帰値 = SQLGetData( ハンドル, 番号, SQL_C_CHAR, &値, (SDWORD)sizeof( 値 ), &サイズ );

▼回答
データベースのサイズとプログラムで格納するサイズが同一サイズだとダメみたいなんだ。
プログラムのサイズを+1以上大きくする必要があるみたいなんだ。わかったかな?!

水曜日, 2月 27, 2008

[C言語orC++]ODBC(SQLFetch関数)

▼質問
SQLFetch関数の復帰値はどうみればいいの?

▼回答
1レコード読む時と複数行読む時で分ける必要があるよ。

1レコードの場合は次の様になるかな?!
short ret = 0;
HSTMT hstmt = SQL_NULL_HSTMT;
if ( (ret = SQLFetch( hstmt )) != SQL_NO_DATA_FOUND ) {
SQLGetData関数等でデータを取得


複数行の場合は次の様になるかな?!
HSTMT hstmt = SQL_NULL_HSTMT;
while ( SQLFetch( hstmt ) != SQL_NO_DATA_FOUND ) {
SQLGetData関数等でデータを取得


SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, or SQL_INVALID_HANDLE.

■参考サイト
SQLFetch - 次のデータ行
http://publib.boulder.ibm.com/html/as400/v5r1/ic2962/index.htm?info/cli/rzadpmst56.htm
SQLFetch Function
http://msdn2.microsoft.com/en-us/library/ms712424(VS.85).aspx
ODBC
http://itref.fc2web.com/odbc.html

月曜日, 2月 04, 2008

「VBA]最大列文字列の取得

▼質問
最大列の文字列を知りたいんだけど・・・。

Aとか、Bとか・・・???

▼回答
こんな風に取得できるよ。

Replace(Split(Excel.ActiveSheet.Columns(256).Address(True, True, Excel.XlReferenceStyle.xlA1), ":")(0), "$", "")

土曜日, 1月 26, 2008

[VBA]似たような関数・メソッド・プロパティ

▼質問
.Value と .Text は何が違うの?

▼回答
.Value :数値だけを表示する。
.Text: 書式設定を含めて出力する。します。(Range オブジェクトの場合は、値の取得のみ可能)

▼質問
StrとCStrは何が違うの?

▼回答
Str: 符号の1桁が常に確保されて表示される。
CStr: プラスのときにスペースが挿入されない。

■参考サイト
VBA 文字列操作 (パソコン便利ツール集)
http://makotowatana.ld.infoseek.co.jp/vba_character.html#vt

日曜日, 1月 13, 2008

[EXCEL]条件を満たすものだけをカウントしたい

▼質問
条件を満たすものだけをカウントしたい時の関数を知らないかい?

▼回答
COUNTIF関数を使えばできるよ。

使い方は

COUNTIF(検索範囲,検索条件)

だよ!

■参考サイト
Excel関数 条件を満たすものだけをカウントする(COUNTIF関数)
http://www.pursue.ne.jp/Document_xls/xls0022.htm

水曜日, 12月 19, 2007

[HTML]インラインフレーム(iframe)の更新

▼質問
インラインフレーム(IFRAME)を更新したいんだけど・・・どうしたらできるの?

▼回答
インラインフレームのオブジェクトの指定は次のようになる。

parent.document["インラインフレームNAME"]
(parent.document.インラインフレームNAMEでもOK)
document.frames["インラインフレームNAME"]←IEのみ有効らしい
(document.frames.インラインフレームNAMEでもOK)

これを踏まえると次の記述をすると更新が実現できる。

parent.document["インラインフレームNAME"].location.href=URL;


■参考
エレメントプロパティ/メソッド
value : フォーム部品に入っている文字列、または表示している文字列を取得・設定します。
innerHTML : 指定エレメントのHTML要素(タグの間)を取得します。
innerText : 指定エレメントの文字列を取得します。
tagName : 指定エレメントのタグ名を取得します。
click() : クリックします。クリック可能なエレメントであること。
outerHTML : 指定エレメントのHTML要素(タグ毎)の内容を取得します。

日曜日, 12月 09, 2007

[SQL]同じ構造で複数テーブルのデータを取得

▼質問
同じ構造をしたテーブルが複数あるときに、SQLで簡単にデータを取得することはできないの?

▼回答
UNIONを使えばできるよ。重複行は削除されるから気をつけてね。

重複行を有効にしたい時は、UNION ALLにすればできるよ。

SELECT * FROM テーブル1 WHERE フィールド1 = 値 UNION SELECT * FROM テーブル2 WHERE フィールド1 = 値

ORDER BY フィールド1とすると次のようなエラーになるんだ。

ORA-00904: "フィールド1": 無効な識別子です。

どうしてなんだ?

*をしている時は、フィールド番号を指定しないと駄目なんだ。

SELECT * FROM テーブル1 WHERE フィールド1 = 値 UNION SELECT * FROM テーブル2 WHERE フィールド1 = 値 ORDER BY 1 asc

フィールド名をしてしたい時は、*に全てのフィールドを

指定してやる必要があるんだ。

わかったかい?!

SELECT フィールド1,フィールド2,フィールド3 FROM テーブル1 WHERE フィールド1 = 値 UNION SELECT フィールド1,フィールド2,フィールド3 FROM テーブル2 WHERE フィールド1 = 値 ORDER BY フィールド1 asc

土曜日, 12月 01, 2007

[Excel]名前ボックスって何?

▼質問
「名前ボックス」って何?

▼回答
セルやセル範囲に名前が付けられることができるらしい。

知らんかった!

中級レベルなら知っているらしい。。。

おれって、初心者・・・。

■参考サイト
セルに名前をつける:Excel エクセルの使い方
http://www.relief.jp/itnote/archives/000208.php

操作方法は3つあるらしい。

①名前をつけたいセルを選択→[名前ボックス]に名前を入力して[Enter]キーを押す。
←ここから削除や変更はできないっぽい!? 違う名前を入力して同じ事を繰り返すと
追加されるみたい。表示上は文字列の昇順が最初に表示されるみたい。

②名前をつけたいセルを選択→メニュー[挿入]->[名前]->[定義]をクリック
→[名前の定義]ダイアログ-[名前]欄に名前を入力し、[OK]ボタンを押す。

③ショートカットキー[Ctrl]+[F3]で[名前の定義]ダイアログを表示する。

追加・削除は[名前の定義]ダイアログからしかできない?
変更は、削除してからじゃないと駄目っぽい!?

木曜日, 11月 29, 2007

[VB2005]日付関数

▼質問
月末日付を求めるにはどうしたらいいの?

▼回答
下記の方法で指定した前月の月末日付が取得できるよ。

DateSerial(年, 月, 0)

他にも下記の方法で同じように取得できるよ。

DateAdd("d", -1, CDate("yyyy/mm/dd"))

月末日の求め方
Dim lastDay As Integer = System.DateTime.DaysInMonth(Now.Year, Now.Month)

金曜日, 11月 23, 2007

[VB2005]複数テーブルのデータベース更新

▼質問
複数テーブルを更新する時にトランザクションの管理やエラーの時のロールバックや成功の時の
コミットはどうやるんだい?

▼回答
サンプルを示しておくから参考にしてくれ!

'接続内容設定
Dim strCon as String = "Data Source=サービス・ネーミング" & _
";User ID=ユーザ名" & _
";Password=パスワード"

'データベースコネクション確立
Dim con As OracleConnection = New OracleConnection(strConnection)

'データベースオープン
con.Open()

Dim txn As OracleTransaction = con.BeginTransaction(IsolationLevel.Serializable)

Try

'レコード削除
Call DeleteTable(con)
'削除関連情報更新
Call UpdateTable(con)

txn.Commit()

Catch ex As Exception

txn.Rollback()

Finally

'データベースクローズ
con.Close()
con.Dispose()
con = Nothing

End Try

Private Sub DeleteTable(ByVal con As OracleConnection)

Dim cmd As OracleCommand = Nothing

Dim strSql As String = "DELETE FROM テーブル名 " & _
"WHERE フィールド名 = 1"

Try

cmd = New OracleCommand(strSql, con)
cmd.ExecuteNonQuery()

Catch ex As Exception
Throw
Finally

If (Not IsNothing(cmd)) Then
cmd.Dispose()
cmd = Nothing
End If

End Try

End Sub

Private Sub UpdateTable(ByVal con As OracleConnection)

Dim cmd As OracleCommand = Nothing

Dim strSql As String = "UPDATE テーブル名 " & _
"SET フィールド名 = 0 " & _
"WHERE フィールド名 = 1"

Try

cmd = New OracleCommand(strSql, con)
cmd.ExecuteNonQuery()

Catch ex As Exception
Throw
Finally

If (Not IsNothing(cmd)) Then
cmd.Dispose()
cmd = Nothing
End If

End Try

End Sub


■参考サイト
Oracle Data Provider for .NETのクラス
http://otndnld.oracle.co.jp/document/products/oracle10g/101/doc_v12/win.101/B15519-01/OracleTransactionClass.htm

木曜日, 11月 22, 2007

[VB2005]印刷関連

▼質問
Excelを使った印刷はしたことがあるんだけど、テキスト文字列を直接印刷したことはないんだ。
どうしたらいいんだい!?

▼回答
PrintDocumentコンポーネント(System.Drawing.Printing名前空間)を使えばできるよ。

サンプルを教えてやるから参考にしてくれ!

ボタンのクリックイベントに下記を記述する。
'印刷処理実行
Me.PrintDocument1.Print()

PrintDocument1コンポーネントのイベントを下記のように記述すればOK!

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

Dim yPos As Single = 0
Dim count As Integer = 0
Dim line As String = Nothing

'フォント設定
Dim printFont As Font = New Font("MS 明朝", 10)

'ページ余白(内側部分)を取得
Dim topMargin As Single = e.MarginBounds.Top
Dim leftMargin As Single = e.MarginBounds.Left

'ページ行数取得.
Dim linesPerPage As Single = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)

Dim stream As New IO.StringReader(テキスト文字列)

'文字列ストリーム印刷.
While (count < linesPerPage)
line = stream.ReadLine()
If (line Is Nothing) Then
Exit While
End If
yPos = topMargin + count * printFont.GetHeight(e.Graphics)
e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
count += 1
End While

'追加ページの印刷があるかチェックする.
If Not (line Is Nothing) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If

stream.Close()

End Sub

■参考サイト
Windowsアプリケーションで印刷を行うには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/393printdoc/printdoc.html

印刷のテストは、PDFに出力するようにすれば印刷のデバックがやり易くなるので、下記の
ソフトはお奨めだ。しかも、フリーソフトだからお得!?

XLsoft エクセルソフト : activePDF 無料 PDF 作成/変換ソフトウェア PrimoPDF 日本語版 - ホーム
http://www.xlsoft.com/jp/products/primopdf/index.html

水曜日, 11月 21, 2007

[VB2005]フォルダやファイルの列挙方法

▼質問
コンボボックスに決められたフォルダのファイルを一覧で表示したいんだ。どうしたらいいの?

▼回答
次のようにすればできるよ。

For Each strPath As String In System.IO.Directory.GetFileSystemEntries("C:\temp", "*")
Dim strDir() As String = Split(strPath, "\")
ComboBox1.Items.Add(strDir.GetValue(strDir.Length - 1))
Next strPath

■参考サイト
Visual Basic 6.0 と Visual Basic .NET とのフォルダやファイルの列挙方法の違いについて
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/File/

土曜日, 11月 17, 2007

[VB2005]Namespace My(ApplicationEvents.vb)

▼質問
「Namespace My(ApplicationEvents.vb)」って何?

▼回答
・VB2005から新しく導入された機能らしい。
・「My」を使うと、いろいろなことがとても簡単にできるらしい。
・My.Applicationを使うと、開いているすべてのフォームにアクセスしたり、ハンドルしていない
すべての例外をキャッチしたりできるらしい。
↑これはいろいろできそうな機能である。使えそうである!
・My.Computerを使うと、ファイルやフォルダを簡単に制御したり、レジストリにアクセスしたり
できるらしい。

■参考サイト
VB Myの用法 - My, My.Application, My.Computer
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard37.htm

月曜日, 11月 12, 2007

[VBA]リストボックス(ListBox)

▼質問
複数の列を表示するリストボックス(ListBox)を作成するにはどうしたらいいの?

▼回答
ユーザフォーム(UserForm)にリストボックス(ListBox)を貼り付けて次のコードを
UserForm_Initialize()に記述する。

ListBox1.Clear
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = 20 & ";" & 10
Call ListBox1.AddItem(",", 0)
ListBox1.list(0, 0) = "列1"
ListBox1.list(0, 1) = "列2"

これでもいける?

Dim column(1, 1) As Variant
column(0, 0) = "列1": column(1, 0) = "列2"
ListBox1.column() = column

▼質問
見出しを作成するにはどうしたらいいの?

▼回答
次のコードを書いてみたがエラーが発生してしまう。なぜ?

ListBox1.ColumnCount = 2
ListBox1.RowSourceType = "Value List"
ListBox1.RowSource = "列1;列2"
ListBox1.TextColumn = 3
ListBox1.ColumnWidths = 20 & ";" & 10
ListBox1.ColumnHeads = True

エラーの内容は、RowSourceTypeで実行時エラー'13'の「型が一致しません。」が発生する。
RowSourceTypeはAccessしか使えないのかな?

今度は、RowSourceTypeをコメントにして実行してみると次行のRowSourceでエラーが発生する。
エラーの内容は、実行時エラー'380'の「RowSourceプロパティを設定できません。プロパティの
値が不正です。」と・・・。

ダメダメだー!!

諦めよう。。。(T_T)

火曜日, 10月 30, 2007

[VB2005]「Option Strict On では、遅延バインディングを使用できません。」エラー

▼質問
「Option Strict On では、遅延バインディングを使用できません。」のエラーが発生する。

▼回答
問題1
Private Sub TrnPictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox.Click
Dim x as Double
x = sender.MousePosition.X()
End Sub

対応1
x = PointToClient(MousePosition).X

問題2
Dim obj As Object
obj = OraDataBase.CreateDynaset(strSql, 0)
Debug.Print obj.Fields("FIELDS_NAME").Value

対応2
下記の参照を追加する。
参照名:Oracle InProc Server 5.0 Type Libray

Imports OracleInProcServer

Dim obj As OracleInProcServer.OraDynaset
obj = CType(CType(OraDatabase, OracleInProcServer.OraDatabase).CreateDynaset(strSql, 0), OraDynaset)
Debug.Print DirectCast(DirectCast(obj.Fields, OracleInProcServer.OraFields)("FIELDS_NAME"), OracleInProcServer.OraField).Value)

水曜日, 10月 24, 2007

[HTML]INPUTタグのdisabled

▼質問
INPUTタグでdisabledを指定しても有効にならないのはどうしてかな?

▼回答
スタイルシート(CSSファイル)などでcursorにpointerを指定していないか確認してみてくれ!

これをしているとdisabledを指定しても有効にならないんだ。

cursorのpointerをautoにしてみてくれ!!

どうだったかな?

これでも駄目でした(T_T)

FORMタグが悪さしているようです?!

諦めて他の方法にすることにしました。。。。

と、思ったら気がつきました。

下記の関数をフォームロードで処理をしていました。(T.T)

function buttonDisabled( flag ) {
var loop ;
with ( document.form1 ) {
for ( loop = 0 ; loop < elements.length ; loop++ ) {
if ( elements[loop].type == "button" ) {
elements[loop].disabled = flag;
}
}
}
}

これは、FORMタグで囲まれたボタンのみをパラメータフラグの内容でdisabledを
制御している関数で、これが悪さしていたようです。(涙)

■参考サイト
cursor CSS辞典
http://www.seo-equation.com/html/css/cursor

金曜日, 10月 12, 2007

[VB2005]数値入力制限

▼質問
テキストボックスで数値だけを入力できるようにしたいんだ。どうすればいい?

▼回答
KeyPressイベントで下記の関数を呼べばできるよ。

Public Sub KeyNumericOnly(ByRef e As System.Windows.Forms.KeyPressEventArgs)
'数値キーをチェックする.
If (Not e.KeyChar Like "[0-9]") Then e.KeyChar = ""
End Sub

これだけでは駄目なのね(?.?)

これだとバックスペースが使えなくなるのね。

だからこの関数を呼ぶ前に次のコードを記述するのね。

If (Asc(e.KeyChar) = System.Windows.Forms.Keys.Back) Then Exit Sub

他にも、プロパティのMaxLengthを指定しないと入力桁数の制限ができないのね。

これで、OKかな!?

木曜日, 10月 11, 2007

[Access]オラクルODBCドライバ

▼質問
ODBCの設定でOracle(オラクル)に接続しようとすると下記のエラーで接続できないんだ。

接続できませんでした。SQLState=IM004
[Microsoft][ODBC Driver Manager] SQL_HANDLE_ENVでのドライバの SQLAllocHandle は失敗しました。

どうしてなんだ?

▼回答
ODP.NETをインストールしたことはないかい?

それをインストールするとODBCに接続できなくなることがあるんだ。

原因は、Oracle Homeの優先順位が変わるからなんだ。

対策方法の手順は下記の通りだ。
1.「Oracle - OraDb10g_home1」→「Oracle Installation Products」→「Universal Installer」を
起動する。
2.「インストールされた製品(P)...」をクリックする。→「インベントリ」ダイアログが表示される。
3.「環境(E)」タブをクリックする。
4.「ODACHome1」より「OraClient10g_home1」の順位が上位になるように「↑」「↓」ボタンで
変更する。
5.「適用(A)」→「閉じる(C)」ボタンの順にボタンをクリックして終了。

■参考サイト
yukotan hour: 6月 2007
http://yukotan.blogspot.com/2007_06_01_archive.html

日曜日, 10月 07, 2007

[VBA]R1C1形式とA1形式

▼質問
R1C1形式をを英文字のA1形式に変換するにはどうしたらいいの?

▼回答
アクティブセルのR1C1形式・A1形式を取得するサンプルを教えておくよ。
Dim strRowCol As String
Dim strTXlA1 As String
Dim strTXlR1C1 As String
Dim strFXlA1 As String
Dim strFXlR1C1 As String

'1:1
strRowCol = Excel.ActiveCell.Row & ":" & Excel.ActiveCell.Column
'$A$1
strTXlA1 = Excel.ActiveCell.Address(True, True, Excel.XlReferenceStyle.xlA1)
'R1C1
strTXlR1C1 = Excel.ActiveCell.Address(True, True, Excel.XlReferenceStyle.xlR1C1)
'A1
strFXlA1 = Excel.ActiveCell.Address(False, False, Excel.XlReferenceStyle.xlA1)
'R[1]C[1]
strFXlR1C1 = Excel.ActiveCell.Address(False, False, Excel.XlReferenceStyle.xlR1C1)
'A$1
Debug.Print Excel.ActiveCell.Address(True, False, Excel.XlReferenceStyle.xlA1)
'R1C[1]
Debug.Print Excel.ActiveCell.Address(True, False, Excel.XlReferenceStyle.xlR1C1)
'$A1
Debug.Print Excel.ActiveCell.Address(False, True, Excel.XlReferenceStyle.xlA1)
'R[1]C1
Debug.Print Excel.ActiveCell.Address(False, True, Excel.XlReferenceStyle.xlR1C1)

水曜日, 9月 26, 2007

スクリプト

■参考サイト
【Microsoft TechNet: スクリプト センター】
http://www.microsoft.com/japan/technet/scriptcenter/scripts/default.mspx

右クリック(コンテクストメニュー)

■参考サイト
【WEBプログラミング NOW!: IE7β2(日本語版)とGoogle検索】
http://shimax.cocolog-nifty.com/search/2006/05/ie72google_ce28.html
【【JavaScript】外部プログラム実行できますか? IEの選択文字列を、Perlスクリプトに渡したい http://www.hatena.ne.jp/1131762882 という質問をしたら、JavaScriptででき.. - 人力検索はてな】
http://q.hatena.ne.jp/1131779952

日曜日, 9月 23, 2007

[VBA]月の日数

▼質問
月の日数をを知りたいんだけど・・・。どうしたらできるの?

▼回答
次の関数で取得することができるよ。

Public Function DaysInMonth(ByVal day As Date) As Integer
Dim NextMonth As Variant
Dim EndOfMonth As Variant
NextMonth = DateAdd("m", 1, day)
EndOfMonth = NextMonth - DatePart("d", NextMonth)
DaysInMonth = DatePart("d", EndOfMonth)
End Function

■参考
[AC97]指定された月の日数を取得する方法
http://support.microsoft.com/kb/109703/ja

金曜日, 9月 21, 2007

[VBA]印刷関連

▼質問
改ページ数を知りたいんだけど、どうしたらできるの?

▼回答
次のコードで取得できるよ。①が横方向の改ページ数で、②が縦方向だよ。
①Worksheets(シート名).VPageBreaks.Count
②Worksheets(シート名).HPageBreaks.Count

▼質問
改ページを削除するにはどうすればいいの?

▼回答
下記のコードを記述すればできるよ。
Worksheets(シート名).ResetAllPageBreaks

垂直方向の改ページを無くすには下記のコードを記述すると自動で行うことができる。

Worksheets(シート名).ResetAllPageBreaks
Worksheets(シート名).PageSetup.PrintArea = "A1:P" & Worksheets(シート名).range("A65536").End(xlUp).row
If (Worksheets(シート名).VPageBreaks.Count > 0) Then
ActiveWindow.View = xlPageBreakPreview
ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
ActiveWindow.View = xlNormalView
End If
ActiveWindow.LargeScroll Down:=-(Worksheets(シート名).HPageBreaks.Count + 1)

■参考
【Shun's Page】印   刷
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page20.htm

水曜日, 9月 19, 2007

[VBA]数値入力制限

▼質問
テキストボックスで数値だけを入力できるようにしたいんだ。どうすればいい?

▼回答
KeyPressイベントで下記の関数を呼べばできるよ。

Public Sub KeyNumericOnly(ByRef KeyAscii As ReturnInteger)
'数値キーをチェックする.
If (Not Chr(KeyAscii) Like "[0-9]") Then KeyAscii = 0
End Sub

これだけじゃ駄目だった!

日本語入力ができちゃうー!!

IMEを使えないようにするにはどうしたらいいのか調べることに・・・。

テキストボックスのプロパティIMEModeをfmIMEModeDisableにすれば良いみたい。(^^)v

このやり方のほかに次のコードでも良いみたい。

TextBox1.IMEMode = fmIMEModeDisable

00=fmIMEModeNoControl:IME のモードを変更しません (既定値)。
01=fmIMEModeOn:IME をオンにします。
02=fmIMEModeOff:IME をオフにして英語モードにします。
03=fmIMEModeDisable:IME をオフにします。このモードにするとユーザーは、キー操作によっても IME をオンにすることができなくなります。
04=fmIMEModeHiragana:全角ひらがなモードで IME をオンにします。
05=fmIMEModeKatakana:全角カタカナ モードで IME をオンにします。
06=fmIMEModeKatakanaHalf:半角カタカナ モードで IME をオンにします。
07=fmIMEModeAlphaFull:全角英数モードで IME をオンにします。
08=fmIMEModeAlpha:半角英数モードで IME をオンにします。
09=fmIMEModeHangulFull:全角ハングル モードで IME をオンにします。
10=fmIMEModeHangul:半角ハングル モードで IME をオンにします

■参考
テキストボックスで数値のみを受け取る方法
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/NumericEdit/

[VBA]有効な行数を取得する

▼質問
有効な行数を取得するにはどうしたらいいの?

▼回答
A列の終端セル行を取得するには、下記のようにすると取得できる。

Worksheets(シート名).Range("A65536").End(xlUp).Row

この方法では、A列の65536行目から上(xlUp)に終端セルを検索している。

下記のように、上から検索する方法もある。

Worksheets(シート名).Range("A1").End(xlDown).Row

この場合では、途中に空白があるとそこが終端セルと判断してしまうので本当の

終端セルを取得したい場合は、前者の方法を使用した方が良い。

空白が途中に絶対無いとわかっていれば問題はないと思うが・・・。

■参考
Worksheets(シート名).Range("A1").End(direction)
directionは検索の方向を指定する。
xlToLeft:左へ検索
xlToRight:右へ検索
xlUp:上へ検索
xlDown:下へ検索

日曜日, 9月 16, 2007

[VBA]オブジェクト名でプロパティにアクセスする

▼質問
オブジェクト名でメソッドやプロパティにアクセスしたいんだけどできるの?

▼回答
できるよ!オブジェクト名で設定取得が可能だ。
Me.Controls.Item(オブジェクト名).メソッド名又はプロパティ名

木曜日, 9月 06, 2007

[VBA]時刻の設定

▼質問
Date型の変数に時刻を設定するにはどうしたらいいの?

▼回答
Dim NowDate As Date
Dim MakeDate As Date
Dim strDate As String

NowDate = Now

strDate = Format(NowDate, "yyyy") & "/" &amp; _
Format(NowDate, "mm") & "/" & _
Format(NowDate, "dd")
MakeDate = CDate(strDate)
MakeDate = DateTime.DateAdd("h", 24, MakeDate)

MsgBox Format(MakeDate, "yyyy/mm/dd hh:nn:ss")

MakeDate = DateTime.DateAdd("h", 1, MakeDate)

MsgBox Format(MakeDate, "yyyy/mm/dd hh:nn:ss")

金曜日, 8月 31, 2007

[EXCEL]アドイン

▼質問
Excelでアドインを作るにはどうしたらいいのかな?

▼回答
保存の時に「Microsoft Excel アドイン (*.xla)」を選択して保存するだけだよ。

§Excelのアドインソフトの作り方
http://members.at.infoseek.co.jp/kenchan_h/index15.html
@IT:Windows TIPS -- Tips:Excelでユーザー定義関数をアドインとして提供する
http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html

▼質問
プロパティウィンドウ(ショートカットメニュー・右クリックメニュー・メニューバー)に項目を追加するには
どうしたらいいの?

▼回答
次のプログラムをワークブックオープンのWorkbook_Open()で呼べば追加できるよ。

Dim Obj As Object
Set Obj = Application.CommandBars("Cell").Controls.Add()
With Obj
.Caption = "コマンド表示名称"
.OnAction = "プログラム名"
.BeginGroup = False ' セパレータ追加表示(True:追加表示、False:追加無し)
End With

追加したものはワークブッククローズのWorkbook_BeforeClose(Cancel As Boolean)で削除すること
が必要だよ。

Application.CommandBars("Cell").Controls("コマンド表示名称").Delete

やってみたがうまくいかなかった。(T_T)アドインファイルにするとWorkbook_BeforeCloseは呼ばれ
ないことが判明。

そこで、次のクラスファイルを作成してExcelが閉じられた時に呼ぶようにやってみた。

Option Explicit

Public WithEvents App As Application
Public WithEvents Wb As Workbook

' クラスモジュールの初期化処理(Workbook_Openで呼出すが、Bookを呼出した後でないとダメ)
Public Sub Class_Initialize()
Set App = Application
Set Wb = Application.ActiveWorkbook
End Sub

' クラス内Applicationのワークブッククローズ処理(Excel終了時に呼出される)
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
On Error Resume Next
Application.CommandBars("Cell").Controls("コマンド表示名称").Delete
End Sub

' クラス内Workbookのワークブッククローズ処理(Book終了時に呼出される)
Private Sub Wb_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.CommandBars("Cell").Controls("コマンド表示名称").Delete
Application.DisplayAlerts = True
End Sub

標準モジュールでクラスの生成が必要

Public myApp As New クラス名

■参考サイト
Excel のメニューおよびメニュー バーをカスタマイズする方法
http://support.microsoft.com/kb/830502/ja
Office TANAKA - VBA Tips
http://officetanaka.net/excel/vba/tips/index.htm

木曜日, 7月 12, 2007

[HTML]ラジオボタンとタイトルの連動

▼質問
ラジオボタンのタイトルをクリックした時にタイトルと一緒にラジオボタンを連動させる にはどうしたらよいの?

▼回答
タイトルをラベルタグで囲って、ラジオ(input)ボタンのid属性とラベル( label )タグの for 属性を一緒
の名称にすれば実現することができるよ。

<input type="radio" id="opt_1" name="opt" value="1" checked>








火曜日, 7月 03, 2007

[ORACLE]データベース・リンク

▼質問
データベースリンクって何?

▼回答
データベースリンクとは、他のマシンのOracleデータベースを自分のマシンにマッピングする機能。

■参考サイト
Oracle・Tips集
http://ash.jp/db/ora_tips.htm
ORACLE(テクニック)
http://www.geocities.jp/principal_focuses/tech/ora/ora_tech/index.html

日曜日, 6月 10, 2007

[ORACLE]プロシージャ

▼質問
クライアントからサーバの処理を実行したいんだけど・・・。プロシージャで、できないのかな?

▼回答
実行ファイルが処理できるDLL(Windows)かSO(Unix)を作成して外部プロシージャに
定義(ライブラリ登録?)すれば実現できるよ!

自作しなくてもWindowsAPIを呼ぶことができるからいろいろできそうである。

下記のサイトにINIファイルのAPIを呼ぶサンプルがあったので実験してみた。

いっしーのプログラムヒント集
http://www.j-real.com/stone/progtips.html#Ora2

コピペしたらうまくいかなかったのでうまくいったものを下記に示しておきます。
←こんなエラーが出た!「PLS-00103: 記号"SHOW"が見つかりました」

SQL*Plusに「SYSTE]でログインして実行する。

ここから-------------------------------------------------------------------------------->

-- DLLファイルの名称定義 ディレクトリは環境によって変えてください
create or replace library kernel32 is 'c:\windows\system32\kernel32.dll';
/
show errors;

-- APIのGetPrivateProfileIntA(Iniファイルから数値を取り出す)
create or replace function GetIniInt(
lpApplicationName CHAR,
lpKeyName CHAR,
nDefault BINARY_INTEGER,
lpFileName CHAR
) RETURN BINARY_INTEGER AS
EXTERNAL
LIBRARY kernel32 NAME "GetPrivateProfileIntA"
LANGUAGE C
CALLING STANDARD C;
/
show errors;

-- APIのGetPrivateProfileStringA(Iniファイルから文字列を取り出す)
create or replace function GetIniString( --この関数名は好きなものを付けられます
lpApplicationName String,
lpKeyName String,
lpDefault String,
lpReturnedString OUT String,
nSize BINARY_INTEGER,
lpFileName String
) RETURN BINARY_INTEGER AS
EXTERNAL
LIBRARY kernel32
NAME "GetPrivateProfileStringA"
LANGUAGE C
CALLING STANDARD C;
/
show errors;

<--------------------------------------------------------------------------------ここまで SQL*Plusの実行結果 SQL> @C:\Work\プロシージャ\CRE_SP_INI.sql
ライブラリが作成されました。
エラーはありません。
ファンクションが作成されました。
エラーはありません。
ファンクションが作成されました。
エラーはありません。
SQL>

プロシージャの作成
名前:SP_INI_TEST
ソース

ここから-------------------------------------------------------------------------------->

(
dat in out varchar2,
ret out int
) as
begin
ret := GetIniInt('intl','iCountry', 0, 'c:\windows\win.ini');
dbms_output.put_line(ret);
ret := GetIniString('intl','sCountry', 'Default', dat, 255, 'c:\windows\win.ini'); dbms_output.put_line(dat ' ' ret);
end;

<--------------------------------------------------------------------------------ここまで SQL*Plusの実行方法 SQL> variable dat varchar2(255)
SQL> variable ret NUMBER
SQL> execute SP_INI_TEST( :dat, :ret )

こんなエラーが出た!
「ORA-28595: Extprocエージェント : DLLパスが無効です」

Oracle Net Servicesの拡張機能の使用
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19208-02/advcfg.htm

上記の「表 13-5 listener.oraファイルの外部プロシージャ設定」を読むとリスナーの設定が
必要のようだ。
「Net Manager」→「リスナー」→「LISTENER」→「その他のサービス」→「環境」

"EXTPROC_DLLS=ANY"
うまくいかん!

行番号 = 1 列番号 = 32 エラー・テキスト = PLS-00103: 記号"BEGIN"が見つかりました。 次のうちの1つが入るとき: ( ; is with authid as cluster compress order using compiled wrapped external deterministic parallel_enable pipelined

■参考サイト 外部プロシージャのコール http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19248-02/adfns_extern_proc.htm
OKLab - Oracle PL/SQL入門
http://www.oklab.org/oracle/plsql.xhtml

土曜日, 6月 09, 2007

[tool]Windowsでリモートシェル

▼質問
LAN(2重化)の2枚挿しの時にリモートシェルが片方しか実行されない。

▼回答
リモートシェルが起動する時、RSHSVC.EXEは接続されているIPアドレスを優先的に取得し、
2つのLANが正常に接続されている時は、ネットワークの詳細設定で設定されている優先順位
によって決まるようだ。

起動時につながっていたLANに障害が発生した時は、RSHSVC.EXEを再起動しなくては正常な
LANに繋げにいくことはできない。

自動でリモートシェルを切替えるには面倒なようだ。(>_<);

■rshコマンド http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ServerHelp/da116a07-36a0-4b8d-885e-eec3b8ed33fe.mspx?mfr=true

■サービス登録方法(SC.EXE)
sc Create RshSvc binPath= "C:\WINDOWS\system32\RSHSVC.EXE" start= auto DisplayName= "Remote Shell Service"

■参考サイト
Windows Services for UNIX
http://www.microsoft.com/japan/technet/interopmigration/unix/sfu/default.mspx
リモートコンソール関係1
http://www.netwave.or.jp/~jun-n/reskit/remote1.htm
Remote Shell Services in SFU
http://technet.microsoft.com/en-us/library/B3877C5F-D844-F417-AD77-992E03F41BA3.aspx
Windowsに対してrshを行う手順
http://www.buk-u.com/rsh/
RSH Daemon - TetraPod
http://www.xvi.jp/item/146

金曜日, 5月 04, 2007

[VC++]ping

▼質問
ビルドしたら下記のエラーが出た。
「error LNK2019: 未解決の外部シンボル _IcmpSendEcho@32 が関数 "unsigned long __cdecl 関数名(unsigned long,int)" (mailto:YAKKH@Z) で参照されました。 オブジェクト名.obj

▼回答
IcmpSendEcho関係をリンクするライブラリがないと思われる。
下記のサイトでIP Helper APIを使うためには、Platform SDKをインストールと書いてあった。

IPHLPAPIを使ってWindowsでネットワーク設定いじるプログラムを書く
http://www.geekpage.jp/programming/iphlpapi/

Windows Platform SDKのインストール方法もこのサイトに説明されていた。感謝!感謝!

Windows Platform SDKのインストール
http://www.geekpage.jp/programming/platform-sdk/

VC++2005なのでこっちの説明の方が良さそうである。

Visual C++ Express Editionを使ってみる(Windows Platform SDK編)
http://freepg.fc2web.com/cpp/topic_vce_001.html

「IPHlpApi.Lib」をリンクした解決した。

■参考サイト
IPHLPAPI(IP Helper API)の使い方 [自作ping]
http://www.geekpage.jp/programming/iphlpapi/send-icmp.php

▼質問
ビルドしたら下記のエラーが出た。
「error LNK2019: 未解決の外部シンボル _inet_addr@4 が関数 "unsigned long __cdecl 関数名(char *,int)" (?関数名@@YAKPADH@Z) で参照されました。 オブジェクト名.obj 」

▼回答
IPアドレスをLong型の数値に変換するinet_addr関数を使用すると「Ws2_32.lib」をリンクしないと
いけないようだ。

木曜日, 5月 03, 2007

[VC++]文字列

▼質問
wchar_t型からchar型に変換するにはどうしたらいいの?

▼回答

TCHAR * str1 = TEXT("テスト");
TCHAR str2[32];
lstrcpy(str2 , str1);


■参考サイト
方法 : さまざまな文字列型間で変換する
http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx

水曜日, 5月 02, 2007

[VC++]oo4o接続・設定

▼質問
リビルドすると下記のエラーが発生する。
「fatal error C1083: include ファイルを開けません。'oracl.h': No such file or directory ファイルパス 行番号」

▼回答
オラクルがインストールされた下記のパスのどちらかを「構成プロパティ」→「C/C++」→「全般」→
「追加のインクルード ディレクトリ」に追加する。
クライアントインストール:\oracle\product\10.2.0\client_1\oo4o\CPP\INCLUDE
オラクルインストール:\oracle\product\10.2.0\db_1\oo4o\CPP\INCLUDE

▼質問
リビルドで下記のエラーが出る。
「error LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: int __thiscall ODynaset::Close(void)" (__imp_?Close@ODynaset@@QAEHXZ) が関数 __catch$_ファイル名@4$0 で参照されました。 オブジェクトファイル名」

▼回答
オラクルがインストールされた下記のパスのどちらかを「構成プロパティ」→「リンカ」→「入力」→
「追加の依存ファイル」に追加する。
クライアントインストール:\oracle\product\10.2.0\client_1\oo4o\CPP\LIB\ORACLM32.LIB
オラクルインストール:\oracle\product\10.2.0\db_1\oo4o\CPP\LIB\ORACLM32.LIB

[C言語orC++]VC++2005へのバージョンアップ

▼質問
C言語で書かれたソースをVC++2005でリビルドすると下記のエラーが出る。
「警告 1 warning C4996: 'strcpy' が古い形式として宣言されました。 ファイルパス 行番号」

▼回答
VC++2005のランタイムから既存標準関数のセキュリティが持つ脆弱性の対応で
新しい関数が提供されたため。

回避策として次のコードを記述すると無効にできる。
#pragma warning(disable : 4996)

他の回避方法として次の#defineのどちらかを定義すればと書いてあったので
試してみたが警告は消えなかった。なぜ?

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#define _CRT_SECURE_NO_DEPRECATE 1

理由はわからないがヘッダファイルの「stdafx.h」に記述したら消えたぞ!
記述の場所は、ヘッダーファイルが記述している前にしないといけないみたい。

「_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES」の定義は消えない
警告もあるので「_CRT_SECURE_NO_DEPRECATE」を使った方が良いみたい。(^^)v

プロジェクトのプロパティでも定義できるようなのでそちらも試してみました。

「構成プロパティ」->「C/C++」->「プリプロセッサ」->「プリプロセッサの定義」の
末尾に 追加する。

この他にも下記の関数も変更になったようだ。

従来の関数:セキュアな関数
strcpy:strcpy_s
strncpy:strncpy_s
printf:printf_s
asctime:asctime_s
ctime:ctime_s

■参考サイト
Visual C++ 2005 C/C++ランタイム ライブラリ新機能概要
http://www.microsoft.com/japan/msdn/security/demo/runtime.aspx
CRT のセキュリティ強化
http://msdn2.microsoft.com/ja-jp/library/8ef0s5kh(VS.80).aspx


;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T

▼質問
ライブラリのリンクってどうやってやるの?

▼回答
こんな方法があるよ。

プロジェクトのプロパティでライブラリのファイルを絶対パス(フルパス)で直接設定する方法と
ライブラリファイルとパスを分けて設定する方法があるよ。

前者
「構成プロパティ」->「リンカ」->「入力」->「追加の依存ファイル」に「絶対パス(フルパス)」
を指定する。

後者
「構成プロパティ」->「リンカ」->「入力」->「追加の依存ファイル」にリンクするライブラリ
ファイルを指定して、そのライブラリまでのパスを下記のプロパティに設定する。
「構成プロパティ」->「リンカ」->「全般」->「追加のライブラリ ディレクトリ」

月曜日, 4月 30, 2007

[VC++]Win32API関連

▼質問
HINSTANCEの取得方法ってないの?

▼回答
Win32APIのGetModuleHandle関数を使えば取得できるよ。引数に0を指定すれば自プロセスが
取得できるんだ。

HINSTANCE hinstDLL;
hinstDLL = ::GetModuleHandle(0);

[C++]DLLパスの取得方法(VB取得方法)

・DLL側の記述方法

#include "TCHAR.H"

TCHAR szModuleFilePath[ _MAX_PATH + 1 ] = _T( "" );

BOOL APIENTRY DllMain(
HINSTANCE hinstDLL, // DLL モジュールのハンドル
DWORD fdwReason, // 関数を呼び出す理由
LPVOID lpvReserved // 予約済み
)
{
::GetModuleFileName( hinstDLL, szModuleFilePath, _MAX_PATH );

switch ( fdwReason )
{
case DLL_PROCESS_ATTACH: //DLLがロードされた時に呼び出される.
break;
case DLL_THREAD_ATTACH: //新たなスレッドを作成した時に呼び出される.
break;
case DLL_THREAD_DETACH: //作成されたスレッドが終了した時に呼び出される.
break;
case DLL_PROCESS_DETACH: //DLLがアンロードされた時に呼び出される.
break;
default:
break;
}
return TRUE;
UNREFERENCED_PARAMETER( hinstDLL );
UNREFERENCED_PARAMETER( lpvReserved );
}

SAMPLE_API char* APIENTRY getPath()
{
return (char*)szModuleFilePath;
}

SAMPLE_API void APIENTRY getVBAPath( OLECHAR* path )
{
char wModuleFilePath[sizeof( szModuleFilePath )];
memset( wModuleFilePath, 0x00, sizeof( wModuleFilePath ) );
strcpy( wModuleFilePath, getWchar_tToChar( szModuleFilePath ) );
SysFreeString( *path );
*path = SysAllocString( (OLECHAR*)wModuleFilePath );
}

・メモ
APIENTRYは、windef.hに「#define APIENTRY WINAPI」として定義されている。
#define SAMPLE_API extern "C" __declspec(dllexport)

・VB2005側の呼出し方法
Public Declare Auto Function getPath Lib "ファイル名.dll" () As System.Text.StringBuilder

Dim path As System.Text.StringBuilder = クラス名.getPath()
Dim getPath as String = path.ToString

・VBA側の呼出し方法
Public Declare Sub getVBAPath Lib "ファイル名.dll" (ByRef path As String)

Dim path As String
Call getVBAPath(path)


▼質問
関数毎にファイルを分けてプログラミングするとDLLのパスがうまく取得できない。どうすればいいの?

▼回答
下記のようにすれば取得できるよ。

TCHAR szModuleFilePath[ _MAX_PATH + 1 ] = _T( "" );
HINSTANCE hinstDLL = ::GetModuleHandle(TEXT("DLLファイル名.dll"));
::GetModuleFileName( hinstDLL, szModuleFilePath, _MAX_PATH );

日曜日, 4月 29, 2007

[C++]Hello World

■Hello World(標準出力)
・Java
public class Test {
public static void main(String[] args) {
System.out.println( "Hello, Java !!" );
}
}

・C++
#include
using namespace std;
int main()
{
cout << "Hello, C++ !!" << endl;
}

・C言語
#include
main()
{
printf("Hello World\n");
}

[C++]変数・定数

▼質問
enum E_ERROR { ERR_00 = 0, ERR_01 = -1, ERR_02= -2, ERR_03 = -3 };
を「E_ERROR::ERR_00」のように使用すると下記の警告が出る。
「警告 1 warning C4482: 非標準の拡張機能が使用されています: enum 'E_ERROR' が限定名で使用されます c:\パス\ファイル名.cpp 行番号 」

▼回答
「E_ERROR::」を外すと問題ない?下記の様にして呼べば良さそうである。

・定義の記述
namespace NS_DEF
{
enum { ERR_00 = 0, ERR_01 = -1, ERR_02= -2, ERR_03 = -3 };
}

・呼び方
NS_DEF::ERR_00

・参考
namespace NS_DEF
{
#define NUM 100 // NS_DEF::NUMにはならない。
}
マクロ定義は名前空間に含めることができない。

■参考サイト
●C++編(言語解説) 第18章 名前空間
http://www.geocities.jp/ky_webid/cpp/language/018.html

定数の定義にはconstを使う方が優れている。理由は、 #defineによる定数定義と違い、
constの場合はデータ型がはっきりしているからだそうだ。

■参考サイト
C++ reference
http://www.asahi-net.or.jp/~wv7y-kmr/memo/old/cpp_bas.html

[VC++]ビルドエラー

▼質問
リビルドすると下記のエラーが出る。
「エラー 1 error PRJ0050: 出力の登録に失敗しました。レジストリを変更するための適切なアクセス許可があるかどうかを確認してください。 ○○○」

▼回答
同じ名前でレジストリに登録されておかしくなったみたい?別名で作成したらうまくいった。

こんな方法よりプロジェクトのプロパティの設定を直した方が良さそうである。
プロジェクトの「構成プロパティ」→「リンカ」→「全般」→「出力の登録」を「いいえ」にする。

ATLプロジェクトの「出力の登録」について
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100332

土曜日, 4月 28, 2007

[VB2005]VB.NETからの変更点メモ

▼質問
VB.NETで指定していたウィンドウハンドルのMe.hWndがエラーになるんだ。
候補リストからそれらしき名前のものを探しても見つからないんだ。どうして?

▼回答
どうしてか判らないが、Me.Handleを指定すればいいんだ。

[C++]VBA・VB2005への型変換

[Wtypes.hに含まれるアンマネージ型]:[アンマネージC言語型]:[マネージクラス名]:[説明][HANDLE]:[void*]:[System.IntPtr]:[32ビット]

[BYTE]:[unsigned]:[char]:[System.Byte]:[8ビット]

[SHORT]:[short]:[System.Int16]:[16ビット]

[WORD]:[unsigned]:[short]:[System.UInt16]:[16ビット]

[INT]:[int]:[System.Int32]:[32ビット]

[UINT]:[unsigned]:[int]:[System.UInt32]:[32ビット]

[LONG]:[long]:[System.Int32]:[32ビット]

[BOOL]:[long]:[System.Int32]:[32ビット]

[DWORD]:[unsigned]:[long]:[System.UInt32]:[32ビット]

[ULONG]:[unsigned]:[long]:[System.UInt32]:[32ビット]

[CHAR]:[char]:[System.Char]:[ANSIにより装飾]

[LPSTR]:[char*]:[System.StringまたはSystem.StringBuilder]:[ANSIにより装飾]

[LPCSTR]:[Const]:[char*]:[System.StringまたはSystem.StringBuilder]:[ANSIにより装飾]

[LPWSTR]:[wchar_t*]:[System.StringまたはSystem.StringBuilder]:[Unicodeにより装飾]

[LPCWSTR]:[Const]:[wchar_t*]:[System.StringまたはSystem.StringBuilder]:[Unicodeにより装飾]

[FLOAT]:[Float]:[System.Single]:[32ビット]

[DOUBLE]:[Double]:[System.Double]:[64ビット]


[クラス名]:[説明]:[Visual Basic のデータ型]:[C# のデータ型]:[C++ マネージ拡張のデータ型]:[JScript のデータ型]
●整数
[Byte]:[8ビット符号なし整数]:[Byte]:[byte]:[char]:[Byte]

[SByte]:[8ビット符号付き整数(非CLS準拠)]:[SByte(非組み込み型)]:[sbyte]:[signed char]:[SByte]

[Int16]:[16ビット符号付き整数]:[Short]:[short]:[short]:[short][Int32]:[32ビット符号付き整数]:[Integer]:[int]:[intまたはlong]:[int]

[Int64]:[64ビット符号付き整数]:[Long]:[long]:[__int64]:[long]

[UInt16]:[16ビット符号なし整数(非CLS準拠)]:[UInt16(非組み込み型)]:[ushort]:[unsigned short]:[UInt16]

[UInt32]:[32ビット符号なし整数(非CLS準拠)]:[UInt32(非組み込み型)]:[uint]:[unsigned intまたはunsigned long]:[UInt32]

[UInt64]:[64 ビット符号なし整数(非CLS準拠)]:[UInt64(非組み込み型)]:[ulong]:[unsigned __int64]:[UInt64]

●浮動小数点数
[Single]:[単精度 (32 ビット) 浮動小数点数]:[Single]:[float]:[float]:[float]
[Double]:[倍精度 (64 ビット) 浮動小数点数]:[Double]:[double]:[double]:[double]

●論理型
[Boolean]:[ブール値 (true または false)]:[Boolean]:[bool]:[bool]:[bool]

●その他
[Char]:[Unicode (16 ビット) 文字]:[Char]:[char]:[wchar_t]:[char]

[Decimal]:[96ビット10進値]:[Decimal]:[decimal]:[Decimal]:[Decimal]

[IntPtr]:[基になるプラットフォームによってサイズが決まる符号付き整数 (32 ビットのプラットフォームでは 32 ビット値、64 ビットのプラットフォームでは 64 ビット値) ]:[IntPtr(非組み込み型)]:[IntPtr(非組み込み型)]:[IntPtr(非組み込み型)]:[IntPtr]

[UIntPtr]:[基になるプラットフォームによってサイズが決まる符号なし整数 (32 ビットのプラットフォームでは 32 ビット値、64 ビットのプラットフォームでは 64 ビット値)(非CLS準拠)]:[UIntPtr(非組み込み型)]:[UIntPtr(非組み込み型)]:[UIntPtr(非組み込み型)]:[UIntPtr]

●クラス オブジェクト
[Object]:[オブジェクト階層構造のルート]:[Object]:[object]:[Object*]:[Object]
[String]:[Unicode 文字の不変固定長文字列]:[String]:[string]:[String*]:[String]


[整数型のサイズ]:[Visual Basic 6.0 の型と識別子の型文字]:[Visual Basic 2005 の型と識別子の型文字]:[共通言語ランタイム (CLR) の型]

[8ビット、符号付き]:[(なし)]:[SByte (なし)]:[System.SByte]

[8ビット、符号なし]:[Byte (なし)]:[Byte (なし)]:[System.Byte]

[16ビット、符号付き]:[Integer (%)]:[Short (なし)]:[System.Int16]

[16ビット、符号なし]:[(なし)]:[UShort (なし)]:[System.UInt16]

[32ビット、符号付き]:[Long (&)]:[Integer (%)]:[System.Int32]

[32ビット、符号なし]:[(なし)]:[UInteger (なし)]:[System.UInt32]

[64ビット、符号付き]:[(なし)]:[Long (&)]:[System.Int64]

[64ビット、符号なし]:[(なし)]:[ULong (なし)]:[System.UInt64]

32 ビット システムでは、32 ビット整数の演算の方が、16 ビットまたは 64 ビットの整数演算よりも高速です。つまり、Visual Basic 2005 では、Integer と UInteger は、効率の優れた基本的な数値型です。Visual Basic 2005 に移行するときに Long 宣言を Integer(Int32) に変更すると、アプリケーションのパフォーマンスを向上させることができます。

■参考サイト
プラットフォーム呼び出しによるデータのマーシャリング
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconmarshalingdatawithplatforminvoke.asp
.NET Framework クラス ライブラリの概要
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconthenetframeworkclasslibrary.asp

[VBA or VB2005]VBAとVBで同じ処理をしたいとき?

▼質問
VBAとVBで同じ処理をしたいときはどうしたらいいのだろう?

▼回答
VCでDLLを作成してWin32APIのように呼ぶしかないのかな?

このサイトに.NETでCOMとして作成してVBA側で参照設定をして使用できる方法もあると
書いてあるがどうなんだろう?

(このサイトはいろんな情報が充実していてすごい!すばらしい!!)
http://7ujm.net/VB/VBAVBnetActiveX.html

VB2005で試しにやってみたらCOMの登録でアセンブリの警告が出た!

作成方法
①プロジェクトの作成でクラスライブラリ(DLLの作成)を選ぶ。
②クラスファイルにコードを記述する。
③プロジェクトのプロパティから「コンパイル」を選択して「COM相互運用機能の登録(I)」を
チェックする。
④「スタート」→「全てのプログラム(P)」→「Microsoft Visual Studio 2005」→「Visual Studio Tools」
→「Visual Studio 2005 コマンド プロンプト」を起動してCOMの登録を行う。
C:\>regasm ○○○○○.dll /tlb /codebase
※解除方法:C:\>regasm ○○○○○.dll /unregister

ここで下記の問題?警告が発生!
「RegAsm : warning RA0000 : 署名されていないアセンブリを /codebase を使用して登録すると、同じコンピュータにインストールされるその他のアプリケーションとの競合が生じる可能性があります。/codebase スイッチは署名されたアセンブリのみに使用できます。アセンブリに厳密な名前を付けて、再登録してください。型は正常に登録されました。アセンブリは 'C:\○○○\○○○\○○○.tlb' にエクスポートされ、タイプ ライブラリは正常に登録されました。」

▼質問
アセンブリって何だ?

▼回答
署名のため機能らしい。

アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html方法 : アセンブリに署名する (Visual Studio)
http://msdn2.microsoft.com/ja-jp/library/ms247123(VS.80).aspx

とりあえず実行してみたら下記のエラーが発生した。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」

下記のサイトの手順で「<新規作成>」から適当なキー・ファイル「○○○_StrongName_Key」を
指定してパスワード無しでやったらうまく登録できたぞ!!ヤッター!!

アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html

動かしてみたら今度はオートメーションエラーが発生!(;_;)...

パスが通っているところに移動して登録したら動いたが・・・。下記のエラーでうまくいかない。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」

ここで、実験終了!この方法はとりあえず諦める事にしました。

Visual Basic 6.0 から Visual Basic .NET または Visual Basic 2005 アセンブリを呼び出す方法
http://support.microsoft.com/default.aspx?scid=kb;ja;817248

↑このサイトを読んでいたら通常のクラスとCOMクラスの作成方法に違いがあることが判明!

このサイトの説明文も一部間違っているが。。。。(重要なところ!)
9.[テンプレート] で [クラス] をクリックします。
→9.[テンプレート] で [COMクラス] をクリックします。

もう一度とトライしてみたがまたもエラーでした。でもエラーの内容が変わった。
「"ActiveX コンポーネントはオブジェクトを作成できません。"」



■参考サイト
プログラミング色々
http://7ujm.net/index.html
Microsoft Win32 と Microsoft .NET Framework API との対応
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx
Visual Basic .NET How-To インデックス
http://www.microsoft.com/japan/msdn/howto/howtoVB.asp

金曜日, 4月 27, 2007

[VC++]メモ

▼質問
UNREFERENCED_PARAMETERって何?returnの後に記述している?何だ!

▼回答
UNREFERENCED_PARAMETERマクロらしい。引数として受け取った変数を1度も使用しなかった
ときにでるコンパイル時の警告を回避するためのものらしい。

土曜日, 4月 21, 2007

[VBA]Validation

「アプリケーション定義またはオブジェクト定義のエラーです。」のエラーがでる。
.Validation.Add Type:=Excel.XlDVType.xlValidateDecimal, AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, Operator:=Excel.XlFormatConditionOperator.xlGreater, Formula1:="-999999999"


xlValidateCustom:任意の数式を使用してデータを検証します。
xlValidateDate:日付値
xlValidateDecimal:数値
xlValidateInputOnly:値が変更された場合のみ検証を行います。
xlValidateList:指定したリストに値が存在する必要があります。
xlValidateTextLength:文字列の長さ
xlValidateTime:時間値
xlValidateWholeNumber:全数値


xlValidAlertInformation:情報アイコン
xlValidAlertStop:停止アイコン
xlValidAlertWarning:警告アイコン

▼回答
どこでもいいからselectしないと駄目みたい。うまくいくときもあるのはよくわからない?

http://www.keep-on.com/excelyou/2002lng4/200208/02080364.txt

土曜日, 4月 14, 2007

[VBA]

変数宣言の強制Option Explicit
配列インデックスの下限値を指定Option Base [01]
デフォルトは1
文字列比較の優先順位を指定Option Compare [TextBinary]
デフォルトはBinaryBinary A < B < E < Z < a < b < e < z
Text (A=a) < (B=b) < (E=e) < (Z=z)

金曜日, 4月 13, 2007

[VB.NET]CheckedListBox

Public Sub setCheckedListBoxSelected(ByRef oCListBox As CheckedListBox)
Dim value As Boolean = oCListBox.GetItemChecked(oCListBox.SelectedIndex) 'oCListBox.SetItemChecked(oCListBox.SelectedIndex, CBool(IIf(value.Equals(True), False, True))) oCListBox.SetItemCheckState(oCListBox.SelectedIndex, CType(IIf(value.Equals(True), CheckState.Unchecked, CheckState.Checked), System.Windows.Forms.CheckState)) If (oCListBox.SelectedIndex >= 0) Then oCListBox.SetSelected(oCListBox.SelectedIndex, False) oCListBox.Show()
End Sub

気になる記事

http://itpro.nikkeibp.co.jp/article/COLUMN/20070410/267878/?ST=biz_shinzui
バグの発生率を示す数式があるという話だった。開発工数や進捗の度合い、プログラムの本数などに基づき、ある数式で計算するとバグの発生率が算出でき、実際に発生するバグとの誤差は5%の範囲に収まるという。
プログラムの品質は、作成に時間がかかった部分があまり高くない

火曜日, 4月 10, 2007

[VB.NET]Option Strict OnとOffの比較(OO4O接続)

■OO4Oを使用したデータベース接続方法でOption StrictをOnにした時とOffにした時での
比較をしてみる。

Option StrictをOffにしたとき

Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer

oraDynaset = oraDb.CreateDynaset("select * from table", 0&)
If oraDynaset.RecordCount > 0 Then
fieldValue = oraDynaset.Fields("FIELDNAME").Value
End If

Option StrictをONにすると次のようになる。

Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer

oraDynaset = CType(oraDb.CreateDynaset("select * from table", 0&), OracleInProcServer.OraDynaset)
If oraDynaset.RecordCount > 0 Then
fieldValue = CInt(DirectCast(DirectCast(oraDynaset.Fields, OracleInProcServer.OraFields)("FIELDNAME"), _ OracleInProcServer.OraField).Value)
End If

比較してみるとOption StrictはOffにした方が良さそうである。(^^)v

■参考サイト
KEN's .NET [特集4] Option Strict Onのススメ
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp04_OptionStrictOn.html

土曜日, 4月 07, 2007

[VB.NET]メモ

メンバ=定数=等価なキャラクタ文字:説明
CrLf=vbCrLf=Chr(13) + Chr(10):キャリッジ リターン文字とライン フィード文字の組み合わせ。
Cr=vbCr=Chr(13):キャリッジ リターン文字。
Lf=vbLf=Chr(10):ライン フィード文字。
NewLine=vbNewLine=Chr(13) + Chr(10):改行文字。
Tab=vbTab=Chr(9):タブ文字。

Option Strict Onの時、以下の項目が禁止され、ビルド時にエラーになる。
・明示的なキャスト演算子を使用しない縮小変換
・遅延バインディング
・Object 型での=、<>、TypeOf~Is~、およびIs以外の演算
・宣言でのAs句の省略

■関連サイト
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_13/vbnet2_13_01.html

土曜日, 3月 03, 2007

[Java]SQL関連

▼質問
NUMBER型のフィールドにnullを指定するにはどうすればいいの?

▼回答
setStringメソッドでnullを指定するか、setNullメソッドでTypes.NUMERIC を指定すればできるよ。

PreparedStatement pstmt = null;
pstmt.setString( parameterIndex, null );
pstmt.setNull( parameterIndex, Types.NUMERIC );

金曜日, 2月 16, 2007

[Java]ポップアップメニュー(JPopupMenu)

▼質問
ポップアップメニューを、タイトル名と選択メニューの間にセパレーターを挟んだ感じで表示したいんだ。
どうしたらいいんだ?

▼回答
サンプルだよ!参考にしてくれ!!表示したいコンポーネントのマウスクリックイベントに追加すれば
右クリックで表示されるよ。

if ( javax.swing.SwingUtilities.isRightMouseButton(e) ) {
// 右クリック時の処理
JPopupMenu popupMenu = new JPopupMenu();

JLabel label = new JLabel( "タイトル");
label.setAlignmentX( JPopupMenu.CENTER_ALIGNMENT );
label.setHorizontalAlignment( JLabel.CENTER );
label.setFont( new java.awt.Font( "Monospaced", java.awt.Font.BOLD, 14 ) );
popupMenu.add( label );

JSeparator[] separator = new JSeparator[2];
for ( int i = 0 ; i < separator.length ; i++ ) {
separator[i] = new JSeparator( SwingConstants.HORIZONTAL );
popupMenu.add( separator[i] );
}

JMenuItem menuItem = new JMenuItem( "選択メニュー" );
menuItem.setHorizontalAlignment( JLabel.LEFT );
menuItem.setFont( new java.awt.Font( "Monospaced", java.awt.Font.PLAIN, 12 ) );
menuItem.setActionCommand( "選択メニュー" );
popupMenu.add( menuItem );

menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
// マウスがクリックされたときのイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mousePressed( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが押されると呼ばれるイベント処理

}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseReleased( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが放されると呼ばれるイベント処理

}
});

if ( e.isPopupTrigger() ) {
popupMenu.show( e.getComponent(), e.getX(), e.getY() );
}

} else if( javax.swing.SwingUtilities.isMiddleMouseButton(e) ) {
// 中ボタンクリック時の処理

} else if( javax.swing.SwingUtilities.isLeftMouseButton(e) ) {
// 左クリック時の処理

}

木曜日, 2月 15, 2007

[Java]コンポーネントの操作不可

■JButton
  JButton.setEnabled( false );

■JTextField
  JTextField.setEditable( false );

■JSpinner
((JSpinner.DefaultEditor)JSpinner.getEditor()).getTextField().setEditable( false );
JSpinner.getComponent(0).setEnabled( false );
JSpinner.getComponent(1).setEnabled( false );

イベント処理でチェックが必要!
JSpinner.getComponent(1).addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
if ( !evt.getComponent().isEnabled() ) return;
}
});

■JCheckBox
  JCheckBox.setEnabled( false );

■JFormattedTextField
  JFormattedTextField.setEditable( false );

[Java]is関連

■isValidメソッド
 レイアウトの処理が済んでいるかチェックする.

■isShowingメソッド
  オブジェクトが表示されているかをチェックする.

水曜日, 2月 07, 2007

[Java]ファイル入出力ストリーム関連

public int FileRead( String fname ) {
int ret = 0;
BufferedReader reader = null;

if ( fname == null ) return -1;

try {
reader = new BufferedReader( new FileReader( fname ) );
String line = null;
while ( (line = reader.readLine()) != null ) {
System.out.println( line );
ret++;
}
}
catch ( FileNotFoundException e ) {
System.out.println( "ファイルが見つかりません。" );
ret = -2;
}
catch ( IOException e ) {
System.out.println( "入出力エラーです。" );
ret = -3;
}
finally {
try {
if ( reader != null ) reader.close();
}
catch ( Exception e ) {}
}
return ret;
}

火曜日, 1月 16, 2007

[JavaScript]

currentElementNo = 0;
function nextElement( keyCode ) {
if (keyCode == 13) {
currentElementNo++;
currentElementNo %= document.formA.elements.length;
if ( document.formA.elements[currentElementNo].type != 'button') {
document.formA.elements[currentElementNo].focus();
} else {
currentElementNo++;
}
}
}

HTML部
'<'body onkeydown="nextElement(event.keyCode); return true;">

土曜日, 1月 13, 2007

[Java]メモ4

▼質問
splitメソッドでピリオドを指定すると配列が返ってこないんだ?どうやって指定すればいいの?!
ピリオドは、プログラムで重要な意味を持っているのはわかるんだが・・・。
String value = "1.2";
String[] splits = value.split( "." );

▼回答
¥マークを頭に二つ付ければよいようだ。
String value = "1.2";
String[] splits = value.split( "¥¥." );

■参考サイト
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19125&forum=12&3

▼質問
ラベルをボタンスタイルに表示することは可能なの?

▼回答
可能だよ!
setBorderメソッドを使えばボタンをしたラベルが作成できるんだ。
クリックされたイベントもaddMouseListenerで登録すればボタン(ラベル)がクリックした時の
処理もすることができるんだ。

下記のプログラムは、種別によってスタイルを変えたいときに使用できる.
ボタン(ラベル)の上にきた時に種別1で呼び出してボタンが選択された状態にするのに使用できる.
private void setLabelStyle( JLabel label, int kind ) {

if ( kind == 1 ) {
label.setBorder( new CompoundBorder( new LineBorder( Color.RED, 3 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
else {
label.setBorder( new CompoundBorder( new LineBorder( Color.BLACK, 2 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}

}

▼質問
「-Infinity」って何だ?

▼回答
「Infinity」は、無限大という文字列らしい。
正の無限大は「Infinity」で、負の無限大は「-Infinity」となるらしい。

■参考サイト
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Double.html