実際に業務で使う(かもしれない)DBを想定し,独自のDBを作成して下さい.
まずは,どの業種向けの,どのような種類のDBなのかを考えてください.
そして,作成するDBの方向性が決まったら,まずはExcelを用いてDBの原型となる表を作成します.
表が作成出来たら正規化を行い,(リレーションを考えながら)複数の表に分割します.
後はACCESS上でテーブル~クエリ~フォーム・レポートを順番に作成していきます.
テーブル構成・クエリについては,Excelで作業している段階である程度確定しますが
フォーム・レポートについては,実際の業務の現場でどのように使われるかを想像しながら
作り込む事になりますので,皆さんの腕の見せ所です.
例)
・小売店向けの販売管理DB
→単なる集計表ではなく,消費税増税対応とすることで,使い勝手の良いDBとする.
・自分専用勤怠管理DB
→出席管理DBの応用版.勤怠の情報から,利用可能有給日数を表示.
・年賀状送付先管理DB
→毎年年末になると頭が痛い,年賀状の宛名書き.DBを使うことで常に最新の住所情報を使用.
2013年3月13日水曜日
2013年3月12日火曜日
追加課題(3/12)
追加課題1
「Q空き状況一覧」クエリに宿泊税(*1)込み金額を表示せよ.
宿泊税込み金額
追加課題2
「Q空き状況一覧」クエリにサービス料(*2),消費税(*3)込み金額を表示せよ.
宿泊税
サービス料
消費税
税込金額
(*1)本来宿泊税は東京都限定だが,今回は全国で一律に導入されているとする.宿泊税は宿泊料10,000円未満は0円,宿泊料10,000円以上15,000円未満は100円,15,000円以上は200円である.
(*2)サービス料は宿泊料の1割とする.
(*3)消費税は5%とする.
追加課題3
「F予約登録」フォーム,「R空き状況一覧」レポートに,税込金額を表示せよ.
「Q空き状況一覧」クエリに宿泊税(*1)込み金額を表示せよ.
宿泊税込み金額
宿泊税込み金額: IIf([基本料金]>=15000, [基本料金]+200, IIf([基本料金]>=10000, [基本料金]+100, [基本料金]))
追加課題2
「Q空き状況一覧」クエリにサービス料(*2),消費税(*3)込み金額を表示せよ.
宿泊税
宿泊税: IIf([基本料金]>=15000, 200, IIf([基本料金]>=10000, 100, 0))
サービス料
サービス料:[基本料金]*0.1
消費税
消費税:[基本料金]*0.05
税込金額
税込金額:[基本料金]+[宿泊税]+[サービス料]+[消費税]
(*1)本来宿泊税は東京都限定だが,今回は全国で一律に導入されているとする.宿泊税は宿泊料10,000円未満は0円,宿泊料10,000円以上15,000円未満は100円,15,000円以上は200円である.
(*2)サービス料は宿泊料の1割とする.
(*3)消費税は5%とする.
追加課題3
「F予約登録」フォーム,「R空き状況一覧」レポートに,税込金額を表示せよ.
ラベル:
[2012]ExcelVBA
2013年3月6日水曜日
追加課題(3/6)
消費税増税に対応出来るようにせよ.
=Int([本体価格]*0.05)↓
=IIf([売上日]>="2014/04/01", Int([本体価格]*0.08), Int([本体価格]*0.05))
ラベル:
[2012]DB演習
2013年3月5日火曜日
追加課題(3/5)
P139-165 メインサブフォーム
現状では「F売上明細」中の消費税計算が5%固定になっているが,消費税率が8%,10%に増税された場合,DBとしてどのような対応が考えられるのか?
みなさん自身の判断で,増税対応を行ってください.
1.時期が来たら使用するDB自体を切り替える(切り替え後のDBは消費税率が8%,もしくは10%)
1-1.消費税率が切り替わるまでは現状のDBを使用し,消費税率が切り替わったら消費税率の計算部分の数字を0.05から0.08に書き換えたDBに変更する.
2.DB内で動的に消費税率を切り替えるようにする
2-1.IIf等の関数を用いてその場で適切な消費税を計算
「F売上明細」(サブフォーム)側では売上日が分からず,適用する消費税率が決められないので,「F売上伝票」(メインフォーム)側で消費税率を計算する.
「T消費税率」テーブルを新規で作成し,売上日を用いて「T消費税率」テーブル中の適用する消費税率を選択肢,税率計算で利用する.
現状では「F売上明細」中の消費税計算が5%固定になっているが,消費税率が8%,10%に増税された場合,DBとしてどのような対応が考えられるのか?
みなさん自身の判断で,増税対応を行ってください.
1.時期が来たら使用するDB自体を切り替える(切り替え後のDBは消費税率が8%,もしくは10%)
1-1.消費税率が切り替わるまでは現状のDBを使用し,消費税率が切り替わったら消費税率の計算部分の数字を0.05から0.08に書き換えたDBに変更する.
=Int([合計金額]*0.05)↓
=Int([合計金額]*0.08)
2.DB内で動的に消費税率を切り替えるようにする
2-1.IIf等の関数を用いてその場で適切な消費税を計算
「F売上明細」(サブフォーム)側では売上日が分からず,適用する消費税率が決められないので,「F売上伝票」(メインフォーム)側で消費税率を計算する.
=IIf([売上日]>="2014/04/01", "増税後", "増税前")↓
=IIf([売上日]>="2014/04/01", Int([売上明細].[Form]![合計金額]*0.08), Int([売上明細].[Form]![合計金額]*0.05))2-2.時期による消費税率の違いを記した「T消費税率」のようなテーブルを新規に作成し,消費税計算を行う際は都度参照する.
「T消費税率」テーブルを新規で作成し,売上日を用いて「T消費税率」テーブル中の適用する消費税率を選択肢,税率計算で利用する.
ラベル:
[2012]DB演習
2013年2月21日木曜日
追加課題(2/21)
出席日数から出席率を自動的に計算するアクセスのDBを作成する.
1.Excelにて,資料を参考に,DBの設計を行う.
2.Excel上で用意した複数の「テーブル」を,アクセス上に作成
アクセスファイルはこちら.
3.必要な項目を表示・計算するような「クエリ」を作成
4.日々の入力作業・確認作業が簡単に行えるような,使いやすい「フォーム」を作成
各テーブル,クエリ,フォーム,レポートについては,こちらのファイル(ver.2)を参照のこと.
必要出席数の算出は,こちらのファイル(ver.3)を参照のこと.
レポート画面まで含めたサンプルは,こちらのファイル(ver.5).
当日分出欠入力フォーム,今後一週間のスケジュールレポートを含めた最終的なサンプルは,こちらのファイル(ver.6).
1.Excelにて,資料を参考に,DBの設計を行う.
2.Excel上で用意した複数の「テーブル」を,アクセス上に作成
アクセスファイルはこちら.
3.必要な項目を表示・計算するような「クエリ」を作成
4.日々の入力作業・確認作業が簡単に行えるような,使いやすい「フォーム」を作成
各テーブル,クエリ,フォーム,レポートについては,こちらのファイル(ver.2)を参照のこと.
必要出席数の算出は,こちらのファイル(ver.3)を参照のこと.
レポート画面まで含めたサンプルは,こちらのファイル(ver.5).
当日分出欠入力フォーム,今後一週間のスケジュールレポートを含めた最終的なサンプルは,こちらのファイル(ver.6).
ラベル:
[2012]DB演習
2013年2月20日水曜日
追加課題(2/20)
P269
総合問題2 追加課題
1.「Q受注リスト」に「税込金額」フィールドを追加せよ.
ただし,税率は一律5%とする.
2.軽減税率導入に対応出来るようにせよ.
ただし,軽減税率は8%,それ以外の税率は10%とする.
今回の商品分類の中では,食料品(ハム,フルーツ,菓子,缶詰,茶,ジュース)のみ軽減税率の対象とする.
2-1.「T分類リスト」に「税率」フィールドを追加.
2-2.「Q受注リスト」の「税込金額」フィールドで,2-1で追加した税率を使って,税込金額を計算.
3.受注日により,自動的に税率を変更できるようにせよ.
3-1.まずは受注日によって処理を分岐し,表示するメッセージを切り替える.
3-2.メッセージが思った通りに表示できたら,メッセージの部分を税込金額の計算式に置き換える.
総合問題2 追加課題
1.「Q受注リスト」に「税込金額」フィールドを追加せよ.
ただし,税率は一律5%とする.
税込金額: [金額]*(1.05)
2.軽減税率導入に対応出来るようにせよ.
ただし,軽減税率は8%,それ以外の税率は10%とする.
今回の商品分類の中では,食料品(ハム,フルーツ,菓子,缶詰,茶,ジュース)のみ軽減税率の対象とする.
2-1.「T分類リスト」に「税率」フィールドを追加.
2-2.「Q受注リスト」の「税込金額」フィールドで,2-1で追加した税率を使って,税込金額を計算.
税込金額: [金額]*(1+[税率]/100)
3.受注日により,自動的に税率を変更できるようにせよ.
3-1.まずは受注日によって処理を分岐し,表示するメッセージを切り替える.
受注日判定:IIf( Format([受注日],"yyyy/mm/dd")>="2015/10/01", "2015/10/1以降", "2015/10/1以前" )
3-2.メッセージが思った通りに表示できたら,メッセージの部分を税込金額の計算式に置き換える.
税込金額(受注日考慮):IIf( Format([受注日],"yyyy/mm/dd")>="2015/10/01", [金額]*(1+[税率]/100), [金額]*(1+5/100) )
ラベル:
[2012]DB演習
2013年2月8日金曜日
追加課題(2/8)
今後消費税が以下のように変化すると仮定する.
※軽減税率は,食料品等生活必需品等が対象となるようです.
1.税抜金額を表示
2.標準税率の場合の税込金額を表示
3.軽減税率の場合の税込金額を表示
4.税率種別の表示
5.税率種別毎に税込金額を表示
6.リレーションを結んでいないテーブルのデータを参照
7.2015/10/1以降の消費税率を,税率フィールドの項目により自動的に判別し表示
8.売上日が2014/4/1以降か判別する
9.売上日が2015/10/1以降の場合も判別する
10.売上日・商品毎に適用される税率を表示
11.売上日・商品毎に適用される税率をテーブルから引っ張ってきて表示
(テーブルから税率を引っ張ってくることによって,急な税率変更にも対応出来るようにする)
12.売上日・商品毎に税率を適用し,実際の税込金額を表示
| 標準税率 | 軽減税率 | |
| 現在 | 5% | - |
| 2014/04/01 - | 8% | - |
| 2015/10/1 | 10% | 8% |
1.税抜金額を表示
税抜金額: [単価]*[数量]
2.標準税率の場合の税込金額を表示
標準税率税込金額: [単価]*[数量]*1.05
3.軽減税率の場合の税込金額を表示
軽減税率税込金額: [単価]*[数量]*1.08
4.税率種別の表示
税率種別: IIf( [税率]='軽減', "軽減税率", "標準税率" )
5.税率種別毎に税込金額を表示
税込金額: IIf( [税率]='軽減', [単価]*[数量]*1.05, [単価]*[数量]*1.08 )
6.リレーションを結んでいないテーブルのデータを参照
税率種別(標準): DLookUp( "[T消費税率].[消費税率]", "T消費税率", "[ID] = '3'" )
税率種別(軽減): DLookUp( "[T消費税率(軽減)].[消費税率]", "T消費税率(軽減)", "[ID] = '3'" )
7.2015/10/1以降の消費税率を,税率フィールドの項目により自動的に判別し表示
税込金額: IIf(
[税率]='軽減',
DLookUp("[T消費税率(軽減)].[消費税率]","T消費税率(軽減)","[ID] = '3'"),
DLookUp("[T消費税率].[消費税率]","T消費税率","[ID] = '3'")
)
8.売上日が2014/4/1以降か判別する
売上日判別1: IIf( Format([売上日],"yyyy/mm/dd")>="2014/04/01", "2014/4/1以降", "2014/4/1以前" )
9.売上日が2015/10/1以降の場合も判別する
売上日判別2: IIf( Format([売上日],"yyyy/mm/dd")>="2014/04/01", IIf( Format([売上日],"yyyy/mm/dd")>="2015/10/01", "2015/10/1以降", "2014/4/1~2015/9/30" ), "2014/4/1以前" )
10.売上日・商品毎に適用される税率を表示
適用税率1: IIf( Format([売上日],"yyyy/mm/dd")>="2014/04/01", IIf( Format([売上日],"yyyy/mm/dd")>="2015/10/01", IIF( [税率]="軽減", "8%", "10%" ), "8%" ), "5%" )
11.売上日・商品毎に適用される税率をテーブルから引っ張ってきて表示
(テーブルから税率を引っ張ってくることによって,急な税率変更にも対応出来るようにする)
適用税率2: IIf(
Format([売上日],"yyyy/mm/dd")>="2014/04/01",
IIf(
Format([売上日],"yyyy/mm/dd")>="2015/10/01",
IIF([税率]="軽減",
DLookUp("[T消費税率(軽減)].[消費税率]","T消費税率(軽減)","[ID] = '3'"),
DLookUp("[T消費税率].[消費税率]","T消費税率","[ID] = '3'")
),
IIF([税率]="軽減",
DLookUp("[T消費税率(軽減)].[消費税率]","T消費税率(軽減)","[ID] = '2'"),
DLookUp("[T消費税率].[消費税率]","T消費税率","[ID] = '2'")
)
),
IIF([税率]="軽減",
DLookUp("[T消費税率(軽減)].[消費税率]","T消費税率(軽減)","[ID] = '1'"),
DLookUp("[T消費税率].[消費税率]","T消費税率","[ID] = '1'")
)
)
12.売上日・商品毎に税率を適用し,実際の税込金額を表示
税込金額(売上日考慮): IIf(
Format([売上日],"yyyy/mm/dd")>="2014/04/01",
IIf(
Format([売上日],"yyyy/mm/dd")>="2015/10/01",
IIF([税率]="軽減",
[単価]*[数量]*0.01*(100+DLookUp("[T消費税率(軽減)].[消費税率]","T消費税率(軽減)","[ID] = '3'")),
[単価]*[数量]*0.01*(100+DLookUp("[T消費税率].[消費税率]","T消費税率","[ID] = '3'"))
),
IIF([税率]="軽減",
[単価]*[数量]*0.01*(100+DLookUp("[T消費税率(軽減)].[消費税率]","T消費税率(軽減)","[ID] = '2'")),
[単価]*[数量]*0.01*(100+DLookUp("[T消費税率].[消費税率]","T消費税率","[ID] = '2'"))
)
),
IIF([税率]="軽減",
[単価]*[数量]*0.01*(100+DLookUp("[T消費税率(軽減)].[消費税率]","T消費税率(軽減)","[ID] = '1'")),
[単価]*[数量]*0.01*(100+DLookUp("[T消費税率].[消費税率]","T消費税率","[ID] = '1'"))
)
)
ラベル:
[2012]DB演習
2013年1月29日火曜日
追加課題(1/29)
月別販売データモジュール内の新規シート関数において,
月の入力で1~12以外の入力があった場合,
処理を中断するようにせよ.
→tuki変数の値が1~12の範囲内か否か?
月の入力で1~12以外の入力があった場合,
処理を中断するようにせよ.
→tuki変数の値が1~12の範囲内か否か?
Sub 新規シート()
Dim tuki As String
ActiveSheet.Copy after:=ActiveSheet
Range("C6:D15,F6:F15,J6:J15").Select
Selection.ClearContents
Range("A1").Select
tuki = InputBox("月を半角の数字で入力してください", "新規シート作成")
If tuki = "" Then
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Else
If tuki < 0 Or tuki > 12 Then
MsgBox "月は1~12の範囲で入力してください"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Else
On Error Resume Next
ActiveSheet.Name = tuki & "月度"
If Err.Number = 1004 Then
MsgBox "シート名が重複します"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
End If
End If
End Sub
ラベル:
[2012]ExcelVBA
2013年1月23日水曜日
追加課題(1/23)
シート「6月度」(販売一覧)の販売データを入力するプログラムにおいて,キャンセルボタンを押すことで処理を中断できるようにせよ.
Sub 入力()
Dim hiduke As String
ActiveWindow.NewWindow
ActiveWindow.NewWindow
Windows.Arrange ArrangeStyle:=xlTiled
Windows("第6章.xlsm:2").Activate
Sheets("得意先リスト").Select
Windows("第6章.xlsm:1").Activate
Sheets("商品リスト").Select
Windows("第6章.xlsm:3").Activate
If Range("C6").Value = "" Then
Range("C6").Select
Else
Range("C5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
End If
Do While ActiveCell.Offset(0, -1).Value <> ""
hiduke = InputBox("日付を入力してください" & Chr(13) & "日付入力を終了する場合にはキャンセルボタンを押してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(1)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(O, 1).Range("A1").Select
hiduke = InputBox("得意先コードを入力してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(2)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(O, 2).Range("A1").Select
hiduke = InputBox("商品コードを入力してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(3)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(O, 4).Range("A1").Select
hiduke = InputBox("数量を入力してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(4)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(1, -7).Range("A1").Select
End If
End If
End If
End If
Loop
Windows("第6章.xlsm:2").Activate
ActiveWindow.Close
Windows("第6章.xlsm:1").Activate
ActiveWindow.Close
ActiveWindow.WindowState = xlMaximized
End Sub
ラベル:
[2012]ExcelVBA
2013年1月16日水曜日
追加課題(1/16)
シート「商品リスト」において,商品を追加する際に使用する対話的なプログラムを作成せよ.
方針:InputBox関数を利用.追加課題(12/28)を参考に,商品リストの最終行に移動し,そこから入力を開始.入力したセルの周囲に罫線を引く.
1.商品リストの最終行左端に移動
2.InputBoxを実行し,ユーザーが入力した商品コードを受け取る
3.商品コードをセルに書き込む
4.セルの周囲に罫線を引く
5.一つ右のセルに移動
(2~5を繰り返す)
6.完成!
6-1.素直に繰り返した場合
6-2.データの受付を最初に行い,まとめて書き込みを行う場合
6-3.二次元配列を用いてデータを格納した場合
6-4.プログラム内の同じ処理を行う部分をまとめた場合
6-5.ループを1つにまとめた場合
方針:InputBox関数を利用.追加課題(12/28)を参考に,商品リストの最終行に移動し,そこから入力を開始.入力したセルの周囲に罫線を引く.
1.商品リストの最終行左端に移動
Sub 商品追加()
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
End Sub
2.InputBoxを実行し,ユーザーが入力した商品コードを受け取る
Dim syouhinCode As String
syouhinCode = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
3.商品コードをセルに書き込む
ActiveCell.Value = syouhinCode
4.セルの周囲に罫線を引く
ActiveCell.BorderAround ColorIndex:=1
5.一つ右のセルに移動
ActiveCell.Offset(0, 1).Select
(2~5を繰り返す)
6.完成!
6-1.素直に繰り返した場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
'商品コードを入力
Dim syouhinCode As String
syouhinCode = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'商品名を入力
syouhinCode = InputBox("商品名を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'色を入力
syouhinCode = InputBox("色を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'単価を入力
syouhinCode = InputBox("単価を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'輸入国を入力
syouhinCode = InputBox("輸入国を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'入荷状況を入力
syouhinCode = InputBox("入荷状況を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
End Sub
6-2.データの受付を最初に行い,まとめて書き込みを行う場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
'商品コードを受付
Dim syouhinCode As String
syouhinCode = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
'商品名を受付
Dim syouhinName As String
syouhinName = InputBox("商品名を入力してください", "商品追加", , 100, 100)
'色を受付
Dim syouhinColor As String
syouhinColor = InputBox("色を入力してください", "商品追加", , 100, 100)
'単価を受付
Dim syouhinTanka As String
syouhinTanka = InputBox("単価を入力してください", "商品追加", , 100, 100)
'輸入国を受付
Dim syouhinYunyuu As String
syouhinYunyuu = InputBox("輸入国を入力してください", "商品追加", , 100, 100)
'入荷状況を受付
Dim syouhinNyuuka As String
syouhinNyuuka = InputBox("入荷状況を入力してください", "商品追加", , 100, 100)
'商品コードを書込
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'商品名を書込
ActiveCell.Value = syouhinName
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'色を書込
ActiveCell.Value = syouhinColor
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'単価を書込
ActiveCell.Value = syouhinTanka
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'輸入国を書込
ActiveCell.Value = syouhinYunyuu
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'入荷状況を書込
ActiveCell.Value = syouhinNyuuka
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
End Sub
6-3.二次元配列を用いてデータを格納した場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
Dim shouhin(5, 1) As String
shouhin(0, 0) = ""
shouhin(0, 1) = "商品コード"
shouhin(1, 0) = ""
shouhin(1, 1) = "商品名"
shouhin(2, 0) = ""
shouhin(2, 1) = "色"
shouhin(3, 0) = ""
shouhin(3, 1) = "単価"
shouhin(4, 0) = ""
shouhin(4, 1) = "輸入国"
shouhin(5, 0) = ""
shouhin(5, 1) = "入荷状況"
'商品コードを受付
shouhin(0, 0) = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
'商品名を受付
shouhin(1, 0) = InputBox("商品名を入力してください", "商品追加", , 100, 100)
'色を受付
shouhin(2, 0) = InputBox("色を入力してください", "商品追加", , 100, 100)
'単価を受付
shouhin(3, 0) = InputBox("単価を入力してください", "商品追加", , 100, 100)
'輸入国を受付
shouhin(4, 0) = InputBox("輸入国を入力してください", "商品追加", , 100, 100)
'入荷状況を受付
shouhin(5, 0) = InputBox("入荷状況を入力してください", "商品追加", , 100, 100)
'商品コードを書込
ActiveCell.Value = shouhin(0, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'商品名を書込
ActiveCell.Value = shouhin(1, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'色を書込
ActiveCell.Value = shouhin(2, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'単価を書込
ActiveCell.Value = shouhin(3, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'輸入国を書込
ActiveCell.Value = shouhin(4, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'入荷状況を書込
ActiveCell.Value = shouhin(5, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
End Sub
6-4.プログラム内の同じ処理を行う部分をまとめた場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
Dim shouhin(5, 1) As String
shouhin(0, 0) = ""
shouhin(0, 1) = "商品コード"
shouhin(1, 0) = ""
shouhin(1, 1) = "商品名"
shouhin(2, 0) = ""
shouhin(2, 1) = "色"
shouhin(3, 0) = ""
shouhin(3, 1) = "単価"
shouhin(4, 0) = ""
shouhin(4, 1) = "輸入国"
shouhin(5, 0) = ""
shouhin(5, 1) = "入荷状況"
'データの受取
Dim i As Integer
For i = 0 To 5
shouhin(i, 0) = InputBox(shouhin(i, 1) + "を入力してください", "商品追加", , 100, 100)
Next i
'データの書込
Dim j As Integer
For j = 0 To 5
ActiveCell.Value = shouhin(j, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
Next j
End Sub
6-5.ループを1つにまとめた場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
Dim shouhin(5, 1) As String
shouhin(0, 0) = ""
shouhin(0, 1) = "商品コード"
shouhin(1, 0) = ""
shouhin(1, 1) = "商品名"
shouhin(2, 0) = ""
shouhin(2, 1) = "色"
shouhin(3, 0) = ""
shouhin(3, 1) = "単価"
shouhin(4, 0) = ""
shouhin(4, 1) = "輸入国"
shouhin(5, 0) = ""
shouhin(5, 1) = "入荷状況"
Dim i As Integer
For i = 0 To 5
shouhin(i, 0) = InputBox(shouhin(i, 1) + "を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = shouhin(i, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
Next i
End Sub
ラベル:
[2012]ExcelVBA
追加課題(1/15)
色検索プログラムをIf文のみで実装せよ.
(P168 MsgBox関数の戻り値参照)
輸入国検索プログラムもIf文のみで実装せよ.
(P168 MsgBox関数の戻り値参照)
Sub 色検索()
Dim iro As Integer
iro = MsgBox("ワインの色は赤ですか?", vbYesNo)
If iro = 6 Then
Range("B5").Select
Selection.AutoFilter 3, "赤"
Else
iro = MsgBox("ワインの色は白ですか?", vbYesNo)
If iro = 6 Then
Range("B5").Select
Selection.AutoFilter 3, "白"
Else
iro = MsgBox("ワインの色はロゼですか?", vbYesNo)
If iro = 6 Then
Range("B5").Select
Selection.AutoFilter 3, "ロゼ"
Else
MsgBox "選択が間違っています" & Chr(13) & _
"赤、白、ロゼの中から選択してください", vbOKOnly + vbExclamation
End If
End If
End If
End Sub
輸入国検索プログラムもIf文のみで実装せよ.
Sub 輸入国検索()
Dim kuni As Integer
kuni = MsgBox("輸入国はイタリアですか?", vbYesNo)
If kuni = 6 Then
Range("B5").Select
Selection.AutoFilter 5, "イタリア"
Else
kuni = MsgBox("輸入国はフランスですか?", vbYesNo)
If kuni = 6 Then
Range("B5").Select
Selection.AutoFilter 5, "フランス"
Else
MsgBox "入力が間違っています" & Chr(13) & _
"イタリア,フランスのいずれかを入力してください", vbOKOnly + vbExclamation
End If
End If
End Sub
ラベル:
[2012]ExcelVBA
2012年12月28日金曜日
追加課題(12/28)
追加課題
既存のエクセル内の表に対して
A.一番上の行を見出し行と見なし,黒背景白文字ボールドセンタリングを行う
B.2行目以下について,偶数行と奇数行で背景色を交互に塗り分け
を実現
ここで,実装するべき機能は
1.選択されたセルを開始位置として,そこから表が続く限り処理を繰り返す
(表が終われば処理終了)
2.1つめのif文で1行目か否かを判別し,1行目ならばAの処理を実行
3.2つめのif文で2行目移行と判別できたら,その行が奇数行か偶数行か判別
3-1.奇数行だった場合,少し薄めの色で背景を塗る
3-2.偶数行だった場合,奇数行よりも少し濃いめの色で背景を塗る
です.
1.横方向に移動し,セルの内容を表示するプログラム
+行末までたどり着いたら自動的に改行
+行末までたどり着いたら自動的に改行
+表の左端まで移動
+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
+移動後の行に対しても同様の処理を行う
=任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
+行数把握
+行数把握
+1行目とその他の行で処理分岐
+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
+各行にあわせた処理を記述
| 見出し1 | 見出し2 | 見出し3 | 見出し4 | 見出し5 |
| 内容11 | 内容12 | 内容13 | 内容14 | 内容15 |
| 内容21 | 内容22 | 内容23 | 内容24 | 内容25 |
| 内容31 | 内容32 | 内容33 | 内容34 | 内容35 |
| 内容41 | 内容42 | 内容43 | 内容44 | 内容45 |
| 内容51 | 内容52 | 内容53 | 内容54 | 内容55 |
既存のエクセル内の表に対して
A.一番上の行を見出し行と見なし,黒背景白文字ボールドセンタリングを行う
B.2行目以下について,偶数行と奇数行で背景色を交互に塗り分け
を実現
ここで,実装するべき機能は
1.選択されたセルを開始位置として,そこから表が続く限り処理を繰り返す
(表が終われば処理終了)
2.1つめのif文で1行目か否かを判別し,1行目ならばAの処理を実行
3.2つめのif文で2行目移行と判別できたら,その行が奇数行か偶数行か判別
3-1.奇数行だった場合,少し薄めの色で背景を塗る
3-2.偶数行だった場合,奇数行よりも少し濃いめの色で背景を塗る
です.
1.横方向に移動し,セルの内容を表示するプログラム
Sub ironuri1()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop
End Sub
2.縦方向に移動し,セルの内容を表示するプログラム
Sub ironuri2()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
End Sub
3.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
Sub ironuri3()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Offset(1, 0).Select
End Sub
4.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
+表の左端まで移動
Sub ironuri4()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Offset(1, -5).Select
End Sub
5.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
Sub ironuri5()
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(1, (-i + 1)).Select
End Sub
6.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
+移動後の行に対しても同様の処理を行う
=任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
Sub ironuri6()
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
7.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
Sub ironuri7()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value & ", " & j & "行目"
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
8.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
+1行目とその他の行で処理分岐
Sub ironuri8()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
If j = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
Else
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)"
End If
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
9.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
Sub ironuri9()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
If j = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
Else
If (j Mod 2) = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(奇数行)"
Else
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(偶数行)"
End If
End If
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
10.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
+各行にあわせた処理を記述
Sub ironuri10()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
If j = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
ActiveCell.Font.Bold = True
ActiveCell.Font.ColorIndex = 2
ActiveCell.Interior.ColorIndex = 1
Else
If (j Mod 2) = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(奇数行)"
ActiveCell.Interior.ColorIndex = 15
ActiveCell.BorderAround ColorIndex:=1
Else
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(偶数行)"
ActiveCell.Interior.ColorIndex = 48
ActiveCell.BorderAround ColorIndex:=1
End If
End If
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
ラベル:
[2012]ExcelVBA
2012年12月25日火曜日
Select-Caseステートメント SAMPLE(Excel VBA)
shiken3()
waribiki()
iro()
Sub shiken3()
Dim tensuu As Integer
tensuu = Range("C26").Value
If tensuu >= 80 Then
MsgBox "合格です"
Else
If tensuu >= 60 Then
MsgBox "追試です"
Else
MsgBox "不合格です"
End If
End If
End Sub
waribiki()
Sub waribiki()
Dim kingaku As Currency
kingaku = Range("C33").Value
If Range("D33").Value = "一般" Then
If kingaku >= 50000 Then
MsgBox "一般:15%割引です"
Else
If kingaku >= 30000 Then
MsgBox "一般:10%割引です"
Else
If kingaku >= 10000 Then
MsgBox "一般:5%割引です"
Else
MsgBox "一般:割引なしです"
End If
End If
End If
Else
If Range("D33").Value = "会員" Then
If kingaku >= 50000 Then
MsgBox "会員:30% 割引です"
Else
If kingaku >= 30000 Then
MsgBox "会員:20%割引です"
Else
If kingaku >= 10000 Then
MsgBox "会員:10%割引です"
Else
MsgBox "会員:割引なしです"
End If
End If
End If
End If
End If
End Sub
iro()
Sub iro()
Select Case Range("C34").Value
Case "RED"
strIro = "RED"
Case "BLUE"
strIro = "BLUE"
Case "PINK"
strIro = "PINK"
Case "GREEN"
strIro = "GREEN"
Case Else
strIro = "RED.BLUE.PINK.GREENのいずれかを入力してください"
End Select
MsgBox strIro
End Sub
ラベル:
[2012]ExcelVBA
2012年10月25日木曜日
WEBアプリケーションサーバの構築(6) crontab
1.Shell Scriptエラー処理
前回のツールを動作させる前提として「img」ディレクトリが必要だが,もし存在しないとうまく動作しない.
そこで,「img」ディレクトリの存在有無をチェックし,もし存在しない場合は,ディレクトリを作成するようにツールを編集する.
get_image2.sh
2.crontabの利用 逆方向も試してみよう
WEBから受け取った値...天気予報の予報値や,特定サイトの値...を,
シェルスクリプトでDBサーバに自動登録.
さらにcrontabを使って,定期的に自動実行.
登録された値はHTMLファイルで閲覧可能なものを作成.
そこで,「img」ディレクトリの存在有無をチェックし,もし存在しない場合は,ディレクトリを作成するようにツールを編集する.
get_image2.sh
#!/bin/bash
for user in `ls /home`
do
id $user > /dev/null 2>&1
if [ $? -eq 0 ] && [ ! -d /home/$user/public_html ]; then
mkdir -p /home/$user/public_html
chown $user. /home/$user/public_html
chmod 711 /home/$user
echo $user
fi
done
2.crontabの利用 逆方向も試してみよう
WEBから受け取った値...天気予報の予報値や,特定サイトの値...を,
シェルスクリプトでDBサーバに自動登録.
さらにcrontabを使って,定期的に自動実行.
登録された値はHTMLファイルで閲覧可能なものを作成.
#goo天気の場合 #元ファイル取得 # wget http://weather.goo.ne.jp/area/4610.rdf #時刻 # grep lastBuildDate 4610.rdf | sed -e "s/\(.*\)<\/lastBuildDate>/\1/g" #天気 # grep description 4610.rdf | sed -e "s/ \(.*\)<\/description>/\1/g" #Yahoo天気の場合 #元ファイル取得 wget http://rss.weather.yahoo.co.jp/rss/days/4410.xml #時刻 grep lastBuildDate 4410.xml | sed -e "s/ \(.*\)<\/lastBuildDate>/\1/g" #現在の天気と気温を抽出 grep -n description 4410.xml | grep ^13 | sed -e "s/ \(.*\)<\/description>/\1/" | sed "s/\s//g" | sed "s/^.*-//g" | sed "s/\/.*$//g" 1.SQL文を用意 vi temp.sql insert into temp (temp) values (10); 2.1で作成したファイルを用いてMySQLへ値流し込み mysql -u root -s test < temp.sql 3.temp.sqlの値を自動的に更新するシェルスクリプトを作成 temp.sql #!/bin/sh echo "insert into temp (temp) values (10);" > temp.sql /usr/bin/mysql -u root -s test < temp.sql exit 0 chmod u+x temp.sql ./temp.sql 4.temp.sqlの中身を自動的に変更する. temp.sql !/bin/sh wget http://rss.weather.yahoo.co.jp/rss/days/4410.xml str_temp=`grep -n description 4410.xml | grep ^13 | sed -e "s/ \(.*\)<\/description>/\1/" | sed "s/\s//g" | sed "s/^.*-//g" | sed "s/\/.*$//g"` echo 'insert into temp (temp) values ("'$str_temp'");' > temp.sql /usr/bin/mysql -u root -s test < temp.sql rm 4410.xml exit 0 5.対象とする地域を複数とする. ファイル名の下2桁目が可変 ---> 4410.xml/4420.xml/4430.xml ... ---> 44*0.xmlの*が1~9まで変化
ラベル:
[2012]サーバアーキテクチャ
2012年10月18日木曜日
WEBアプリケーションサーバの構築(5) Shell Script
1.Google画像検索APIの利用
http://ajax.googleapis.com/ajax/services/search/images?q=sato&v=1.0&rsz=1
2.Google画像検索API + shellの利用
3.ツールの作成
get_image.sh
※{password}は自自身のパスワードに置き換えること.
4.ツールを使用することで,DBに登録されたユーザの画像を,ユーザー名をファイル名として取得することが可能になったので,リストに画像も併せて表示する.
list6.html
http://ajax.googleapis.com/ajax/services/search/images?q=sato&v=1.0&rsz=1
2.Google画像検索API + shellの利用
curl -s 'http://ajax.googleapis.com/ajax/services/search/images?q=sato&v=1.0&rsz=1' | tr , \\n | grep "url" | sed -e 's/"url"://g' -e 's/"//g'→Google画像検索の1番最初にマッチした画像のURLが表示される.
3.ツールの作成
get_image.sh
#!/bin/sh
target_list=`/usr/bin/mysql -u root -p[password] arts -e "select name from sa2012"`
for name in $target_list
do
image_url=`curl -s 'http://ajax.googleapis.com/ajax/services/search/images?q='$name'&v=1.0&rsz=1' | tr , '\\n' | grep "url" | sed -e 's/"url"://g' -e 's/"//g'`
echo $name" --> "$image_url
curl -s -o img/$name.jpg $image_url
done
exit 0
※{password}は自自身のパスワードに置き換えること.
4.ツールを使用することで,DBに登録されたユーザの画像を,ユーザー名をファイル名として取得することが可能になったので,リストに画像も併せて表示する.
list6.html
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<title>real-time search sample(AJAX)</title>
<STYLE TYPE="text/css">
<!--
.table1 {
width: 400px;
border-collapse: collapse;
border: 1px #708090 solid;
}
.table1 TD {
border: 1px #708090 solid;
}
-->
</STYLE>
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript">
<!--
findText = findTextOld = "";
function loadXmlFile(fName){
httpObj = createXMLHttpRequest(displayData);
if (httpObj){
httpObj.open("GET",fName,true);
httpObj.send(null);
}
}
function displayData(){
if ((httpObj.readyState == 4) && (httpObj.status == 200)){
xmlData = httpObj.responseXML;
$("result").innerHTML = parseXmlData(httpObj.responseText);
}else{
$("result").innerHTML = "Loading ...";
}
}
function parseXmlData(xmlData){
$("result").innerHTML = xmlData;
idListTags = document.getElementsByTagName("id");
numListTags = document.getElementsByTagName("num");
nameListTags = document.getElementsByTagName("name");
idLen = idListTags.length;
resultText = "<table class='table1'><tr><th colspan=5>list</th></tr><tr><td><b>id</b></td><td><b>num</b></td><td><b>name</b></td><td><b>image</b></td></tr>";
for(i=0; i<idLen; i++){
id = idListTags[i].childNodes[0].nodeValue;
num = numListTags[i].childNodes[0].nodeValue;
name = nameListTags[i].childNodes[0].nodeValue;
str = name.match(findText);
if (str){
resultText += "<tr><td>" + id + "</td><td><a href='http://10.2.5." + num + "' target='_blank'>" + num + "</a></td><td>" + name + "</td><td><img height=100 width=100 src='img/" + name + ".jpg'></td></tr>";
}
}
resultText += "</table>";
return resultText;
}
function inputCheck(){
findText = document.ajaxForm.requestText.value;
if (findText != findTextOld) {
str_search = "./backend.php?search_key=" + findText
loadXmlFile(str_search);
findTextOld = findText;
}else{
// $("result").innerHTML = "Loading ...";
}
setTimeout(" inputCheck()",500); // 0.5秒毎
}
window.onload = inputCheck;
// -->
</script>
</head>
<body>
<form name="ajaxForm" onSubmit="return false">
<input type="text" value="a" name="requestText">
</form>
<div id="result"></div>
</body>
</html>
ラベル:
[2012]サーバアーキテクチャ
2012年10月11日木曜日
WEBアプリケーションサーバの構築(4) AJAX
フォームにAJAXを使った画面を作成.
xmlhttp.js
backend.php
list4.html
xmlhttp.js
// HTTP通信用、共通関数
function createXMLHttpRequest(cbFunc){
var XMLhttpObject = null;
try{
XMLhttpObject = new XMLHttpRequest();
}catch(e){
try{
XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
return null;
}
}
}
if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
return XMLhttpObject;
}
// document.getElementById
function $(tagId){
return document.getElementById(tagId);
}
backend.php
<?php
$db_user = "[user name]";
$db_password = "[password]";
$db_name = "[database name]";
$db_host = "localhost";
//create xml
header('Content-type: text/xml; charset=utf-8');
echo '<?xml version="1.0"?><sa>';
$search_key = null;
if(isset($_GET['search_key'])) {
$search_key = $_GET['search_key'];
$con = mysql_connect($db_host,$db_user,$db_password) or die("error!");
mysql_select_db($db_name,$con) or die("DB is not exist");
$strsql = "SET CHARACTER SET UTF8";
mysql_query($strsql,$con);
$strsql = "SELECT id, num, name FROM sa2012 WHERE name LIKE '%".$search_key."%';";
$res = mysql_query($strsql,$con);
while ($item = mysql_fetch_array($res)) {
print "<list><id>".$item[0]."</id><num>".$item[1]."</num><name>".$item[2]."</name></list>";
}
mysql_close($con);
}
echo '</sa>';
?>
list4.html
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<title>real-time search sample(AJAX)</title>
<STYLE TYPE="text/css">
<!--
.table1 {
width: 400px;
border-collapse: collapse;
border: 1px #708090 solid;
}
.table1 TD {
border: 1px #708090 solid;
}
-->
</STYLE>
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript">
<!--
findText = findTextOld = "";
function loadXmlFile(fName){
httpObj = createXMLHttpRequest(displayData);
if (httpObj){
httpObj.open("GET",fName,true);
httpObj.send(null);
}
}
function displayData(){
if ((httpObj.readyState == 4) && (httpObj.status == 200)){
xmlData = httpObj.responseXML;
$("result").innerHTML = parseXmlData(httpObj.responseText);
}else{
$("result").innerHTML = "Loading ...";
}
}
function parseXmlData(xmlData){
$("result").innerHTML = xmlData;
idListTags = document.getElementsByTagName("id");
numListTags = document.getElementsByTagName("num");
nameListTags = document.getElementsByTagName("name");
idLen = idListTags.length;
resultText = "<table class='table1'><tr><th colspan=4>list</th></tr><tr><td><b>id</b></td><td><b>num</b></td><td><b>name</b></td></tr>";
for(i=0; i<idLen; i++){
id = idListTags[i].childNodes[0].nodeValue;
num = numListTags[i].childNodes[0].nodeValue;
name = nameListTags[i].childNodes[0].nodeValue;
str = name.match(findText);
if (str){
resultText += "<tr><td>" + id + "</td><td><a href='http://10.2.5." + num + "' target='_blank'>" + num + "</a></td><td>" + name + "</td></tr>";
}
}
resultText += "</table>";
return resultText;
}
function inputCheck(){
findText = document.ajaxForm.requestText.value;
if (findText != findTextOld) {
str_search = "./backend.php?search_key=" + findText
loadXmlFile(str_search);
findTextOld = findText;
}else{
// $("result").innerHTML = "Loading ...";
}
setTimeout(" inputCheck()",500); // 0.5秒毎
}
window.onload = inputCheck;
// -->
</script>
</head>
<body>
<form name="ajaxForm" onSubmit="return false">
<input type="text" value="s" name="requestText">
</form>
<div id="result"></div>
</body>
</html>
ラベル:
[2012]サーバアーキテクチャ
2012年10月4日木曜日
WEBアプリケーションサーバの構築(3) PHP
HTMLのフォームから値を受け取り,合致したidのみ表示する画面を作成.
list3_form.html
list3.php
list3_form.html
<html> <head> <title>form</title> </head> <body> <form action="list3.php" method="get"> id : <input type="text" name="id" /> <input type="submit" /> </form> </body> </html>
list3.php
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>list</title>
</head>
<body>
<?php
$id = htmlspecialchars($_GET['id']);
$db_user = "[user name]";
$db_password = "[password]";
$db_name = "[database name]";
$db_host = "localhost";
$db = mysql_connect($db_host,$db_user,$db_password);
mysql_select_db($db_name,$db);
$str_sql = "select * from sa2012 where id = ".$id;
$rs = mysql_query($str_sql,$db);
$num = mysql_num_fields($rs);
print("<table><tr><th colspan=3>list</th></tr>");
echo("
");
print("<tr>");
for ($i=0;$i<$num;$i++){
print("<td><b>".mysql_field_name($rs,$i)."</b></td>");
}
print("</tr>");
while($row=mysql_fetch_array($rs)){
echo("
");
print("<tr>");
for($j=0;$j<$num;$j++){
print("<td>".$row[$j]."</td>");
}
print("</tr>");
}
print("</table>");
mysql_free_result($rs);
mysql_close($db);
?>
</body>
</html>
ラベル:
[2012]サーバアーキテクチャ
2012年9月27日木曜日
WEBアプリケーションサーバの構築(2) DBサーバ
1.php-mysqlモジュールをインストール
yum install php-mysql
service httpd stop
service httpd start
service mysqld stop
mysql_secure_installation
/etc/my.cnf
2.MySQLにデータベース,テーブル作成
DB Name : arts
Table Name : sa2012
$ mysql -u root -p
$ mysql -u root -p sa
※テーブルの各値はMySQL Workbench等から流し込みます.
3.DBに接続し,中身を表示するPHPファイルを作成
list.php
4.パーミッションを755に変更
chmod 755 list.php
5.DBに接続し,id=1のものだけを表示するPHPファイルを作成
list2.php
yum install php-mysql
service httpd stop
service httpd start
service mysqld stop
mysql_secure_installation
/etc/my.cnf
[mysql] default_character_set=utf8 [mysqld] character_set-server=utf8 innodb_log_file_size=64M innodb_buffer_pool_size=128Mservice mysqld start
2.MySQLにデータベース,テーブル作成
DB Name : arts
Table Name : sa2012
$ mysql -u root -p
create database arts;
$ mysql -u root -p sa
create table sa2012 ( id integer NOT NULL AUTO_INCREMENT PRIMARY KEY, num char(4), host_name char(20), ip_address char(15) ); show tables; select * from sa2012;
※テーブルの各値はMySQL Workbench等から流し込みます.
3.DBに接続し,中身を表示するPHPファイルを作成
list.php
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>list</title>
</head>
<body>
<?php
$db_user = "[user name]";
$db_password = "[password]";
$db_name = "[database name]";
$db_host = "localhost";
$db = mysql_connect($db_host,$db_user,$db_password);
mysql_select_db($db_name,$db);
$str_sql = "select * from sa2012";
$rs = mysql_query($str_sql,$db);
$num = mysql_num_fields($rs);
print("<table><tr><th colspan=3>list</th></tr>");
echo("
");
print("<tr>");
for ($i=0;$i<$num;$i++){
print("<td><b>".mysql_field_name($rs,$i)."</b></td>");
}
print("</tr>");
while($row=mysql_fetch_array($rs)){
echo("
");
print("<tr>");
for($j=0;$j<$num;$j++){
print("<td>".$row[$j]."</td>");
}
print("</tr>");
}
print("</table>");
mysql_free_result($rs);
mysql_close($db);
?>
</body>
</html>
4.パーミッションを755に変更
chmod 755 list.php
5.DBに接続し,id=1のものだけを表示するPHPファイルを作成
list2.php
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>list</title>
</head>
<body>
<?php
$db_user = "[user name]";
$db_password = "[password]";
$db_name = "[database name]";
$db_host = "localhost";
$db = mysql_connect($db_host,$db_user,$db_password);
mysql_select_db($db_name,$db);
$str_sql = "select * from sa2012 where id = 1";
$rs = mysql_query($str_sql,$db);
$num = mysql_num_fields($rs);
print("<table><tr><th colspan=3>list</th></tr>");
echo("
");
print("<tr>");
for ($i=0;$i<$num;$i++){
print("<td><b>".mysql_field_name($rs,$i)."</b></td>");
}
print("</tr>");
while($row=mysql_fetch_array($rs)){
echo("
");
print("<tr>");
for($j=0;$j<$num;$j++){
print("<td>".$row[$j]."</td>");
}
print("</tr>");
}
print("</table>");
mysql_free_result($rs);
mysql_close($db);
?>
</body>
</html>
ラベル:
[2012]サーバアーキテクチャ
2012年9月13日木曜日
WEBアプリケーションサーバの構築(1) WEBサーバ
1.まずはブラウザから自身のサーバにアクセスして状況確認
http://10.2.5.***
2.PHPインストール
yum install php
/etc/php.ini
yum install httpd
chkconfig httpd on
service httpd start
4.Firewall設定
iptablesのルール初期化
/sbin/iptables -F
現在のルール確認
iptables -L
Firewallにルール追加
/etc/sysconfig/iptables
service iptables restart
5.動作確認
ブラウザから以下のアドレスにアクセスし,テスト画面が表示されることを確認
http://10.2.5.***
http://10.2.5.***
2.PHPインストール
yum install php
/etc/php.ini
memory_limit = 16M ; Maximum amount of memory a script may consume3.Webサーバ(httpd)インストール
yum install httpd
chkconfig httpd on
service httpd start
4.Firewall設定
iptablesのルール初期化
/sbin/iptables -F
現在のルール確認
iptables -L
Firewallにルール追加
/etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
service iptables restart
5.動作確認
ブラウザから以下のアドレスにアクセスし,テスト画面が表示されることを確認
http://10.2.5.***
ラベル:
[2012]サーバアーキテクチャ
2012年9月6日木曜日
各ユーザーのhome以下にpublic_htmlを作成するツール
userDirMake.sh
#!/bin/bash
for user in `ls /home`
do
id $user > /dev/null 2>&1
if [ $? -eq 0 ] && [ ! -d /home/$user/public_html ]; then
mkdir -p /home/$user/public_html
chown $user. /home/$user/public_html
chmod 711 /home/$user
echo $user
fi
done
ラベル:
[2012]サーバアーキテクチャ
登録:
投稿 (Atom)