戻る
以下のコードでvbsファイル作成。
ダブルクリックで出てくるインプットボックスにcordとかcordialとか入れてやると、それなりの答をかえしてくれるはずです
(前ページからの流れでことを進めているとするなら、メモ帳を起動して以下のコードを貼り付けvbsとして保存する場合、ダイアログに保存先として最初に示されるのは"jisho"ファイルと同じ場所なはずですよね。わざわざ他の場所を選んで保存するなんてひねくれた野郎がいたとしてもまあそれはそれでいいというか、そんなやつとは口もききたくないというほどには嫌いじゃないんですが、その場合は下のコード中のデータベース接続先の書き方が変わってきます。"jisho"ファイルが違う場所になっている場合、7行目は、〜Data Source='jisho' じゃダメです。ファイル名だけじゃなくフルパス書いてください)
Option Explicit
Dim MyStrUK, MyStrJP
Dim MyDbCnn, MyRst
MyStrUK = InputBox("何か英単語入れてみて")
MyStrJP = ""
Set MyDbCnn = CreateObject("ADODB.Connection")
MyDbCnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='jisho'")
Set MyRst = CreateObject("ADODB.Recordset")
MyRst.Open "SELECT fld2 FROM tbl00 WHERE fld1='" & MyStrUK & "'", MyDbCnn
If (MyRst.BOF = False) And (MyRst.EOF = False) Then
MyStrJP = MyRst.Fields("fld2").Value
End If
MyRst.Close
Set MyRst = Nothing
MyDbCnn.Close
Set MyDbCnn = Nothing
MsgBox MyStrJP, vbOKOnly, MyStrUK
↓みたいな野暮ったいやり方でも取りあえず答は得られます。
Option Explicit
Dim MyStrUK, MyStrJP
Dim MyDbCnn, MyRst
MyStrUK = InputBox("何か英単語入れてみて")
MyStrJP = ""
Set MyDbCnn = CreateObject("ADODB.Connection")
MyDbCnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='jisho'")
Set MyRst = CreateObject("ADODB.Recordset")
MyRst.Open "tbl00", MyDbCnn
MyRst.MoveFirst
Do Until (MyStrJP <> "") Or (MyRst.EOF = True)
If MyRst.Fields("fld1").Value = MyStrUK Then
MyStrJP = MyRst.Fields("fld2").Value
End If
MyRst.MoveNext
Loop
MyRst.Close
Set MyRst = Nothing
MyDbCnn.Close
Set MyDbCnn = Nothing
MsgBox MyStrJP, vbOKOnly, MyStrUK
この愚直で野暮ったいやり方に頼る他ない、というケースもたまにあったりするので知っておいて損はないんじゃないかなと。
じっさい数十〜数百程度のデータ量ならこの書き方でもさほど不便は感じません(巨大データ相手だと時間かかりすぎ。使いものにならない)
ついでに。
野暮ったさも↓ぐらいまで行っちゃうと「お前、ワザとだろ。何かたくらみがあるのか」と言いたくなります。
Option Explicit
Dim MyStrUK, MyStrJP
Dim MyDbCnn, MyRst
MyStrUK = InputBox("何か英単語入れてみて")
MyStrJP = ""
Set MyDbCnn = CreateObject("ADODB.Connection")
MyDbCnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='jisho'")
Set MyRst = CreateObject("ADODB.Recordset")
MyRst.Open "tbl00", MyDbCnn, 3, 3
MyRst.MoveLast
Do Until (MyStrJP <> "") Or (MyRst.BOF = True)
If MyRst.Fields("fld1").Value = MyStrUK Then
MyStrJP = MyRst.Fields("fld2").Value
End If
MyRst.MovePrevious
Loop
MyRst.Close
Set MyRst = Nothing
MyDbCnn.Close
Set MyDbCnn = Nothing
MsgBox MyStrJP, vbOKOnly, MyStrUK
この二つの野暮ったいやり方はどこが違うのかといえば、まあざっと見比べてもらえば想像がつくと思います。
前者は表の頭から前進。後者は終わりから逆走。
Loopの直前の一行(前進の場合はMoveNext, 逆走の場合はMovePrevious)忘れずに入れてくださいね。
これ忘れるとちょっと困ったことになります。
処理が終わらない。
Do Until 〜になるまで繰り返せと命令されて、何億回繰り返してもそこに辿り付けないんですから。
夢の無限ループです。
こいつは今まさに無限を体現しようとしている、と、壮大な感慨にひたったりすることもあるでしょうけど、事実は単純に電気の無駄使いです。
ハマッたと思ったら、電源ぶち切るか、タスクマネージャでwscript.exe見つけて強制終了してください。
MyRst.Open "tbl00", MyDbCnn
のところで、逆走の場合だけ , 3, 3 とか、謎の数字が入ってますよね。
これは逆走だからというわけでもないんで。
前進だって入れてもいいんですよ。
ただ無駄だと思ったから入れなかっただけ。
, 3, 3 を入れるといろんなことができる。
逆走もできる(入れずにMovePreviousやるとエラーになります)
逆走のほかに何ができるかというと、「追加」とか「書き換え」とか。
Option Explicit
Dim MyDbCnn, MyRst
Set MyDbCnn = CreateObject("ADODB.Connection")
MyDbCnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='jisho'")
Set MyRst = CreateObject("ADODB.Recordset")
MyRst.Open "tbl00", MyDbCnn, 3, 3
MyRst.AddNew
MyRst.Fields("fld1").Value = "co2"
MyRst.Fields("fld2").Value = "二酸化炭素"
MyRst.Update
MyRst.Close
Set MyRst = Nothing
MyDbCnn.Close
Set MyDbCnn = Nothing
↑↓これで本当に追加、書き換えされたかどうかは、このページの最初のコードで確かめることが出来ます。
Option Explicit
Dim MyDbCnn, MyRst
Set MyDbCnn = CreateObject("ADODB.Connection")
MyDbCnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='jisho'")
Set MyRst = CreateObject("ADODB.Recordset")
MyRst.Open "SELECT fld2 FROM tbl00 WHERE fld1='cordial'", MyDbCnn, 3, 3
If (MyRst.BOF = False) And (MyRst.EOF = False) Then
MyRst.Fields("fld2").Value = "リキュール" 'cordialの和訳をリキュールに書き換え
MyRst.Update
End If
MyRst.Close
Set MyRst = Nothing
MyDbCnn.Close
Set MyDbCnn = Nothing
どうでもいいけど。
この調子でいったら、もしかしてリンクテーブルなんてのもメモ帳で出来ちゃうんじゃないの?
と思った方はこちらへ。
データベースの最適化、なんてことも勿論できるけど、これをvbsでやるなんてスリリングすぎて失神しそう。