2010年03月05日

MySQL:リモートから接続する

ubuntu8.0.4 MySQL5.0.51-a3
MySQLにリモートから接続するには、"bind-address"をローカルアドレスにする。
また接続するPCのユーザーを作成する。

/etc/mysql/my.cnf
bind-address=192.168.0.1

grant all on DB名.* to ユーザー名@'192.168.0.2' identified by 'パスワード';
PCの指定にはワイルドカードが使える。
ex.)192.168.0.%


posted by 忘却の達人 at 08:51| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする

IIS:Responseヘッダーのcharsetを設定する

IISでhtml(htm)のMIMEタイプの設定で、charsetも一緒に指定すると、Responseヘッダーのcharsetを設定できる。

text/html;charset=utf-8
posted by 忘却の達人 at 08:49| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2010年01月28日

Delphi:xmlをGridに読み込む

DelphiでxmlファイルをGridに読み込む。

type
	TxmlForm = class(TForm)
		xd: TXMLDocument;
    Grid: TStringGrid;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    OpenButton: TButton;
    SaveButton: TButton;
    procedure OpenButtonClick(Sender: TObject);
    procedure SaveButtonClick(Sender: TObject);
	private
		{ Private 宣言 }
		FNodeName: string;
		FRowIndex,
		FColIndex: Integer;
		procedure AddChildren(xmlNode: IXMLNode);
	public
		{ Public 宣言 }
	end;

var
	xmlForm: TxmlForm;

implementation

{$R *.dfm}

procedure TxmlForm.OpenButtonClick(Sender: TObject);
var
	i, j: Integer;
begin
	if not OpenDialog.Execute then Exit;
	for i := 0 to Grid.ColCount - 1 do
		Grid.Cols[i].Clear;
	Grid.RowCount := 2;
	FRowIndex := 1;
	FColIndex := 1;
	for i := 0 to OpenDialog.Files.Count - 1 do
	begin
		xd.FileName := OpenDialog.Files[i];
		xd.Active := True;
		AddChildren(xd.Node);
		for j := 0 to Grid.ColCount - 1 do
			if Grid.Cells[j, FRowIndex] = '' then
				Grid.Cells[j, FRowIndex] := Grid.Cells[j, FRowIndex - 1];
		Grid.Cells[0, FRowIndex] := IntToStr(FRowIndex);
	end;
	Grid.ColCount := FColIndex;
	Grid.RowCount := FRowIndex + 1;
end;

procedure TxmlForm.SaveButtonClick(Sender: TObject);
var
	Row, Col: Integer;
	s: string;
begin
	if not SaveDialog.Execute then Exit;

	s := '';
	for Row := 0 to Grid.RowCount - 1 do
	begin
		for Col := 1 to Grid.ColCount - 1 do
			s := s + AnsiQuotedStr(Grid.Cells[Col, Row], '"') + ',';
		s[Length(s)] := #13;
		s := s + #10;
	end;
	StrToFile(s, SaveDialog.FileName, nil);
end;

procedure TxmlForm.AddChildren(xmlNode: IXMLNode);
var
	i, j, ColIndex: Integer;
	s: string;
begin
	for i := 0 to xmlNode.ChildNodes.Count - 1 do
	begin
		if xmlNode.ChildNodes[i].NodeType = ntText then
		begin
			s := xmlNode.ChildNodes[i].NodeValue;
			ColIndex := Grid.Rows[0].IndexOf(FNodeName);
			if ColIndex < 0 then
			begin
				Grid.Cells[FColIndex, 0] := FNodeName;
				ColIndex := FColIndex;
				Inc(FColIndex);
			end;
			if Grid.Cells[ColIndex, FRowIndex] = '' then
				Grid.Cells[ColIndex, FRowIndex] := s
			else
			begin
				for j := 0 to Grid.ColCount - 1 do
					if Grid.Cells[j, FRowIndex] = '' then
						Grid.Cells[j, FRowIndex] := Grid.Cells[j, FRowIndex - 1];
				Grid.Cells[0, FRowIndex] := IntToStr(FRowIndex);
				Inc(FRowIndex);
				Grid.Cells[ColIndex, FRowIndex] := s
			end;
		end
		else
		begin
			FNodeName := xmlNode.ChildNodes[i].NodeName;
		end;
		AddChildren(xmlNode.ChildNodes[i]);
	end;
end;
posted by 忘却の達人 at 22:10| Comment(0) | TrackBack(0) | Delphi | このブログの読者になる | 更新情報をチェックする

2009年04月16日

vba:クリップボードへの読み書き

クリップボードで読み書き行うためだけに↓のようなAPIごりごりのコードは、なんかイヤになったんで、COMオブジェクトを作ってスッキリさせた。
Set cls = CreateObject("clisou.Clipboard")
WScript.Echo cls.Text
Set cls = Nothing

こんな感じでちょー簡単。このCOMオブジェクトはこちらのページへ


vbaでクリップボードへのテキストの読み書きを行う関数。

Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal dwBytes As Long) As Long
Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long

Public Const CF_TEXT = 1
Public Const GMEM_MOVEABLE = 2
Public Const MAXSIZE = 1048576

Function GetClipboardText()
Dim ClipHandle As Long
Dim ClipAddr As Long
Dim s As String
    If OpenClipboard(0) = 0 Then
        MsgBox "クリップボードが開きません"
        Exit Function
    End If
    ClipHandle = GetClipboardData(CF_TEXT)
    If IsNull(ClipHandle) Then
        MsgBox "クリップボードのハンドルが取得できません"
        GoTo exit_proc
    End If
    ClipAddr = GlobalLock(ClipHandle)
    If IsNull(ClipAddr) Then
        MsgBox "クリップボードメモリがロックできません"
        GoTo exit_proc
    End If
    s = String(lstrlen(ClipAddr) + 1, vbNullChar)
    lstrcpy s, ClipAddr
    GlobalUnlock ClipHandle
    GetClipboardText = Mid(s, 1, InStr(1, s, vbNullChar, 0) - 1)
exit_proc:
    CloseClipboard
End Function

Sub SetClipboardText(ByVal Text As String)
Dim ClipHandle As Long
Dim ClipAddr As Long
    If OpenClipboard(0) = 0 Then
        MsgBox "クリップボードが開きません"
        Exit Sub
    End If
    EmptyClipboard
    ClipHandle = GlobalAlloc(GMEM_MOVEABLE, LenB(StrConv(Text, vbFromUnicode)) + 1)
    If IsNull(ClipHandle) Then
        MsgBox "メモリが確保できません"
        GoTo exit_proc
    End If
    ClipAddr = GlobalLock(ClipHandle)
    If IsNull(ClipAddr) Then
        MsgBox "メモリがロックできません"
        GoTo exit_proc
    End If
    lstrcpy ClipAddr, Text
    GlobalUnlock ClipHandle
    SetClipboardData CF_TEXT, ClipAddr
    GlobalFree ClipHandle
exit_proc:
    CloseClipboard
End Sub
posted by 忘却の達人 at 07:23| Comment(0) | TrackBack(0) | vba | このブログの読者になる | 更新情報をチェックする

2008年10月26日

Delphi:IEコントロールからドキュメントオブジェクトへの参照

IEコントロールからドキュメントオブジェクトへのアクセスは、型キャストや"item"プロパティを通してのオブジェクトへの参照が面倒臭い。
簡略化できるクラスか関数を作るべし。

ShowMessage((((WebBrowser1.document as IHTMLDocument2)
.Forms.item('formname',0) as IHTMLFormElement)
.item('editname1',0) as IHTMLElement)
.getAttribute('value',0));


と思ったら、レイトバインディングで解決。

var
doc: OleVariant;
begin
doc := WebBrowser1.Document;
ShowMessage(doc.form.element.value);
end;
posted by 忘却の達人 at 12:01| Comment(0) | TrackBack(0) | Delphi | このブログの読者になる | 更新情報をチェックする

2008年04月12日

SQL Server:リンクテーブルで追加しレコードにロックがかかる

SQL Serverへのリンクテーブルで追加した場合にロックが掛かる筈のない状況なのにレコードにロックがかかる。

テーブルにbitの項目があり初期値が設定されてないと何故かロックが掛かるので、初期値を設定しておく。
posted by 忘却の達人 at 11:07| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

2008年01月19日

VBA:IEに表示されているページの内容を取得する

VBAでIEに表示されてるページを取得/設定する方法。
IEのWindowオブジェクトを取得すれば、Documentプロパティでページの内容を取得/設定できる。

Dim sh As Object
Dim ie As Object
Dim inp As Variant
Dim i As Long
Dim cnt As Long
Set sh = CreateObject("Shell.Application")
For Each ie In sh.Windows
If ie.FullName Like "*\IEXPLORE.EXE" Then
Exit For
End If
Next
If ie Is Nothing Then
Set sh = Nothing
Exit Sub
End If
cnt = ie.Document.all.tags("input").length
For i = 0 To cnt - 1
With ie.Document.all.tags("input")(i)
If .Name = "q" Then
Googleの検索文字 = .Value
Exit For
End If
End With
Next
Set ie = Nothing
Set sh = Nothing
posted by 忘却の達人 at 07:05| Comment(0) | TrackBack(0) | vba | このブログの読者になる | 更新情報をチェックする

2007年12月29日

VMWare:ゲストOSの仮想HDDの容量を増やす

VMWareでゲストOSの仮想HDDの容量を増やすコマンド。

(フルパス)vmware-vdiskmanager -x 10GB (フルパス)mydisk.vmdk
posted by 忘却の達人 at 07:29| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2007年12月28日

VBA:http接続

"MSXML2.xmlhttp"オブジェクトを使うとVBAからhttpを利用できる。

Dim xmlhttp As Object
Set xmlhttp = CreateObject("MSXML2.xmlhttp")
xmlhttp.Open "GET", "http://アドレス/", False
xmlhttp.Send
Debug.Print xmlhttp.ResponseText
posted by 忘却の達人 at 04:10| Comment(0) | TrackBack(0) | vba | このブログの読者になる | 更新情報をチェックする

2007年12月22日

SQL-Serverの日付時間型で日付+時刻でグループ化をすると日付がずれる

SQL-Serverのテーブルに日付時間型の項目を2つ持つ。
Accessでリンクして一方に日付のみを、もう一方に時刻のみを入力する。
クエリーで日付+時刻の項目を作ってその項目でグループ化をすると日付が2日前になる。
(グループ化しなければ正しく表示される。)

これはAccessの日付時間型が1899/12/30から始まるのに対し、SQL-Serverの日付時間型が1900/01/01から始まることに起因してるっぽい。
恐らくグループ化しない場合はクライアント側で演算し、グループ化した場合はSQL-Server側で演算して、その結果をグループ化してると思われる。

対策としては日付+時刻-Fix(時刻)として、時刻の日付部分を強制的に0にすれば良い。

※あくまでmdbでの話であって、SQL-Serverにシームレスに接続するAccessプロジェクトではこの現象は起こらない。
あとExcelでも同様の現象は起こる。(もしかしてODBCドライバの問題かも)
posted by 忘却の達人 at 18:53| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。