1.Close PPT if it's running
2.In REGEDIT, go to HKCU\Software\Microsoft\Office\xx.0\PowerPoint\Options (where xx.0 is 11.0 for 3.Office 2003, 12.0 for Office 2007, 14.0 for Office 2010)
4.Add DebugAddins a DWORD=1
5.Quit regedit.
thx
http://stackoverflow.com/questions/5129362/powerpoint-2007-2010-vba-ppam-add-in-does-not-show-up-in-vba-editor-when-open
2012年12月18日火曜日
2012年12月14日金曜日
linuxのzipコマンドで特定フォルダーとファイルを除外する
ラベル:
linux
特定フォルダーヤファイルを除外して圧縮するzipコマンドの例です。
dont_zip_me_dirフォルダーとSVN関係フォルダーと'*.tmp'を除外したtarget_dirまるごとを圧縮する例です。
解凍先のディレクトリを指定する場合は
zip -r what_ever_you_want.zip ./target_dir/ -x ./target_dir/dont_zip_me_dir\* '*.svn*' '*.tmp'
dont_zip_me_dirフォルダーとSVN関係フォルダーと'*.tmp'を除外したtarget_dirまるごとを圧縮する例です。
解凍先のディレクトリを指定する場合は
unzip what_ever_you_want.zip -d target_dir
2012年12月12日水曜日
ADODB.Commandのパラメータ埋め込みクエリーを出力
ラベル:
vba
ADODB.CommandのCommandTextではクエリーを確認できますが、parameterのところが"?"のまま、直接DBにクエリー投げたいので、いちいち値をセットするのはめんどくさいので、メソッドを作ってみました。
結果
' adArray ' adBigInt ' adBinary ' adBoolean ' adBSTR ' adChapter ' adChar ' adCurrency ' adDate ' adDBDate ' adDBTime ' adDBTimeStamp ' adDecimal ' adDouble ' adEmpty ' adError ' adFileTime ' adGUID ' adIDispatch ' adInteger ' adIUnknown ' adLongVarBinary ' adLongVarChar ' adLongVarWChar ' adNumeric ' adPropVariant ' adSingle ' adSmallInt ' adTinyInt ' adUnsignedBigInt ' adUnsignedInt ' adUnsignedSmallInt ' adUnsignedTinyInt ' adUserDefined ' adVarBinary ' adVarChar ' adVariant ' adVarNumeric ' adVarWChar ' adWChar Public Function printSql(ByRef cmd As ADODB.Command) As String Dim p As ADODB.Parameter Dim vntP As Variant Dim inti As Integer Dim strR As String inti = 1 ReDim vntP(cmd.Parameters.Count) For Each p In cmd.Parameters Select Case p.Type 'ここはニーズに応じてタイプを追加してください Case adInteger vntP(inti) = p.Value Case Else vntP(inti) = "'" & p.Value & "'" End Select inti = inti + 1 Next strR = cmd.CommandText For inti = 1 To UBound(vntP) strR = Replace(strR, "?", vntP(inti), 1, 1) Next printSql = strR End Function使い方
Global cnn As New ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim param As ADODB.Parameter Set cmd = New ADODB.Command ' DB接続 cnn.Open "Provider=SQLOLEDB;" & _ "Data Source=" & srvName & ";" & _ "Initial Catalog=" & databaseName & ";", user, pass cmd.ActiveConnection = cnn cmd.CommandTimeout = 0 cmd.CommandType = adCmdText cmd.CommandText = "SELECT * FROM MyProj WHERE NAME = ? AND Create_at = ? AND hour = ?" ' パラメータを作成 Set param = cmd.CreateParameter("PJNAME", adVarChar, adParamInput, 20) cmd.Parameters.Append param Set param = cmd.CreateParameter("CREATED", adDBTimeStamp, adParamInput) cmd.Parameters.Append param Set param = cmd.CreateParameter("HOUR", adInteger, adParamInput) cmd.Parameters.Append param ' パラメータに値をセット cmd.Parameters("PJNAME").Value = "計画A" cmd.Parameters("CREATED").Value = "2012-12-01" cmd.Parameters("HOUR").Value = 10 Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.CursorType = adOpenStatic Debug.Print(printSql(cmd)) '⇒ココ rs.Open cmd
結果
SELECT * FROM MyProj WHERE NAME = '計画A' AND Create_at = '2012/12/01' AND hour = 10
2012年12月11日火曜日
railsのhelper便利すぎw
ラベル:
rails
counter_partyのview
<%= f.collection_select(:名前, モジュール.find_all_by_列("値"), :列val用, :列disp用) %> <%= f.collection_select(:CPCategory1, MiscCode.find_all_by_MiCodeKey("Field"), :MiCodeName, :MiCodeName) %>↓
<select id="counter_party_CPCategory2" name="counter_party[CPCategory2]"> <option value="顧客">顧客</option> <option value="外注先">外注先</option> <option value="その他">その他</option> </select>
2012年12月6日木曜日
既存データベース(SQL Server)をRailsに載せる
ラベル:
rails
ごめんなさい、ちょっと長すぎて、途中で何を言っているかわからなくなった気がする...でも一応個人の作業メモということで...お許し下さい..orz
環境はwindows
Ruby on Rails(RoR)は「railsinstaller.org」からdownload
VersionやGemの一覧(初期ではない、あとからGEMで追加したものもある!)
インストール後、デフォルト「c:\Sites」が作成される
※もしOS上既にRubyがインストールしていれば、複数バージョンを管理するために,pikをススメます
参照 http://holypp.hatenablog.com/entry/20110407/1302193459
さて、プロジェクトを建てましょう
今回は、既存のデータベースを使って、RoRに乗り換える。DBはSQL Server
Rails3からはプロジェクト単位でGEMを管理するから、プロジェクトフォルダ直下のGemfileに追加
そしたら、実行
次はDBに接続
config/database.ymlを編集
migrate←この段階では必要ないかもしれr内が、まぁ私はやった
ここまで来て、次はscaffold。だけど既存のDBのテーブルにはid列もないし、テーブル名はRailsの複数形式に従っていないが、ここ参照しました。本当にたすかったよ!
例えば今回scaffoldしたいテーブル名は「CounterParty」
irbコンソールが表示されたら、下記コードを全部(テーブル名は変更してね)コピペ
長すぎで自分も嫌になりました、よしっ!以上!ヽ(´ー`)ノ フッ
環境はwindows
Ruby on Rails(RoR)は「railsinstaller.org」からdownload
$ ruby --version
ruby 1.9.3p125 (2012-02-16) [i386-mingw32]
$ rails --version
Rails 3.2.1
$ gem --version
1.8.16
$ gem list
*** LOCAL GEMS ***
actionmailer (3.2.1)
actionpack (3.2.1)
activemodel (3.2.9, 3.2.1)
activerecord (3.2.1)
activerecord-sqlserver-adapter (3.2.10, 3.2.1)
...
...
VersionやGemの一覧(初期ではない、あとからGEMで追加したものもある!)
インストール後、デフォルト「c:\Sites」が作成される
※もしOS上既にRubyがインストールしていれば、複数バージョンを管理するために,pikをススメます
参照 http://holypp.hatenablog.com/entry/20110407/1302193459
$ gem install pik
さて、プロジェクトを建てましょう
$ rails new railsinstaller_demo
$ cd railsinstaller_demo
今回は、既存のデータベースを使って、RoRに乗り換える。DBはSQL Server
Rails3からはプロジェクト単位でGEMを管理するから、プロジェクトフォルダ直下のGemfileに追加
gem 'activerecord-sqlserver-adapter'
gem 'tiny_tds'
そしたら、実行
$ rail bundle install
次はDBに接続
config/database.ymlを編集
development:
adapter: sqlserver
database: DB_NAME
host: 192.168.1.XXX
username: user
password: pwd
migrate←この段階では必要ないかもしれr内が、まぁ私はやった
$ rake db:migrate
ここまで来て、次はscaffold。だけど既存のDBのテーブルにはid列もないし、テーブル名はRailsの複数形式に従っていないが、ここ参照しました。本当にたすかったよ!
例えば今回scaffoldしたいテーブル名は「CounterParty」
$ rails console
irbコンソールが表示されたら、下記コードを全部(テーブル名は変更してね)コピペ
name = 'CounterParty' si_table_name = 'CounterParty' si_field_names = Array.new si_cols = ActiveRecord::Base.connection.columns(si_table_name,"#{name} Columns") si_cols.each do |c| si_field_names << "#{c.name}:#{c.type}" end puts si_field_names.join(' ')putsされたのは既存「CounterPartyのテーブル構造」、それをコピして、一旦railsコンソールをexit
$ rails g scaffold CounterParty コピーした内容をここにペスト
Another migration is already named create_counter_parties:...
あれ、作成できない、既にある?なるほど、これはさきmigrateが悪かったね、しなければ良かったかも
skip-migrateオプションを追加してもう一回
$ rails g scaffold CounterParty コピーした内容をここにペスト --skip-migrate
Overwriteと聞かれたら「Y」
...
..
そしてCOunterPartyのScaffoldが作成されました。
しかし、DBの構造はRailsに乗ってないので、いま表示したらエラーになりますので
app\models\counter_party.rbを編集して、テーブル名とid列を指定
class CounterParty < ActiveRecord::Base attr_accessible :CPName, :CPMemo, ... #Rails3からはwrite可能なフィルドを明示的に宣言しないといけないらしい? self.table_name = 'CounterParty' self.primary_key = :CPCPID endこれでOKのはず、さあ見てみよ
$ rails s
ブラウザーで「http://localhost:3000/counter_parties」をいれてご―
表示されたかな?
続き、WindowServer2008で動かす
>ruby --version
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
>rails --version
Rails 2.1.1
>gem --version
0.9.4
だいぶ古いですね
Rails3とRails2はいろいろ変わったので、ソースコードはそのまま移して使えないので、プロジェクトを新規作成する。
プロジェクト作成
database.ymlを編集
mongrelで動かすので、サービスとして登録します。
プロジェクトフォルダーの下で、「cmd」というフォルダーを作成して、下記のbatファイルを作成する
mongrel_service_regist.bat
CD ../
CALL mongrel_rails service::install -N "Mongrel 9500 MyProj" -p 9500 -e development -a 0.0.0.0
SC CONFIG "Mongrel 9500 MyProj" START= AUTO
9500はポート番号、他の空いているポートもOK
mongrel_service_remove.bat
mongrel_rails service::remove -N "Mongrel 9500 MyProj"
mongrel_service_restart.bat
NET STOP "Mongrel 9500 MyProj"
NET START "Mongrel 9500 MyProj"
mongrel_service_start.bat
NET START "Mongrel 9500 MyProj"
mongrel_service_stop.bat
NET STOP "Mongrel 9500 MyProj"
これで、サービス登録[自動に設定]、再起動、開始、停止などがOne Clickでできるようになる
※但し、これは「管理者:コマンドプロンプト」で実行しなければなりません。
SQL Serverを使っている、データベースの日本語がviewで文字化けている時。
RoRのソースコードはすべてUTF8で記載、SQLServerのencodeはsjisの場合に発生?と思う
config/environment.rbの先頭で、下記を追加すれば解消された。
$KCODE = "u" require "win32ole" WIN32OLE.codepage=WIN32OLE::CP_UTF8最後、既存DBを使っているので、既存のprimary key列「CPCPID」(AUTO_INCREMENT利用しない)をrailsで管理する。 sql server では「IDENTITY」という属性らしい。「開始番号」の「IDENTITYシード」と「ID増分」がある 例えばIDENTITYシード=100、ID増分=10なら、「100,110,120」みたいに自動IDを生成してくれる。 Microsoft SQL Server Management Studio(長っ!)オブジェクトエクスプローラでテーブルの「デザイン」を開き、右クリックで「列のプロパティ」でIDENTITYを設定することが可能です。 もしなんか「一旦削除しないといけない」的なメッセージで怒られたら、 「ツール」>「オプション」>「デザイナ」>「デーブルデザイナおよび...」>「テーブルの再作成を必要とする変更.....」のチェックを外せば、変更できると思います。 それが終わったら、moduleでid列として、newとeditから削除すれば、普通にidとしてrailsが管理更新してくれます。
self.primary_key = :CPCPID
長すぎで自分も嫌になりました、よしっ!以上!ヽ(´ー`)ノ フッ
2012年11月22日木曜日
mysqlでCURSORを使ったループ(LOOP)でINSERT
ラベル:
mysql
#まず削除
DROP PROCEDURE IF EXISTS myProc;
#作成
#日付をプロシジャーの引数に設定、戻り値はない
CREATE PROCEDURE myProc(IN aft_date DATETIME)
BEGIN
DECLARE done INT DEFAULT FALSE;#ループを抜けるフラグ
DECLARE dt DATETIME;#日付ごとにループ
DECLARE tdays CURSOR FOR SELECT aod as as_of_date FROM date_ots where aod > aft_date order by aod asc;#ループする日付たち
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;#日付が全部回ったら終了フラグ
OPEN tdays;#取得する
read_loop: LOOP#ループ開始
FETCH tdays INTO dt;
IF done THEN
LEAVE read_loop;#ループを抜ける
END IF;
insert into fund_correction_indices
select null,f.id,rt.aod,0,ci4.correction_value * rt.rate1 * rt.rate2 * rt.rate3 * rt.rate4,ci4.correction_value * rt.rate1 * rt.rate2 * rt.rate3 * rt.rate4,0
from
(
select dto.aod,f.fund_small_category_id,
avg(ci0.correction_value/ci1.correction_value) as rate1,
avg(ci1.correction_value/ci2.correction_value) as rate2,
avg(ci2.correction_value/ci3.correction_value) as rate3,
avg(ci3.correction_value/ci4.correction_value) as rate4,
avg(ci0.correction_value/ci4.correction_value) as rate_,
dto.4thd
from date_ots dto
inner join fund_correction_indices ci0 on ci0.as_of_date = dto.aod
inner join funds f on f.id = ci0.fund_id and f.kind not in ('平均','指数')
inner join fund_correction_indices ci1 on ci1.as_of_date = dto.1std and ci1.fund_id = ci0.fund_id
inner join fund_correction_indices ci2 on ci2.as_of_date = dto.2ndd and ci2.fund_id = ci0.fund_id
inner join fund_correction_indices ci3 on ci3.as_of_date = dto.3rdd and ci3.fund_id = ci0.fund_id
inner join fund_correction_indices ci4 on ci4.as_of_date = dto.4thd and ci4.fund_id = ci0.fund_id
where dto.aod = dt
and f.fund_small_category_id >=1 and f.fund_small_category_id <=57
group by fund_small_category_id,dto.aod
) rt
inner join funds f on f.fund_small_category_id = rt.fund_small_category_id and f.kind = '平均'
inner join fund_correction_indices ci4 on ci4.as_of_date = rt.4thd and ci4.fund_id = f.id
order by f.id,rt.aod
ON DUPLICATE KEY UPDATE
value=ci4.correction_value * rt.rate1 * rt.rate2 * rt.rate3 * rt.rate4,
correction_value=ci4.correction_value * rt.rate1 * rt.rate2 * rt.rate3 * rt.rate4;
END LOOP;
CLOSE tdays;
END
呼び出し
CALL myProc('2012-02-01')
もしCREATE PROCEDUREの時「Column count of mysql.proc is wrong」みたいなエラーが出たら
$ mysql_upgrade -uroot -p
rootパスワード入力
で直してあげてください。
INSERT ON DUPLICATE KEY UPDATE
ラベル:
mysql
feel this useful,copy from here
http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update
http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update
CREATE TABLE `users_partners` (
`uid` int(11) NOT NULL DEFAULT '0',
`pid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`,`pid`),
KEY `partner_user` (`pid`,`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
INSERT INTO users_partners (uid,pid) VALUES (1,1);
...1 row(s) affected
INSERT INTO users_partners (uid,pid) VALUES (1,1);
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'
INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1);
...0 row(s) affected
INSERT INTO users_partners (uid,pid) VALUES (1,1) ON DUPLICATE KEY UPDATE uid=uid
...0 row(s) affected
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'
INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...3 row(s) affected
INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4) ON DUPLICATE KEY UPDATE uid=uid
...3 row(s) affected
REPLACE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...5 row(s) affected
SQLOLEDB INSERT トランザクション付き
Sub InsertDB() Global cnn As New ADODB.Connection cnn.Open "Provider=SQLOLEDB;" & _ "Data Source=" & srvName & ";" & _ "Initial Catalog=" & databaseName & ";", user, pass Dim cmdIns As ADODB.Command Set cmdIns = New ADODB.Command cmdIns.ActiveConnection = cnn cmdIns.CommandTimeout = 0 cmdIns.CommandType = adCmdText cmdIns.CommandText = "INSERT INTO myTable(id,name,price,bigmoney) VALUES(?,?,?,?)" 'DB定義: id int Set param = cmdIns.CreateParameter("id", adInteger, adParamInput) cmdIns.Parameters.Append param 'DB定義: name nvarchar(50) Set param = cmdIns.CreateParameter("name", adVarWChar, adParamInput, 100) cmdIns.Parameters.Append param 'DB定義: price decimal(12, 6) Set param = cmdIns.CreateParameter("price", adDecimal, adParamInput) param.Precision = 12 '全桁数 param.NumericScale = 6 '小数桁数 こんな感じ:123456.123456 cmdIns.Parameters.Append param 'DB定義: price bigmoney(12, 0) Set param = cmdIns.CreateParameter("bigmoney", adDecimal, adParamInput) param.Precision = 12 '全桁数 param.NumericScale = 0 '小数桁数 こんな感じ:123456123456 cmdIns.Parameters.Append param cmdIns.Parameters("id").Value = 1 cmdIns.Parameters("name").Value = "かげんぱぱ" cmdIns.Parameters("price").Value = 1999.123 cmdIns.Parameters("bigmoney").Value = 10000000000 cnn.BeginTrans 'トランザクション開始 cmdIns.Execute 'インサート実行 'cnn.RollbackTrans 'ロールバック cnn.CommitTrans 'コミット End Sub
2012年11月14日水曜日
mysqlテーブルコピー
ラベル:
mysql
/* スキーマをコピーしてテーブル作成 */
> CREATE TABLE mytable_copy LIKE mytable;
/* mytableテーブルのデータをINSERT */
> INSERT INTO mytable_copy SELECT * FROM mytable;
2012年11月9日金曜日
2012年11月2日金曜日
vbaで定義済みの名前NamesとRangeの参照
ラベル:
vba
Sub name2range_test() Debug.Print ThisWorkbook.Names.Count For i = 1 To ThisWorkbook.Names.Count Debug.Print ThisWorkbook.Names.Item(i).Name & " -> " & ThisWorkbook.Names.Item(i).RefersTo Debug.Print ThisWorkbook.Names.Item(i).Name & " -> " & ThisWorkbook.Names.Item(i).RefersToRange.Address Next 'あるいは Debug.Print Range(ThisWorkbook.Names.Item(1).RefersTo).Address End Sub
2012年10月22日月曜日
update複数テーブルmysql
ラベル:
mysql
update条件にjoinが必要、あるいは、複数テーブルを更新するときに使うね、あまりないと思う
mysql> create database kgtest;
Query OK, 1 row affected (0.03 sec)
mysql> use kgtest
Database changed
mysql> create table students (`id` int(11) not null, `name` varchar(10) not null);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into students value(1,'tom');
Query OK, 1 row affected (0.03 sec)
mysql> insert into students value(2,'Jerry');
Query OK, 1 row affected (0.00 sec)
mysql> select * from students;
+----+-------+
| id | name |
+----+-------+
| 1 | tom |
| 2 | Jerry |
+----+-------+
2 rows in set (0.00 sec)
mysql> create table student2 (`id` int(11) not null, `name` varchar(10) not null);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into student2 value(1,'tomas');
Query OK, 1 row affected (0.00 sec)
mysql> insert into student2 value(2,'rose');
Query OK, 1 row affected (0.00 sec)
mysql> select * from student2;
+----+-------+
| id | name |
+----+-------+
| 1 | tomas |
| 2 | rose |
+----+-------+
2 rows in set (0.00 sec)
mysql> update students st1,student2 st2 set st1.name = st2.name,st2.name = 'kitarou' where st1.id = st2.id;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from student2;
+----+---------+
| id | name |
+----+---------+
| 1 | kitarou |
| 2 | kitarou |
+----+---------+
2 rows in set (0.00 sec)
mysql> select * from students;
+----+-------+
| id | name |
+----+-------+
| 1 | tomas |
| 2 | rose |
+----+-------+
2 rows in set (0.00 sec)
2012年10月17日水曜日
vbaでgoogleのマップAPIにアクセスする
ラベル:
google api,
vba
まずは「ツール」→「参照設定」で「Microsoft XML. vX.0」を追加して下さい。
参考URL、ありがとう!
URL1
URL2
Sub httpRequest() Dim HttpReq As MSXML2.XMLHTTP Dim DomDoc As MSXML2.DOMDocument Dim targetURL As String targetURI = "http://maps.google.co.jp/maps/geo?key=&output=xml&q=" & EncodeURI("大宮市吉野町1-1-2") 'HTTP GET Set HttpReq = CreateObject("MSXML2.XMLHTTP") HttpReq.Open "GET", targetURI, False HttpReq.send (Null) 'XML PARSE Set DomDoc = CreateObject("MSXML2.DOMDocument") DomDoc.LoadXML (HttpReq.responseText) Set HttpReq = Nothing Set DomDoc = Nothing End Sub Function EncodeURI(uri As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Set js = sc.CodeObject EncodeURI = js.encodeURIComponent(uri) End Function
参考URL、ありがとう!
URL1
URL2
excelをDBにして、wordやpower pointとデータ連携
ラベル:
vba
ツール→参照設定から、Microsoft Activex Data Objects 2.x Libraryを追加しておく
Private Sub openDB() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = New ADODB.Connection CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Documents and Settings\UserName\My Documents\data.xls;" & _ "Extended Properties='Excel 8.0;HDR=YES'" Set RS = CN.Execute("select * from [シート名$] where 銘柄名 like '%日本%';") Do Until RS.EOF Debug.Print RS.Fields(0); RS.Fields(1); RS.Fields(2) RS.MoveNext Loop End Sub
2012年10月16日火曜日
exclude(エクスクルード)除外のJOIN関係はないですか?
ラベル:
mysql
MySQLではLEFT・RIGHT (OUTER)、INNER JOINはありましたが、除外の関係はないでしょうか?
この図のようにAからBの部分を除外して、緑の部分を取得するクエリーの書き方はありませんか?
Aの中からidがBにも存在するレコードを除去して、Aのレコードを取得
この図のようにAからBの部分を除外して、緑の部分を取得するクエリーの書き方はありませんか?
Aの中からidがBにも存在するレコードを除去して、Aのレコードを取得
select * from table_a A left outer join table_b B on B.id = A.id where B.id IS null
2012年10月7日日曜日
VBAのscripting.dictionaryをPHPのvar_dumpみたいに出力
ラベル:
vba
'定数 値 内容 ' vbEmpty 0 Empty値 ' vbNull 1 Null値 ' vbInteger 2 整数型 ' vbLong 3 長整数型 ' vbSingle 4 単精度浮動小数点数型 ' vbDouble 5 倍精度浮動小数点数型 ' vbCurrency 6 通貨型 ' vbDate 7 日付型 ' vbString 8 文字列型 ' vbObject 9 オブジェクト ' vbError 10 エラー値 ' vbBoolean 11 ブール型 ' vbVariant 12 バリアント型(バリアント型配列にのみ使用) ' vbDataObject13 非OLEオートメーションオブジェクト ' vbDecimal 14 10進数型 ' vbByte 17 バイト型 ' vbArray 8192配列 Public Sub var_dump(ByVal obj As Scripting.Dictionary) Dim pi As Variant Dim strVal As String Static strTab As String strTab = strTab + vbTab For Each pi In obj.Keys If Not IsObject(obj.Item(pi)) Then Select Case VarType(obj.Item(pi)) Case vbEmpty strVal = "(Empty)" Case vbNull strVal = "(NULL)" Case vbInteger strVal = "(Interge)" Case vbLong strVal = "(Long)" Case vbSingle strVal = "(Single)" Case vbDouble strVal = "(Double)" Case vbCurrency strVal = "(Currency)" Case vbDate strVal = "(Date)" Case vbString strVal = "(String)" Case vbDecimal strVal = "(Decimal)" Case vbByte strVal = "(Byte)" Case vbArray strVal = "(Array)" End Select Debug.Print strTab & pi & " -> " & strVal & obj.Item(pi) Else If TypeName(obj.Item(pi)) = "Dictionary" Then var_dump obj.Item(pi) Else Debug.Print strTab & pi & " -> " & "(object)" & TypeName(obj.Item(pi)) End If End If Next End Sub
2012年10月4日木曜日
CREATE TABLE SELECTの中にAUTO_INCREMENTのIDを付ける、おまけにCHARACTERをUTF8
ラベル:
mysql
CREATE TABLE SELECTの中にAUTO_INCREMENTのIDを付ける、おまけにCHARACTERをUTF8
create table nek_in_tdb
(
id INT PRIMARY KEY AUTO_INCREMENT
,company_code VARCHAR( 25 ) NOT NULL ←無くでも問題ない
,name_jp VARCHAR(255) NOT NULL ←無くでも問題ない
) CHARACTER SET 'utf8'
select distinct
n.company_code
,n.name_jp
from company_tdb t
inner join company_nik n
on t.search_key = n.name_jp;
2012年9月27日木曜日
今日知った、mysqlの罠、ハァ・・(ノω=;)
今日の罠(常識かも)
①mysqlのクエリーでは「○○ <> True」使わない方がいいです。NULLのものが入ってこないから。
「○○ = False or ○○ IS NULL」が正解
②「union」では勝手に一意してくれるから、そうさせたくないときは「union all」
①mysqlのクエリーでは「○○ <> True」使わない方がいいです。NULLのものが入ってこないから。
「○○ = False or ○○ IS NULL」が正解
②「union」では勝手に一意してくれるから、そうさせたくないときは「union all」
2012年9月26日水曜日
selectした内容をシーケンス(Sequence)付きで新しいテーブルに挿入
ラベル:
mysql
insert into new_table (
seq
,fund_name
,rank_org
,yyyymm
,period)
SELECT
@row := @row + 1 as seq
,fund_name
,rank as rank_org
,yyyymm
,period
FROM old_table t,
(SELECT @row := 0) r
where yyyymm = '201203'
and period = '1m'
order by rank desc limit 10;
count caseで月次統計クエリー、タイトル付きでCSV出力
ラベル:
mysql
SELECT 'Product_ID', 'Product_Name', 'Total', 'Jan', 'Feb',... //csvのタイトルを出力
UNION
SELECT product_id,
product_name,
Count(*), //合計
Count(CASE
WHEN RIGHT(yyyymm, 2) = '01' THEN 1
END) AS 'Jan', //1月の合計
Count(CASE
WHEN RIGHT(yyyymm, 2) = '02' THEN 1
END) AS 'Feb', //2月の合計
...
...
FROM sales_table
GROUP BY product_id
into outfile 'c:\\prod_monthly.csv' FIELDS TERMINATED BY ',';//csvに出力
2012年9月21日金曜日
住所をマッピングする為に、mysqlのLEFTとINSTRで関数で住所の検索キーを生成
まずは町、区、市、郡まで切り捨て
そして、もっと大雑把、都道府県
DBのエンコードはUTF8だけど、データ自体のエンコードはsjisになっている。
windowsのコマンドプロンプトからmysqlのコンソールにアクセスしているので、
上記クエリーを投げでもなぜかうまくいかない...
ここですごい人に見てもらって、どうもコマンドプロンプトのエンコードのせいかも
コマンドプロンプトのエンコードを変えるコマンドchcp(change code page)
とにかく、DOSのコマンドプロンプトで2バイドのものは書かないで
phpmyadminやnavicatなどSQLクライアントを使いましょう。
ALTER TABLE company_nikkei ADD shi_addr_key VARCHAR( 255 ) NULL;
UPDATE company_nikkei SET shi_addr_key =
LEFT(address,CASE
WHEN INSTR(address,'町') <> 0 THEN INSTR(address,'町')
WHEN INSTR(address,'区') <> 0 THEN INSTR(address,'区')
WHEN INSTR(address,'市') <> 0 THEN INSTR(address,'市')
WHEN INSTR(address,'郡') <> 0 THEN INSTR(address,'郡')
END);
そして、もっと大雑把、都道府県
ALTER TABLE company_nikkei ADD to_addr_key VARCHAR( 255 ) NULL;
UPDATE company_nikkei SET to_addr_key = CASE WHEN INSTR(address,'東京都') <> 0 THEN '東京都'
WHEN INSTR(address,'北海道') <> 0 THEN '北海道'
WHEN INSTR(address,'大阪府') <> 0 THEN '大阪府'
WHEN INSTR(address,'京都府') <> 0 THEN '京都府'
WHEN INSTR(address,'県') <> 0 THEN LEFT(address,INSTR(address,'県'))
WHEN INSTR(address,'市') <> 0 THEN LEFT(address,INSTR(address,'市'))
ELSE '不明' END;
DBのエンコードはUTF8だけど、データ自体のエンコードはsjisになっている。
windowsのコマンドプロンプトからmysqlのコンソールにアクセスしているので、
上記クエリーを投げでもなぜかうまくいかない...
ここですごい人に見てもらって、どうもコマンドプロンプトのエンコードのせいかも
コマンドプロンプトのエンコードを変えるコマンドchcp(change code page)
>chcp
現在のコード ページ: 932
> chcp 65001
↑UTF8
とにかく、DOSのコマンドプロンプトで2バイドのものは書かないで
phpmyadminやnavicatなどSQLクライアントを使いましょう。
2012年9月18日火曜日
ついに僕もSSDデビュー
秋葉原からIntelSSD(120G)購入、8000円くらいでした。
セットアップに一苦労…
グラフィックカードが大きい過ぎで、唯一開いているSATAを完全隠した。
幸いファンのあたりだったので、無理やりグラボに穴を貫通してSSDのSATAケーブルを通した。
あとはマンターをつけて、固定しました。
物理繋いたら、あとはCドライブの移行です。
移行作業は割りと簡単、Intelの専用ソフトがあったので、ソース(既存Cドライブ)とターゲット(SSD)を選択して、「次へ」⇒再起動。そしてデータのコピーが終わったらシャットダウンして、SATAケーブルの差し替えを行う。
ここで説明書ではSWAPと書いてますが、実はここで差し替えたらドライブレターが乱れることがありますので、元CドライブのSATAケーブルをSSDに接続したら、一旦元CドライブHDDをOFFLINEにしたほうがいいです。
そしてWindowsを起動して、ちゃんとSSDがCドライブになっているを確認したら、再度PCをシャットダウンして、元CドライブのHDDもONLINEさせて、起動すると、ドライブレターがちゃんと変わります。
まぁメモメモ
PS:肝心なBOOTスピードは…まぁ驚く程のスピード感は感じ取れなかったが、実際いろいろ使ってみたら、確かに以前より3,4割早くなっている体感。まぁまぁ8000円だから、良かったと思う!
セットアップに一苦労…
グラフィックカードが大きい過ぎで、唯一開いているSATAを完全隠した。
幸いファンのあたりだったので、無理やりグラボに穴を貫通してSSDのSATAケーブルを通した。
あとはマンターをつけて、固定しました。
物理繋いたら、あとはCドライブの移行です。
移行作業は割りと簡単、Intelの専用ソフトがあったので、ソース(既存Cドライブ)とターゲット(SSD)を選択して、「次へ」⇒再起動。そしてデータのコピーが終わったらシャットダウンして、SATAケーブルの差し替えを行う。
ここで説明書ではSWAPと書いてますが、実はここで差し替えたらドライブレターが乱れることがありますので、元CドライブのSATAケーブルをSSDに接続したら、一旦元CドライブHDDをOFFLINEにしたほうがいいです。
そしてWindowsを起動して、ちゃんとSSDがCドライブになっているを確認したら、再度PCをシャットダウンして、元CドライブのHDDもONLINEさせて、起動すると、ドライブレターがちゃんと変わります。
まぁメモメモ
PS:肝心なBOOTスピードは…まぁ驚く程のスピード感は感じ取れなかったが、実際いろいろ使ってみたら、確かに以前より3,4割早くなっている体感。まぁまぁ8000円だから、良かったと思う!
2012年9月16日日曜日
vb,vbaの(仮)非同期実行方法??
ラベル:
vba
for i = 0 to 9999 DoEvents nextDoEventsはcupビジー時でもユーザのインプットに対してUIを反応させることができるらしい
ここでは詳しく書いています、ありがとうございました。
2012年9月6日木曜日
mysqlのload data infile
一般的にCSVファイルをmysqlコンソルで直接流し込む...
LINES TERMINATED追加しないとおかしいことになる。
csvの中身はこんな感じ:
10000031,"ああああ",""
10000041,"いいいい",""
10000050,"うううう","おおおお"
10000130,"ささささ","しししし"
文字コードはsjisで、改行コードはCRLF
流しこむコマンド:
mysql> set character_set_database=sjis;
mysql> LOAD DATA INFILE "C:\\Documents and Settings\\username\\data.csv" INTO TABLE my_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' STARTING BY '';
LINES TERMINATED追加しないとおかしいことになる。
2012年9月5日水曜日
vba条件書式の罠
現象:vbaで条件書式を追加したら、訳がわからない条件が追加される、Excel2007
下のコードで「C1」セルに、自分自身がエラーの場合、背景色を変える条件書式を追加したところ
試しに絶対参照の「ISERROR($C$1)」にしてみたら、治った(当たり前だ)。でも絶対参照だとソートとかしたら大変なことになるので...
まぁ、最後はこうして治ったけど、なんか腑に落ちないな~
下のコードで「C1」セルに、自分自身がエラーの場合、背景色を変える条件書式を追加したところ
Sub test() Sheet1.Range("C1").FormatConditions.Delete Sheet1.Range("C1").FormatConditions.Add Type:=xlExpression, Formula1:="=ISERROR(C1)" Sheet1.Range("C1").FormatConditions(1).Interior.ColorIndex = 38 End Sub実行後、出来た数式を見てみると、なんだこりゃ~?!「ISERROR(C1)」と指定したのに、「XFD1」とはなんだ?!!
試しに絶対参照の「ISERROR($C$1)」にしてみたら、治った(当たり前だ)。でも絶対参照だとソートとかしたら大変なことになるので...
まぁ、最後はこうして治ったけど、なんか腑に落ちないな~
Sub test() Sheet1.Activate Sheet1.Range("C1").Select Sheet1.Range("C1").FormatConditions.Delete Sheet1.Range("C1").FormatConditions.Add Type:=xlExpression, Formula1:="=ISERROR(C1)" Sheet1.Range("C1").FormatConditions(1).Interior.ColorIndex = 38 End Sub
2012年9月2日日曜日
google spreadsheetsで乱数キーを生成する関数
下記のコードをスクリプトエディタで追加して
function randString(cb) { var rgch = "abcdefghijklmnopqrstuvwxyz"; rgch = rgch.toUpperCase() + "0123456789"; var tmpString = ""; for (var i = 1; i <= cb; i++) { var startPos = Math.ceil((Math.random() * rgch.length)); tmpString = tmpString + rgch.substring(startPos, startPos + 1); } return tmpString; } function genKey(cn) { var keys = []; for (var i = 0; i <= cn - 1; i++) { keys.push(randString(4)); } return keys.join("-"); }スプレッドシートで数式を入れると、乱数生成のキーが生成される。
2012年8月21日火曜日
excelの数値format
内容 | 指定文字 | 例 |
---|---|---|
表示する桁数を指定する。"0"1つで1桁を表し、それより桁数が少ない数値の場合は"0"で埋められる。 | 0 | Format(12345,"0000000") → 0012345 Format(12345,"000") → 12345 |
表示する桁数を指定する。"#"1つで1桁を表し、それより桁数が少ない数値の場合は元の数値がそのまま返される。 | # | Format(12345,"#######") → 12345 Format(12345,"###") → 12345 |
0や"#"と組み合わせて小数点の位置を指定する。 | . | Format(12345.567,"0000000.00") → 0012345.57 Format(12345.567,"0000000.00000") → 0012345.56700 Format(12345.567,"#######.##") → 12345.57 Format(12345.567,"#.#####") → 12345.567 |
0や"#"と組み合わせて1000ごとにカンマで区切る。 | , | Format(12345,"0,000,000") → 0,012,345 Format(12345,"#,###") → 12,345 |
数値を100倍してパーセント表示する。 | % | Format(0.25,"#%") → 25% |
数値の先頭に¥マークを付ける。 | \\ | Format(12345,"\\#,###") → \12,345 |
このマークのすぐ後1文字をそのまま表示する。 | \ | Format(12345,"\@#,###") → @12,345 Format(12345.56,"0.000\円/\ケ") → 12345.560円/ケ |
ダブルクォーテーションで囲まれた文字列はそのまま表示する。 | Format(12345,"#,###""です""") → 12,345です |
2012年8月17日金曜日
sql、カレンダー作成
2010/4/1から2012/5/31までのカレンダーを作成
Declare @date table(d datetime)
Declare @d datetime
set @d='20100401'
While @d<='20120531'
Begin
Insert into @date values (@d)
set @d=@d+1
End
Select d as date_ymd into calendar from @date
エクセルでデータベースを参照するサンプル、SQL ServerとmySQL対応
シート1の名前を「"テーブル一覧"」にして、ボタンを追加する
そして、I列の1から5行目、下記の情報を入れる
サーバー
DB名
ユーザ
パスワード
接続DBタイプ["SQL Server","MySQL ODBC 5.1 DRIVER"]
※今のところ、MS SQL Serverとmysqlしか対応していない
シート"テーブル一覧"は
モジュールに下記のコード
そして、I列の1から5行目、下記の情報を入れる
サーバー
DB名
ユーザ
パスワード
接続DBタイプ["SQL Server","MySQL ODBC 5.1 DRIVER"]
※今のところ、MS SQL Serverとmysqlしか対応していない
シート"テーブル一覧"は
Private Sub CommandButton1_Click() Call getTables End Sub Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 'MsgBox Target.TextToDisplay getTableData Target.TextToDisplay End Sub
モジュールに下記のコード
Public con As ADODB.Connection Public wb As Workbook Public st As Worksheet Public gDB As String Public gConDriver As String Dim connectionString As String Sub initDBcon() Set wb = ThisWorkbook Set st = wb.Worksheets("テーブル一覧") '接続文字列 gConDriver = st.Range("I5") Select Case gConDriver Case "SQL Server" connectionString = "Provider=Sqloledb;" _ & " Data Source=" & st.Range("I1") & ";" _ & " Initial Catalog=" & st.Range("I2") & ";" _ & " Connect Timeout=15;" _ & " user id=" & st.Range("I3") & ";" _ & " password=" & st.Range("I4") Case "MySQL ODBC 5.1 DRIVER" connectionString = "Driver={" & gConDriver & "};" _ & " SERVER=" & st.Range("I1") & ";" _ & " DATABASE=" & st.Range("I2") & ";" _ & " USER=" & st.Range("I3") & ";" _ & " PASSWORD=" & st.Range("I4") & ";" End Select gDB = st.Range("I2") 'ADODB.Connection生成 Set con = New ADODB.Connection On Error GoTo Err 'MySQLに接続 con.Open connectionString Exit Sub Err: Set con = Nothing MsgBox (Err.Description) End Sub Sub getTables() Dim rs As ADODB.Recordset Dim sqlStr As String Dim rowNo As Integer Dim colNo As Integer Dim item As Variant Call initDBcon If con Is Nothing Then Exit Sub End If Application.DisplayAlerts = False For Each stname In wb.Sheets If stname.Name <> "テーブル一覧" Then stname.Delete End If Next Application.DisplayAlerts = True 'SQL文 Select Case gConDriver Case "SQL Server" sqlStr = "select table_name from information_schema.tables;" Case "MySQL ODBC 5.1 DRIVER" sqlStr = "show tables;" End Select 'SQL文実行 Set rs = con.Execute(sqlStr) 'シートデータクリア 'st.Cells.Clear st.Columns("A:A").Clear rowNo = 1 Do While rs.EOF = False 'データ抽出 For Each item In rs.Fields st.Range("A" & rowNo).Value = item.Value st.Range("A" & rowNo).Hyperlinks.Add Anchor:=st.Range("A" & rowNo), _ Address:="", TextToDisplay:=item.Value Next rowNo = rowNo + 1 '次のレコード rs.MoveNext Loop 'クローズ con.Close Set rs = Nothing Set con = Nothing Exit Sub End Sub Sub getTableData(ByVal srtTableName As String) Dim stname As Variant Dim qt As QueryTable Call initDBcon For Each stname In wb.Sheets If stname.Name = srtTableName Then Exit Sub End If Next wb.Worksheets.Add(After:=wb.Worksheets(wb.Worksheets.Count)).Name = srtTableName On Error GoTo Err Select Case gConDriver Case "MySQL ODBC 5.1 DRIVER" With wb.Worksheets(srtTableName).ListObjects.Add(SourceType:=xlSrcExternal, Source:=Array(Array( _ "ODBC;" & connectionString), Array("E=db35211_CustomerMasterList;DefaultTable=Customers;")), _ Destination:=wb.Sheets(srtTableName).Range("$A$1")).QueryTable .CommandText = Array("Select * FROM " & srtTableName) .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "テーブル_" & gDB & "_" & srtTableName .Refresh BackgroundQuery:=False End With Case "SQL Server" With wb.Worksheets(srtTableName).ListObjects.Add(SourceType:=xlSrcExternal, Source:=Array( _ "OLEDB;" & connectionString), Destination:=wb.Sheets(srtTableName).Range("$A$1")).QueryTable .CommandType = xlCmdTable .CommandText = Array("""" & gDB & """.""dbo"".""" & srtTableName & """") .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "テーブル_" & gDB & "_" & srtTableName .Refresh BackgroundQuery:=False End With End Select Exit Sub Err: Set con = Nothing MsgBox (Err.Description) End Sub
2012年8月15日水曜日
あるセルにとって、最終行、列を返す
ラベル:
vba
'rgStart 単一セル 'horv 縦か横か、デフォルト縦 '戻り値 ' 縦の場合 0→エラー ' 横の場合 ""→エラー Public Function getBounce(ByRef rgStart As Range, Optional ByVal horv As String = "V") As String Dim blnVertical As Boolean Dim rgBounce As Range blnVertical = IIf(UCase(horv) = "H", False, True) If blnVertical Then Set rgBounce = rgStart.Worksheet.Range(ConvertToLetter(rgStart.Column) & rgStart.Worksheet.Rows.Count).End(xlUp) If rgStart.Cells.Count > 1 Then getBounce = IIf(blnVertical, 0, "") Exit Function End If If rgStart.Value = "" And rgBounce.Row <= rgStart.Row Then getBounce = 0 Else getBounce = rgBounce.Row End If Exit Function Else Set rgBounce = rgStart.Worksheet.Range(ConvertToLetter(rgStart.Worksheet.Columns.Count) & rgStart.Row).End(xlToLeft) If rgStart.Value = "" And rgBounce.Column <= rgStart.Column Then getBounce = "" Else getBounce = ConvertToLetter(rgBounce.Column) End If Exit Function End If End Function Function ConvertToLetter(iCol As Integer) As String ConvertToLetter = Split(Cells(1, iCol).Address, "$")(1) End Function
大量データのCSVをソート方法
Excelのソート機能を使う方法
大量のデータの時、65535行(excel2007以下),100万?を超えた時
ちなみに、下の順番にならないためには、
クエリーをこのようにclng関数を使う
sqlではcastやconvertなど使いますが、Microsoft.Jet.OLEDB(Access)ではclngなどで文字列を数字に変換する
Dim wb As New Workbook Dim st As New Worksheet Dim sortField As Range Dim rg As Range 'csvファイルを開く Set wb = Workbooks.Open("c:\abc.csv") 'シートをセット(csvファイルはsheet1しかない) Set st = wb.Sheets(1) For Each rg In st.Range("1:1") If rg = "容器番号" Then 'ソートする列を探す Set sortField = rg Exit For End If Next 'ソート(容器番号) st.UsedRange.Sort Key1:=sortField, Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin
大量のデータの時、65535行(excel2007以下),100万?を超えた時
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source='c:\';" & _ "Extended Properties='Text;HDR=YES'" 'c:\abc.csvというファイルをデータベーステーブルとして開く、「容器番号」という列を昇順でソート Set rs = cn.Execute("SELECT * FROM abc.csv ORDER BY clng(容器番号) ASC") Do Until rs.EOF 'データを書き出しなどの処理 '... rs.MoveNext Loop"HDR=YES"は最初の行はタイトルという意味。
ちなみに、下の順番にならないためには、
1
10
2
3
...
クエリーをこのようにclng関数を使う
SELECT * FROM abc.csv ORDER BY clng(容器番号) ASC
sqlではcastやconvertなど使いますが、Microsoft.Jet.OLEDB(Access)ではclngなどで文字列を数字に変換する
Excelのソートの話
Excel2007のソート
Order:=xlAscending→昇順、xlDescending降順
.SetRange Range("A5:CO90")→並び替え範囲
.Header = xlNo→ヘッダーありなし(xlYes,xlNo)、xlGuessの利用は避けたほうが無難。
Excel XP(2002)のソート
ActiveWorkbook.Worksheets("201210期").Sort.SortFields.Clear Worksheets("201210期").Sort.SortFields.Add Key:=Worksheets("201210期").Range("B4"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With Worksheets("201210期").Sort .SetRange Worksheets("201210期").Range("A5:CO90") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End WithRange("B4")→並び替え列
Order:=xlAscending→昇順、xlDescending降順
.SetRange Range("A5:CO90")→並び替え範囲
.Header = xlNo→ヘッダーありなし(xlYes,xlNo)、xlGuessの利用は避けたほうが無難。
Excel XP(2002)のソート
Worksheets("201210期").Range("A5:CO90").Sort Key1:=Worksheets("201210期").Range("B4"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYinExcelは下位互換ですので、XPも2007も2010も使えるためには、excel xpのコードで実装したほうが無難
2012年8月2日木曜日
ランダム数字のcsvを作成するツール
固定でc:\abc.csvです
Sub csvRnd() Dim txt As Integer Dim lngidx As Long Dim lngStart As Long Dim lngEnd As Long txt = FreeFile Open "c:\abc.csv" For Output As #txt Write #txt, "ID", "Name" lngStart = 1 lngEnd = 120000 For lngidx = lngStart To lngEnd Write #txt, lngidx, Int((lngEnd - lngStart + 1) * Rnd + lngStart) Next Close #txt MsgBox "completed!", vbInformation End Sub
2012年7月27日金曜日
google apps engineでカスタマドメインいろいろメモ
ややこしくて、箇条書きでメモしていく
前提:
・有料はgoogle apps for businessサービスを利用している「abc.com」とします
・管理画面から「abc.com」の「google apps engine」(GAE)を開通
・GAEで「xyz-jp.appspot.com」というappを作成、URLはhttp://xyz-jp.appspot.comです
・ドメイン「xyz.com」をお名前.comから購入
やりたいこと:
・「xyz.com」をGAEのURLにする
・無料でやること
最初やったこと:
・DNSで「www」ホストで、タイプ「CNAME」で、値を「xyz-jp.sppspot.com」にしてみたが、「www.xyz.com」を叩くとgoogle.comのトップ画面に飛んでしまう、そう簡単ではないはず、GAEは登録されていないドメインに飛ばせない仕組みになっているみたい。
次考えた手は:
・「abc.com」のgoogle appsドメイン管理画面で、xyz.comを追加し
・指定のキーをDNSでTXTレコードとして登録し、xyz.comを所有していることを証明(浸透結構時間かかった)
→nslookup -type=TXT xyz.comでキー登録されたがどうかを確認できる
・ここで一つビックリしたことを判明、有料ドメインabc.comにxyz.comを登録したら、xyz.comも有料になります!!!つまり、xyz.comでユーザを作成にはabc.comのライセンスを使うことになります!
→google appsは10アカウント以下なら無料で使えるはずです。
解決1(結局ダメでした)方法と経緯:
・abc.comに1ライセンス余っているから、xyz.comの管理者「root@xyz.com」を取り敢えず作成して、管理画面からxyz.comを有料プランから無料プランに変更(できるかできないかやってみないと分からない)
・しかし、ユーザは作成したが、管理者にはならず、xyz.comの管理画面に入れない
・abc.comの管理画面からなんと「root@xyz.com」というユーザが見えない!ライセンスは使った状態でした。
・ここで止まった、カスタムサービスに電話した
解決2:
・カスタムサービスのお姉ちゃんによると、xyz.comは有料abc.comドメインの追加されて、xyz.comも有料扱い
・xyz.comはabc.comに属しているので、abc.comの管理画面では普通にxyz.comのユーザ見えて、管理できるはず
・しかし、見えないのはもしかしてバグ?
・お姉ちゃんにヒントもらって、アカウント検索で「root@xyz.com」を検索したらちゃんと出てきて、削除した
・abc.comからxyz.comを削除した
・再度普通のgoogle appsからxyz.comを追加、所有権を証明→xyz.com無料でgoogle apps利用できる状況に
・abc.comのGAE「xyz-jp.appspot.com」のapplication settingに「add domain」して「xyz.com」を追加
・「xyz.com」のgoogle apps登録画面が表示され、利用契約を同意して、DNSでホストに「www」を追加し、タイプ「CNAME」にしてで、値として「ghs.googlehosted.com」を登録
・浸透して、www.xyz.comをアクセスするとちゃんと表示された...
・ふーーっ!
感想:
1.有料GAにドメイン追加したら、そのドメインのGAも無条件に有料になる
2.GAのユーザ管理画面にバグがあった、アカウントが表示されないときは、検索してみて
3.今回はabc.comとxyz.com2つのドメインがあって、ややこしくなったけど、単一ドメインは簡単です
いやー、雑乱でゴメンナサイ...orz
前提:
・有料はgoogle apps for businessサービスを利用している「abc.com」とします
・管理画面から「abc.com」の「google apps engine」(GAE)を開通
・GAEで「xyz-jp.appspot.com」というappを作成、URLはhttp://xyz-jp.appspot.comです
・ドメイン「xyz.com」をお名前.comから購入
やりたいこと:
・「xyz.com」をGAEのURLにする
・無料でやること
最初やったこと:
・DNSで「www」ホストで、タイプ「CNAME」で、値を「xyz-jp.sppspot.com」にしてみたが、「www.xyz.com」を叩くとgoogle.comのトップ画面に飛んでしまう、そう簡単ではないはず、GAEは登録されていないドメインに飛ばせない仕組みになっているみたい。
次考えた手は:
・「abc.com」のgoogle appsドメイン管理画面で、xyz.comを追加し
・指定のキーをDNSでTXTレコードとして登録し、xyz.comを所有していることを証明(浸透結構時間かかった)
→nslookup -type=TXT xyz.comでキー登録されたがどうかを確認できる
・ここで一つビックリしたことを判明、有料ドメインabc.comにxyz.comを登録したら、xyz.comも有料になります!!!つまり、xyz.comでユーザを作成にはabc.comのライセンスを使うことになります!
→google appsは10アカウント以下なら無料で使えるはずです。
解決1(結局ダメでした)方法と経緯:
・abc.comに1ライセンス余っているから、xyz.comの管理者「root@xyz.com」を取り敢えず作成して、管理画面からxyz.comを有料プランから無料プランに変更(できるかできないかやってみないと分からない)
・しかし、ユーザは作成したが、管理者にはならず、xyz.comの管理画面に入れない
・abc.comの管理画面からなんと「root@xyz.com」というユーザが見えない!ライセンスは使った状態でした。
・ここで止まった、カスタムサービスに電話した
解決2:
・カスタムサービスのお姉ちゃんによると、xyz.comは有料abc.comドメインの追加されて、xyz.comも有料扱い
・xyz.comはabc.comに属しているので、abc.comの管理画面では普通にxyz.comのユーザ見えて、管理できるはず
・しかし、見えないのはもしかしてバグ?
・お姉ちゃんにヒントもらって、アカウント検索で「root@xyz.com」を検索したらちゃんと出てきて、削除した
・abc.comからxyz.comを削除した
・再度普通のgoogle appsからxyz.comを追加、所有権を証明→xyz.com無料でgoogle apps利用できる状況に
・abc.comのGAE「xyz-jp.appspot.com」のapplication settingに「add domain」して「xyz.com」を追加
・「xyz.com」のgoogle apps登録画面が表示され、利用契約を同意して、DNSでホストに「www」を追加し、タイプ「CNAME」にしてで、値として「ghs.googlehosted.com」を登録
・浸透して、www.xyz.comをアクセスするとちゃんと表示された...
・ふーーっ!
感想:
1.有料GAにドメイン追加したら、そのドメインのGAも無条件に有料になる
2.GAのユーザ管理画面にバグがあった、アカウントが表示されないときは、検索してみて
3.今回はabc.comとxyz.com2つのドメインがあって、ややこしくなったけど、単一ドメインは簡単です
いやー、雑乱でゴメンナサイ...orz
2012年7月25日水曜日
再帰的(サブフォルダも含む)にあるディレクトリ配下のファイル一覧を取得、配列の結合(マージ)メッソドもセットで
ラベル:
vba
バグがあったら、教えてくれるとありがたい
☆参照にscriptingは必要!☆
再帰的(サブフォルダも含む)にあるディレクトリ配下のファイル一覧を取得メッソド
☆参照にscriptingは必要!☆
再帰的(サブフォルダも含む)にあるディレクトリ配下のファイル一覧を取得メッソド
Function ListUp(FolderSpec) As Variant Dim File_Collection As Object Dim File_List As Variant Dim Folder_Collection As Object Dim Folder_List As Variant Dim result As Variant Dim subResult As Variant Dim subResultAppend As Variant If Not CreateObject("Scripting.FileSystemObject").FolderExists(FolderSpec) Then ListUp = Empty Exit Function End If Set File_Collection = _ CreateObject("Scripting.FileSystemObject") _ .GetFolder(FolderSpec).Files For Each File_List In File_Collection push FolderSpec & "\" & File_List.Name, result Next Set Folder_Collection = _ CreateObject("Scripting.FileSystemObject") _ .GetFolder(FolderSpec).SubFolders For Each Folder_List In Folder_Collection subResultAppend = ListUp(FolderSpec & "\" & Folder_List.Name) subResult = ArrayMerge(subResultAppend, subResult, True) Next ListUp = ArrayMerge(subResult, result) End Function配列最後に要素を追加していくメッソド
'this is a function to push an element into an array Public Function push(ByVal val As Variant, ByRef arr As Variant) As Integer If IsArray(arr) Then ReDim Preserve arr(UBound(arr) + 1) Else ReDim arr(0) End If arr(UBound(arr)) = val push = UBound(arr) End Function配列を結合するメソッド、追加(ダブリチェックなし)とマージ(ダブリチェックあり)モードあり、最後の引数は結語した後に、元配列を消す設定
Public Function ArrayMerge(ByRef sourceArray As Variant, ByRef destArray As Variant, Optional appendMode As Boolean = False, Optional KillSource As Boolean = False) As Variant Dim sDic As New Scripting.Dictionary Dim v As Variant Dim tempArray As Variant Dim idx As Long '片方だけなら、片方を返す If (Not IsArray(sourceArray)) And (Not IsArray(destArray)) Then ArrayMerge = Null Exit Function ElseIf Not IsArray(sourceArray) Then ArrayMerge = destArray Exit Function ElseIf Not IsArray(destArray) Then ArrayMerge = sourceArray Exit Function End If 'ダブリチェックしない、ただ追加していくモード If appendMode Then ReDim tempArray(UBound(sourceArray) + UBound(destArray) + 1) idx = 0 For Each v In sourceArray tempArray(idx) = v idx = idx + 1 Next For Each v In destArray tempArray(idx) = v idx = idx + 1 Next 'ダブリチェックする、Mergeモード。ないものだけ追加していくモード Else idx = 0 For Each v In sourceArray sDic.Add v, idx idx = idx + 1 Next For Each v In destArray If Not sDic.Exists(v) Then sDic.Add v, idx idx = idx + 1 End If Next tempArray = sDic.Keys End If If KillSource = True Then Erase sourceArray ArrayMerge = tempArray End Function使い方はこう、"c:\windows"みたいな深すぎフォルダーは使わないほうがいいね、timeoutっぽい
dim fileList as Variant fileList = ListUp("c:\your_path")
2012年7月23日月曜日
urlのパラメータを取得するfunction、デフォルト指定もある
ラベル:
javascript
<!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="ja" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="imagetoolbar" content="no" /> <title>TEST</title> <!-- JS --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript"> function getQuerystring(key, default_) { if (default_==null) default_=""; key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var regex = new RegExp("[\\?&]"+key+"=([^&#]*)"); var qs = regex.exec(window.location.href); if(qs == null) return default_; else return qs[1]; } $(function(){ alert(getQuerystring('msg', '')); }); </script> </head> <body> http://localhost/phpbox/getQueryParam.html?msg=hello world! </body> </html>会社の友たちが書いてた、便利ですので、シェアする
2012年6月28日木曜日
Rを使ってみた
ラベル:
R
x <- c(1:5); y <- x # create some data
par(pch=22, col="red") # plotting symbol and color
par(mfrow=c(2,4)) # all plots on one page
opts = c("p","l","o","b","c","s","S","h")
for(i in 1:length(opts)){
heading = paste("type=",opts[i])
plot(x, y, type="n", main=heading)
lines(x, y, type=opts[i])
}
実行後結果
SQL日付フォーマットの変換
ラベル:
sql
SQL日付フォーマットの変換
引用、ありがとう!
[yyyyMMdd]
SELECT CONVERT(char(8), GETDATE(), 112);
[yyyyMM]
SELECT CONVERT(char(6), GETDATE(), 112);
[hhmmss]
SELECT REPLACE(CONVERT(varchar(8), GETDATE(), 8), ':', '');
[hhmmssfff]
SELECT REPLACE(CONVERT(varchar(12), GETDATE(),114), ':', '');
[次月yyyyMMdd]
SELECT CONVERT(char(8), DateAdd(Month, 1 , GETDATE()), 112);
引用、ありがとう!
crontabの設定
ラベル:
linux
crontabの設定
>crontab -e
* * * * * 実行コマンド
- - - - -
| | | | |
| | | | +----- 曜日 (0 - 6) 日曜日は0
| | | +------- 月 (1 - 12)
| | +--------- 日 (1 - 31)
| +----------- 時間 (0 - 23)
+------------- 分 (0 - 59)
書き方 | 効果 |
---|---|
43 23 * * * | 23:43に実行 |
12 05 * * * | 05:12に実行 |
0 17 * * * | 17:00に実行 |
0 17 * * 1 | 毎週月曜の 17:00に実行 |
0,10 17 * * 0,2,3 | 毎週日,火,水曜の 17:00と 17:10に実行 |
0-10 17 1 * * | 毎月 1日の 17:00から17:10まで 1分毎に実行 |
0 0 1,15 * 1 | 毎月 1日と 15日と 月曜日の 0:00に実行 |
42 4 1 * * | 毎月 1日の 4:42分に実行 |
0 21 * * 1-6 | 月曜日から土曜まで 21:00に実行 |
0,10,20,30,40,50 * * * * | 10分おきに実行 |
*/10 * * * * | 10分おきに実行 |
* 1 * * * | 1:00から 1:59まで 1分おきに実行 |
0 1 * * * | 1:00に実行 |
0 */1 * * * | 毎時 0分に 1時間おきに実行 |
0 * * * * | 毎時 0分に 1時間おきに実行 |
2 8-20/3 * * * | 8:02,11:02,14:02,17:02,20:02に実行 |
30 5 1,15 * * | 1日と 15日の 5:30に実行 |
2012年6月25日月曜日
sql serverのinsert文では複数組valuesを対応しない
ラベル:
sql
sql serverでは、複数insert文はできないことを知った_| ̄|● ガックリ
mysqlなら下のコードはすんなり行ったと思うが
sql serverではinsert文を分けるしかないか
まぁ関係ない関係ない.
mysqlなら下のコードはすんなり行ったと思うが
insert into mytable (id,name,sex,age) values (1,'john','male',22),(2,'jane','female',21);
sql serverではinsert文を分けるしかないか
insert into mytable (id,name,sex,age) values (1,'john','male',22);
insert into mytable (id,name,sex,age) values (2,'jane','female',21);
まぁ関係ない関係ない.
2012年6月19日火曜日
centos 5.8(64bit) net install
ラベル:
linux
centos 5.8(64bit) net install
first download net_install iso from
http://mirror.averse.net/centos/5.8/isos/x86_64/CentOS-5.8-x86_64-netinstall.iso
then install:
install method: http
web site:mirror.averse.net
centos path:/centos/5.8/os/x86_64/
first download net_install iso from
http://mirror.averse.net/centos/5.8/isos/x86_64/CentOS-5.8-x86_64-netinstall.iso
then install:
install method: http
web site:mirror.averse.net
centos path:/centos/5.8/os/x86_64/
2012年6月5日火曜日
mysqlでdate_formatを使ったら、日付が文字化けしてしまった、その対策
ラベル:
mysql
datetime型の項目なのに、なぜかdate_formatを使うと文字化けしてしまう、
状況として、DBはmysql、databaseのencodeはutf8、そしてOSのencodeはeuc
問題があったSQL
解決策はこれ
mysqlってややこしいね
状況として、DBはmysql、databaseのencodeはutf8、そしてOSのencodeはeuc
問題があったSQL
select date_format(a.as_of_date,""%Y%m%d"") as_of_date from tb1 where 1
解決策はこれ
select convert(date_format(a.as_of_date,""%Y%m%d"") using utf8) as_of_date from tb1 where 1
mysqlってややこしいね
2012年5月31日木曜日
スクリプトまたはコマンドラインでGoogleドライブにファイルをアップロードする
ラベル:
google docs
Javaの実行可能の環境は必要だ、まだの方はここからダウンロードしてインストールしてください。
そして、google-docs-uploadをダウンロードします。
あとはコマンドラインで呼び出すだけだ、windows版
「google-docs-upload-1.4.7.jar」の1.4.7の部分はバージョンですから、ダウンロードしたバージョンに書き換えてください。
このコマンドはC直下のtestディレクトリをまること(再帰的に)googleドライブ(旧googleドキュメント)のtestフォルダにアップロードする。
ドライブ側testディレクトリがなければ作成されます。サブディレクトリもちゃんとそのままドライブ側で作成されます。また、あくまでc:\test以下のものを再帰的にドライブにアップロードするから、
ドライブ側では/test/test/...2重ディレクトリになっていない。
そして、google-docs-uploadをダウンロードします。
あとはコマンドラインで呼び出すだけだ、windows版
C:\>java -jar "C:\paht\to\google-docs-upload-1.4.7.jar" "c:\\test\\" --recursive --username "yourname@gmail.com" --password "password" --protocol https --skip-all --remote-folder "/test"
「google-docs-upload-1.4.7.jar」の1.4.7の部分はバージョンですから、ダウンロードしたバージョンに書き換えてください。
このコマンドはC直下のtestディレクトリをまること(再帰的に)googleドライブ(旧googleドキュメント)のtestフォルダにアップロードする。
ドライブ側testディレクトリがなければ作成されます。サブディレクトリもちゃんとそのままドライブ側で作成されます。また、あくまでc:\test以下のものを再帰的にドライブにアップロードするから、
ドライブ側では/test/test/...2重ディレクトリになっていない。
2012年5月22日火曜日
bloggerのファビコン(favicon)の設定方法が変わった
最近このブログのファビコンが表示されなくなった。
調べたら、原因はbloggerのfavicon設定方法が変わった...古いやり方はここ
専用のメニューができているらしい。この図で説明できるかと思う。
調べたら、原因はbloggerのfavicon設定方法が変わった...古いやり方はここ
専用のメニューができているらしい。この図で説明できるかと思う。
2012年5月14日月曜日
jquery mobileでanayticsのチャートを表示するサンプル
ラベル:
analytics,
jquerymobile,
php
Google analytics for mobile using jQuery mobile and php | jqueryload.com
こんなのを発見したので、やってみた。
構造はシンプルで、2つファイルのみです。
gapi.class.php
index.php
ここからダウンロード
index.phpの一部を変更する
とにかくこうしたら表示しました。
もしこのようなエラーが起こったら
php.iniの「extension=php_curl.dll」を有効にして、apacheを再起動すれば治るはず
こんなのを発見したので、やってみた。
構造はシンプルで、2つファイルのみです。
gapi.class.php
index.php
ここからダウンロード
index.phpの一部を変更する
// CONFIG // Please complete this section before run the script // this user and password is only for the application $applicationUser="yourname";//ベーシック認証、コメントアウトしても問題ない $applicationPassword="password";//ベーシック認証、コメントアウトしても問題ない // analytics account information $analyticsUser="yourusername@gmail.com";←anayticsのgmailアドレス $analyticsPassword="password";←パスワード $profileId="56997226"; //URLで確認できます、下の図を参照 // sites to add, could be more than one // replace your site name and the "000000" values // site name analytics ID $site['kagen88.blogspot.com']='56997226';//profileIdと一緒? //you can add more sites in the same screen. //$site['jQueryLoad.com']='000000'; //$site['Hashake.com']='000000'; // end CONFIGprofileIdの確認方法
とにかくこうしたら表示しました。
もしこのようなエラーが起こったら
Fatal error: Uncaught exception 'Exception' with message 'GAPI: Failed to
authenticate user. Error: "Request failed, fopen provides no further
information"' in ...
php.iniの「extension=php_curl.dll」を有効にして、apacheを再起動すれば治るはず
androidのwifiがadhocに対応しない件(テザリングtethering)
ラベル:
android
最近、android端末2台持ちすることになりました。一台(L-04C)は定額950円のIIJmio、もう一台古い(ht-03a)です。二台ともroot済み。
L-04Cをディザリングすることになりました。
ディザリング(テザリングtethering)方法は簡単なので割愛する。いろいろアプリありますが、やっぱりWireless Tether for Root Usersが一番ですね。
しかしディザリングのwifiはadhoc、日本のandorid端末そのままではadhocのwifi対応していない。(そもそもwifiスキャンしても出てこない)
ネットで調べた、hackする方法が書いていたので、やってみました。要するにadhoc対策済みのwpa_supplicantを入れ替えて、再起動する。
adhoc対策済みwpa_supplicantはここからダウンロード※ダウンロードしたら解凍してね。
まずは下記ステップを済ませよう
①android-sdkをインストール済み、SDKの中にplatform-toolsもインストール済み
②携帯をUSBケーブルでPCに繋き、ドライバもインストール済み
③rootを取得済み
④先程ダウンロードしたadhoc対策済みwpa_supplicantをSDカードに入れる
それではいよいよwpa_supplicantの改造:
cmdでDOSコンソールを起動して、例えば
追加
最近中華パットを買いました、ainolの精霊2、とっても快適でした。
早速「刷機」しまして、rootをとって、adhocも対応させました。
①「刷機」はここ、http://www.ainol.com/plugin.php?identifier=ainol&module=download&action=info&downloadid=103基本言われたことをやればできる。
一つメモしたいことは、音量減キーを押しながら、電源キーを長押しすれば、Wipe画面に入ります、そこからは音量減キーが移動キーで、音量増キーは確定キーです。
②root取るもここです。http://bbs.ainol.com/forum.php?mod=viewthread&tid=5083
③adhocの対応はここです。http://bbs.ainol.com/forum.php?mod=viewthread&tid=6643&extra=page%3D1、Android Terminal Emulatorでコンソールからやるのがおすすめです。wpa_supplicantはここからダウンロードするhttp://bbs.ainol.com/forum.php?mod=viewthread&tid=6643、上書きするときに「read-only file system」とか言われたら、
あとはダウンロードや解凍するときに、不完全なファイルができてしまう可能性はあるので、一回でダメだったら、もう一回wpa_supplicantダウンロードからやり直したほうがいいかも、自分はそこでちょっとハマった。
L-04Cをディザリングすることになりました。
ディザリング(テザリングtethering)方法は簡単なので割愛する。いろいろアプリありますが、やっぱりWireless Tether for Root Usersが一番ですね。
しかしディザリングのwifiはadhoc、日本のandorid端末そのままではadhocのwifi対応していない。(そもそもwifiスキャンしても出てこない)
ネットで調べた、hackする方法が書いていたので、やってみました。要するにadhoc対策済みのwpa_supplicantを入れ替えて、再起動する。
adhoc対策済みwpa_supplicantはここからダウンロード※ダウンロードしたら解凍してね。
まずは下記ステップを済ませよう
①android-sdkをインストール済み、SDKの中にplatform-toolsもインストール済み
②携帯をUSBケーブルでPCに繋き、ドライバもインストール済み
③rootを取得済み
④先程ダウンロードしたadhoc対策済みwpa_supplicantをSDカードに入れる
それではいよいよwpa_supplicantの改造:
cmdでDOSコンソールを起動して、例えば
cd D:\android-sdk-windows\platform-tools →もしこのフォルダーがなければ、多分platform-toolsがまだインストールされていない。
D:\android-sdk-windows\platform-tools>adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
$ su →Rootになる、ここで、携帯権限を与えるメッセージが出るので、許可してあげて下さい。
su
# →「#」が出たらオッケー
# cd /sdcard/hack ←さっき作ったhackフォルダーへ移動。
# ls -l ←対策済みwpa_supplicantファイルを確認する
----rw-rw- system system 235788 2010-08-14 18:17 wpa_supplicant
# ls -l /system/bin/wpa* →現在のファイルを確認
----rw-rw- system system 306040 2012-05-11 01:41 wpa_supplicant
# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system →書き込め権限を開放する
# busybox cp /system/bin/wpa_supplicant /sdcard/hack/wpa_supplicant.org →現在の設定ファイルをバックアップ
(一般では、「busybox cp」では普通にコピーしてくれるはずが、ht03aのbusyboxが古かったせいか、busyboxのcpコマンド反応がないので、仕方なく下記のコマンドを使った)
(#cat /system/bin/wpa_supplicant > /sdcard/hack/wpa_supplicant.org)
# rm /system/bin/wpa_supplicant →バックアップとったら、現在の設定ファイルを削除する
# busybox cp /sdcard/hack/wpa_supplicant /system/bin/ →adhoc対応済み設定ファイルを差し替え
(busyboxダメなら #cat /sdcard/hack/wpa_supplicant > /system/bin/wpa_supplicant)
# chmod 775 /system/bin/wpa_supplicant →権限を与える
#reboot →携帯を再起動したら、ディザリングのadhoc wifiをスキャンできるはず、何かおかしくなったら、バックアップしたwpa_supplicantを元に戻して、再起動すれば治るはず。
追加
最近中華パットを買いました、ainolの精霊2、とっても快適でした。
早速「刷機」しまして、rootをとって、adhocも対応させました。
①「刷機」はここ、http://www.ainol.com/plugin.php?identifier=ainol&module=download&action=info&downloadid=103基本言われたことをやればできる。
一つメモしたいことは、音量減キーを押しながら、電源キーを長押しすれば、Wipe画面に入ります、そこからは音量減キーが移動キーで、音量増キーは確定キーです。
②root取るもここです。http://bbs.ainol.com/forum.php?mod=viewthread&tid=5083
③adhocの対応はここです。http://bbs.ainol.com/forum.php?mod=viewthread&tid=6643&extra=page%3D1、Android Terminal Emulatorでコンソールからやるのがおすすめです。wpa_supplicantはここからダウンロードするhttp://bbs.ainol.com/forum.php?mod=viewthread&tid=6643、上書きするときに「read-only file system」とか言われたら、
$su
#mount -o rw,remount rootfs /system/
あとはダウンロードや解凍するときに、不完全なファイルができてしまう可能性はあるので、一回でダメだったら、もう一回wpa_supplicantダウンロードからやり直したほうがいいかも、自分はそこでちょっとハマった。
2012年5月3日木曜日
グーグルスクリプトエディタ
ラベル:
google docs,
裏技
現象:
google script editorでプロジェクトを削除できないことがあります。
「削除」ボタンを押してもなにも反応ないままです、これはバグでしょうか。
対策:
削除したいプロジェクトのソースコードを全部削除して保存する、
そしてプロジェクトが削除できるようになるらしい。
google script editorでプロジェクトを削除できないことがあります。
「削除」ボタンを押してもなにも反応ないままです、これはバグでしょうか。
対策:
削除したいプロジェクトのソースコードを全部削除して保存する、
そしてプロジェクトが削除できるようになるらしい。
2012年4月30日月曜日
javascriptで現在時刻をyyyymmddhhiissで表示
ラベル:
javascript
function getNow(){ nowtime = new Date(); yy = nowtime.getYear(); mm = nowtime.getMonth() + 1; dd = nowtime.getDate(); hh = nowtime.getHours(); if(hh < 10){hh = "0" + hh;} ii = nowtime.getMinutes(); if(ii < 10){ii = "0" + ii;} ss = nowtime.getSeconds(); if(ss < 10){ss = "0" + ss;} if (yy < 2000) { yy += 1900; } if (mm < 10) { mm = "0" + mm; } if (dd < 10) { dd = "0" + dd; } return (yy + "/" + mm + "/" + dd + " " + hh + ":" + ii + ":" + ss); } document.write(getNow());
loading...
2012年4月22日日曜日
Gmailから他のGoogle Appsアカウントを追加
ラベル:
gmail
① まずは追加したいアカウントの「設定」→「メール転送と POP/IMAP」→「POP ダウンロード」からPOPを有効にする
② 追加先のGmailアカウントの「設定」→「アカウントとインポート」→「自分の POP3 メール アカウントを追加」
③ メールアドレス入力して、最後はPOPの設定、そして保存。
andoridで使っているメールクライアントk9mailは、なぜかpop方式がうまくいかないみたい、imapを使うしかありません(for businessと無料版は一緒みたい):
POP受信設定
POP サーバー: pop.gmail.com
セキュリティの種類: SSL(常に使用)
アカウント:yourname@yourdomain.com
パスワード:*********
認証タイプ:PLAIN
ポート:995
IMAP受信設定
IMAP サーバー: imap.gmail.com
セキュリティの種類: SSL(常に使用)
アカウント:yourname@yourdomain.com
パスワード:*********
認証タイプ:PLAIN
ポート: 993
SMTP送信設定
SMTP サーバー: smtp.gmail.com
セキュリティの種類: SSL(常に使用)
認証必要
アカウント:yourname@yourdomain.com
パスワード:*********
セキュリティ設定:AUTOMATIC
ポート: 465
ちなみに、k9mailのアカウント削除は「拡張機能」のなかにあった、探すのが時間かかった…
以上。
② 追加先のGmailアカウントの「設定」→「アカウントとインポート」→「自分の POP3 メール アカウントを追加」
③ メールアドレス入力して、最後はPOPの設定、そして保存。
andoridで使っているメールクライアントk9mailは、なぜかpop方式がうまくいかないみたい、imapを使うしかありません(for businessと無料版は一緒みたい):
POP受信設定
POP サーバー: pop.gmail.com
セキュリティの種類: SSL(常に使用)
アカウント:yourname@yourdomain.com
パスワード:*********
認証タイプ:PLAIN
ポート:995
IMAP受信設定
IMAP サーバー: imap.gmail.com
セキュリティの種類: SSL(常に使用)
アカウント:yourname@yourdomain.com
パスワード:*********
認証タイプ:PLAIN
ポート: 993
SMTP送信設定
SMTP サーバー: smtp.gmail.com
セキュリティの種類: SSL(常に使用)
認証必要
アカウント:yourname@yourdomain.com
パスワード:*********
セキュリティ設定:AUTOMATIC
ポート: 465
ちなみに、k9mailのアカウント削除は「拡張機能」のなかにあった、探すのが時間かかった…
以上。
有料なgoogle apps for businessから無料なgoogle appsにダウングレード
ラベル:
google apps
間違ってgoogle apps for businessを申し込んでしまったら、使用期30日以内、利用者アカウントが10人未満なら、簡単に無料版に切り替えるらしい。
「ドメイン設定」→「登録と請求」で上記条件を満たしていれば、「Google Apps for Business をキャンセル」というリンクが表示されます。googleっていいやつだね orz
「ドメイン設定」→「登録と請求」で上記条件を満たしていれば、「Google Apps for Business をキャンセル」というリンクが表示されます。googleっていいやつだね orz
2012年4月21日土曜日
フォームからPOSTし、googleスプレットシートを更新するサンプル
ラベル:
api,
google docs
ここを参考した、ありがとう御座いました。
つまり、googleスプレットシートをデータベースのように利用する。
① まず、googleドキュメントでスプレットシートを新規作成、シート名を"DATA"に変更する
② ツール → Script Editorを開け、このサイトからスクリプトをコピペする
③ スクリプトのfunction名「doGet」を「doPost」に変更して、保存、プロジェクト名は任意
④ 関数選択で「setUp」を選択し、実行、ポップアップした「Authorization required」にAuthorizeし、完了メッセージのページが表示される
⑤ もう一回「setUp」を実行、今回は何も表示しない
⑥ 「公開」→「サービスとして公開」、ポップアップ窓で、「Allow anyone to invoke this service」、「Allow anonymous access」、「Enable Service」をチェック、URLをコピー(重要)、最後「保存」
⑦ スプレットシートに戻って、A,B,C列の一行目に「name」、「age」、「sex」を入力
⑧ そしてHTMLを作る、UTF8で編集してね
スプレットシートのURL、登録後、確認してみてください。
https://docs.google.com/spreadsheet/ccc?key=0Akp-AdfTe-rCdE4weUFsMU1BUWlKMkNLLXBDQ2hiSGc
つまり、googleスプレットシートをデータベースのように利用する。
① まず、googleドキュメントでスプレットシートを新規作成、シート名を"DATA"に変更する
② ツール → Script Editorを開け、このサイトからスクリプトをコピペする
③ スクリプトのfunction名「doGet」を「doPost」に変更して、保存、プロジェクト名は任意
④ 関数選択で「setUp」を選択し、実行、ポップアップした「Authorization required」にAuthorizeし、完了メッセージのページが表示される
⑤ もう一回「setUp」を実行、今回は何も表示しない
⑥ 「公開」→「サービスとして公開」、ポップアップ窓で、「Allow anyone to invoke this service」、「Allow anonymous access」、「Enable Service」をチェック、URLをコピー(重要)、最後「保存」
⑦ スプレットシートに戻って、A,B,C列の一行目に「name」、「age」、「sex」を入力
⑧ そしてHTMLを作る、UTF8で編集してね
<html> <head> <title>GoogleスプレットシートAPIテスト</title> <script type="text/javascript"> <!-- function validateForm(){ if(document.getElementById("name_input").value==""){ alert("なんか書いてくださいよ!"); return false; }else{ document.getElementById("formID").submit(); document.getElementById("thankyou").style.display=""; document.getElementById("thankyou").innerHTML="登録ありがとう御座いました!"; document.getElementById("formID").style.display="none"; } } --> </script> </head> <body> <div style="display:none;" id="thankyou"></div> <iframe src="#" id="fake-target" name="fake-target" style="width:0px; height:0px; border:0px;"> </iframe> <form id="formID" action="https://docs.google.com/macros/exec?service=AKfycbzzoShgn4aUhFE4HLhUk2c41OCsMX8GOBru-nep" method="post" target="fake-target"> 名前:<input type="text" name="name" id="name_input"/> 年齢: <select name="age" id="age_input"> <option value="10">10歳</option> <option value="20">20歳</option> <option value="30">30歳</option> <option value="40">40歳</option> <option value="50">50歳</option> </select> 性別: <input type="radio" name="sex" id="sex_m" value="male" />男 <input type="radio" name="sex" id="sex_f" value="female" />女 <button onClick="javascript:validateForm();">送信</button> </form> </body> </html>⑨ ここのinputエレメントのname属性はそれそれスプレットシートに対応していますよ
スプレットシートのURL、登録後、確認してみてください。
https://docs.google.com/spreadsheet/ccc?key=0Akp-AdfTe-rCdE4weUFsMU1BUWlKMkNLLXBDQ2hiSGc
デモ、実際やってみてください!
2012年4月17日火曜日
Google Docs スプレットシートAPIテスト
ラベル:
cloud,
google docs,
javascript
<html> <head> <title>GoogleスプレットシートAPIテスト</title> </head> <body> <div id="data"></div> <script type="text/javascript"> <!-- function drawTable(json) { var table = document.createElement('table'); table.setAttribute('id', 'output'); var tbody = document.createElement('tbody'); var tr; for (var i=0; i < json.feed.entry.length; i++) { var entry = json.feed.entry[i]; if (entry.gs$cell.col == '1') { if (tr != null) { tbody.appendChild(tr); } tr = document.createElement('tr'); } var td = document.createElement('td'); td.appendChild(document.createTextNode(entry.content.$t)); tr.appendChild(td); } tbody.appendChild(tr); table.appendChild(tbody); document.getElementById('data').appendChild(table); } --> </script> <script type="text/javascript" src="https://spreadsheets.google.com/feeds/cells/0Akp-AdfTe-rCdDZEN2ZIWFMyMWhCV2dsRlkxb1N6bGc/od6/public/values?alt=json-in-script&callback=drawTable"></script> </body>基本ここのパクリが、時間あったらもうちょっと遊んでみる
Google Docsの公開URLは
https://docs.google.com/spreadsheet/ccc?key=0Akp-AdfTe-rCdDZEN2ZIWFMyMWhCV2dsRlkxb1N6bGc
一般公開しているので、変なこと書き込まないでいただきたいm(_ _)m
結果はこれ:2011年世界GDP順位だそうです
Google Spreadsheets API
2012年4月4日水曜日
凄すぎるcssのみで綺麗カッコイイボタンが作れちゃうオンラインツール
http://www.cssbutton.me/←ここです、マジいい、使える。
こんなのが作れちゃう、cssだけで!
※IEはダメだけど…どうでもいいけど…
こんなのが作れちゃう、cssだけで!
※IEはダメだけど…どうでもいいけど…
発射
押して!
.sexybutton { background: -webkit-gradient(linear, left top, left bottom, color-stop(23%,#f20505), color-stop(100%,#cf0606)); background: -moz-linear-gradient(center top, #f20505 23%, #cf0606 100%); -webkit-box-shadow: 2px 3px 4px #2b2b2b; -moz-box-shadow: 2px 3px 4px #2b2b2b; box-shadow: 2px 3px 4px #2b2b2b; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; padding: 10px 10px; margin: 5px 5px; border-color: #cde2fc; border-width: 1px; border-style: solid; font-weight: bold; width: 150px; height: 20px; text-align: center; vertical-align: middle; color: #FFFFFF }
Google
2012年3月28日水曜日
vbaを使ってwebページを取り込むサンプル
ラベル:
vba
Sub readUrl() Dim url As String Dim mySheet As String url = "http://typhoon.yahoo.co.jp/weather/jp/earthquake/list/" ActiveSheet.Range("A1").Select With ActiveSheet.QueryTables.Add(Connection:="URL;" & url, Destination:=ActiveSheet.Range("A1")) .Name = "test" .FieldNames = True .RowNumbers = False .Refresh BackgroundQuery:=False .RefreshPeriod = 0 .RefreshOnFileOpen = False .PreserveFormatting = True .AdjustColumnWidth = True .FillAdjacentFormulas = False .RefreshStyle = xlInsertEntireRows .SavePassword = False .SaveData = True .WebSelectionType = xlAllTables .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = True .Refresh .Parent.Names(.Name).Delete End With End Sub
2012年3月25日日曜日
amchartのamstockとRuby on Railsでファンドの基準価額を描画する、
javascriptベースのamchartではなく一つ古いのflash版でやりました。http://www.amcharts.com/
amchartに食わせるデータは基本2つ:
①チャートの設定ファイル、よくあるのはsettings.xml
②データファイル、xml,csv,jsonなど対応して、実際の描画用のデータが渡される。
※データファイルが設定ファイルの中にインクルードされる方法と、設定ファイルの中に直接データを書き出し(データファイルが無くでもいける)
今回はsetting.xmlを固定ファイルにして、データだけrailsで動的に生成するやり方で作った
setting.xml
controllers/fund/search_controller.rbに追加
3年以内の分配金再投資基準価額を純資産降順でcsv作成、csvは行は「yyyy-mm-dd,修正基準価額」になっている
htmlは
stockchart.js
amchartに食わせるデータは基本2つ:
①チャートの設定ファイル、よくあるのはsettings.xml
②データファイル、xml,csv,jsonなど対応して、実際の描画用のデータが渡される。
※データファイルが設定ファイルの中にインクルードされる方法と、設定ファイルの中に直接データを書き出し(データファイルが無くでもいける)
今回はsetting.xmlを固定ファイルにして、データだけrailsで動的に生成するやり方で作った
setting.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Only the settings with values not equal to defaults are in this file. If you want to see the full list of available settings, check the amstock_settings.xml file in the amstock folder. --> <settings> <margins>0</margins> <text_size>10</text_size> <number_format> <letters> <letter number="1000">千</letter> <letter number="1000000">百万</letter> <letter number="1000000000">億</letter> </letters> </number_format> <date_formats> <x_axis> <days>MM/DD</days> <months>MM</months> </x_axis> <legend> <days>YYYY/MM/DD</days> <weeks>YYYY/MM/DD</weeks> <months>YYYY/MM/DD</months> </legend> </date_formats> <data_sets> <data_set did="0"> <title>ファンドA</title> <color>FF0000</color> <file_name>../../fund/search/data/123</file_name> <main_drop_down selected="true"></main_drop_down> <csv> <reverse>true</reverse> <separator>,</separator> <date_format>YYYY-MM-DD</date_format> <decimal_separator>.</decimal_separator> <columns> <column>date</column> <column>close</column> </columns> </csv> </data_set> <data_set did="1"> <title>ファンドB</title> <color>FF00BB</color> <short>[ぶどうの実]</short> <file_name>../../fund/search/data/456</file_name> <csv> <reverse>true</reverse> <separator>,</separator> <date_format>YYYY-MM-DD</date_format> <decimal_separator>.</decimal_separator> <columns> <column>date</column> <column>close</column> </columns> </csv> </data_set> <data_set did="3"> <title>日経平均株価(日経225)</title> <short>日経255</short> <compare_list_box selected="true"></compare_list_box> <color>999999</color> <file_name>../../fund/search/data/634</file_name> <csv> <reverse>true</reverse> <separator>,</separator> <date_format>YYYY-MM-DD</date_format> <decimal_separator>.</decimal_separator> <columns> <column>date</column> <column>close</column> </columns> </csv> </data_set> </data_sets> <charts> <chart cid="0"> <bg_color>f5f5f5,ffffff</bg_color> <border_color>#CCCCCC</border_color> <border_alpha>100</border_alpha> <grid> <x> <dashed>true</dashed> </x> <y_right> <color>cccccc</color> <alpha>100</alpha> <dashed>true</dashed> </y_right> </grid> <legend> <show_date>true</show_date> </legend> <graphs> <graph gid="0"> <axis>right</axis> <type>line</type> <data_sources> <close>close</close> </data_sources> <compare_source>close</compare_source> <legend> <date key="true" title="true"><![CDATA[<b>{close}</b>]]></date> <period key="true" title="true"><![CDATA[open:<b>{open}</b> low:<b>{low}</b> high:<b>{high}</b> close:<b>{close}</b>]]></period> <date_comparing key="true" title="true"><![CDATA[{close.percents}]]></date_comparing> <period_comparing key="true" title="true"><![CDATA[{close.percents}]]></period_comparing> </legend> </graph> </graphs> </chart> </charts> <data_set_selector> <position>top</position> <width>300</width> <max_comparing_count>4</max_comparing_count> <main_drop_down_title>選択</main_drop_down_title> <compare_list_box_title>比較</compare_list_box_title> </data_set_selector> <period_selector> <button> <bg_color_hover>b81d1b</bg_color_hover> <bg_color_selected>b81d1b</bg_color_selected> <text_color_hover>ffffff</text_color_hover> <text_color_selected>ffffff</text_color_selected> </button> <periods> <period type="MM" count="1">1ヶ月</period> <period type="MM" count="3">3ヶ月</period> <period type="MM" count="6">6ヶ月</period> <period selected="true" type="YYYY" count="1">1年</period> <period type="YYYY" count="3">3年</period> <period type="YYYY" count="5">5年</period> <period type="YYYY" count="7">7年</period> <period type="MAX">設定来</period> </periods> <periods_title>期間:</periods_title> <custom_period_title>任意期間:</custom_period_title> </period_selector> <header> <enabled></enabled> <text><![CDATA[<b>{title}</b> {short} {description}]]></text> <text_size>12</text_size> </header> <plot_area> <border_color>cccccc</border_color> </plot_area> <scroller> <enabled>true</enabled> <height>50</height> <graph_data_source>close</graph_data_source> <bg_color>f5f5f5,ffffff</bg_color> <resize_button_color>b81d1b</resize_button_color> </scroller> </settings>
controllers/fund/search_controller.rbに追加
3年以内の分配金再投資基準価額を純資産降順でcsv作成、csvは行は「yyyy-mm-dd,修正基準価額」になっている
..... ..... def data @fundCorrectionIndex = FundCorrectionIndex.find(:all, :conditions => ["fund_id=? and as_of_date >= (NOW() - INTERVAL 3 YEAR)", params[:id]], :order => 'as_of_date desc') csv_data = "" @fundCorrectionIndex.each do |rec| csv_data += "#{rec.as_of_date.strftime("%Y-%m-%d")},#{rec.correction_value}\r\n" end render :text => csv_data end ..... .....
htmlは
<!-- headに --> <script type="text/javascript" src="/rsrc/amcharts/swfobject.js"></script> <script type="text/javascript" src="/rsrc/amcharts/stockchart.js"></script> <!-- bodyに --> <body onLoad="draw_stock('stock','/market/special/asia/settings.xml')"> <!-- 描画用divを追加 --> <div id="stock"></div>
stockchart.js
function draw_stock(id,setting_url,width,height) { if(width == undefined){ width = "700"; } if(height == undefined){ height = "500"; } if(setting_url == undefined){ setting_url = "settings.xml" } var params = { bgcolor:"#FFFFFF" }; var flashVars = { path: "/rsrc/amcharts/", settings_file: setting_url, data_file: "data.xml", chart_id: id }; swfobject.embedSWF("/rsrc/amcharts/amstock.swf", id, width, height, "8.0.0", "/rsrc/amcharts/expressInstall.swf", flashVars, params); }
お名前のニュース配信を解除
ラベル:
お名前
http://www.onamae.com/support/faq/dom_other/other_01.php
Q.お名前.com会員に配信される「お名前.comドメインニュース」を配信停止してほしい
A.お名前.comドメインニュースの配信停止方法につきましては、下記手順にてお手続きください。
■ドメインニュースの配信停止方法の流れ
ドメインNavi にアクセスし、ユーザーID(お名前ID)とパスワードでログイン
上部メニューバーの「お名前.com会員情報」をクリック
会員情報設定の「会員情報の編集」をクリック
現在の会員情報が表示されますので、 「ドメインニュース配信」にて「配信無し」をご選択の上、「確認画面へ進む」をクリック
※その他、会員情報にご変更があれば最新の情報にあわせてご変更ください
ご入力内容をご確認の上、「設定する」をクリック
受付画面が表示され、変更された会員情報を記載したメールがお名前.com会員情報のご連絡先メールアドレス宛に送信されます
結構探した…本当にうるさかった。
Q.お名前.com会員に配信される「お名前.comドメインニュース」を配信停止してほしい
A.お名前.comドメインニュースの配信停止方法につきましては、下記手順にてお手続きください。
■ドメインニュースの配信停止方法の流れ
ドメインNavi にアクセスし、ユーザーID(お名前ID)とパスワードでログイン
上部メニューバーの「お名前.com会員情報」をクリック
会員情報設定の「会員情報の編集」をクリック
現在の会員情報が表示されますので、 「ドメインニュース配信」にて「配信無し」をご選択の上、「確認画面へ進む」をクリック
※その他、会員情報にご変更があれば最新の情報にあわせてご変更ください
ご入力内容をご確認の上、「設定する」をクリック
受付画面が表示され、変更された会員情報を記載したメールがお名前.com会員情報のご連絡先メールアドレス宛に送信されます
結構探した…本当にうるさかった。
2012年3月24日土曜日
bloggerをgoogle siteに埋め込む(embed)方法
ラベル:
blogspot,
google site
<iframe src ="http://kagen88.blogspot.jp/" width="755px" height="3000"> <p>あなたのブラウザがiframeを対応していないみたい</p> </iframe>google siteのページのhtmlを編集して保存すれば、google siteにブログを貼ることができる。
もう一回編集してみると、先のiframタグが訳がわからないタグに変わった、多分サイトがiframeタグを
よろしく変更してくれたね。
横スクロールを非表示や、縦スクロールの範囲指定等色々やりたいができないことも有ります。
googleがbloggerを埋め込む用のガジェットを作ってくれないかなぁー
2012年3月23日金曜日
javascriptでXMLを読み込むライブラリーjkl-parsexml.js
ラベル:
javascript,
xml
ライブラリーはここからダウンロード
http://www.kawa.net/works/js/jkl/parsexml.html
そして読み込むXMLを作成、ファイル名をuser.xmlにします。
HTMLはこちら
http://www.kawa.net/works/js/jkl/parsexml.html
そして読み込むXMLを作成、ファイル名をuser.xmlにします。
<?xml version="1.0" standalone="yes"?> <Users> <User> <Id>1</Id> <Name>田中</Name> </User> <User> <Id>2</Id> <Name>佐藤</Name> </User> </Users>
HTMLはこちら
<html> <head> <title>XMLファイルの読み込み</title> <script type="text/javascript" src="jkl-parsexml.js"></script> <script type="text/javascript"> <!-- function requestFile(url){ var xml = new JKL.ParseXML( url ); var data = xml.parse(); var strHtml = "<table border=1>"; for (var u in data.Users.User){ strHtml += "<tr>"; strHtml += "<td>" + data.Users.User[u].Id + "</td><td>" + data.Users.User[u].Name + "</td>"; strHtml += "</tr>"; } strHtml += "</table>"; document.getElementById("resultDiv").innerHTML = strHtml; } // --> </script> </head> <body> <input id="Button" type="button" value="実行" onclick="javascript:requestFile('./user.xml')"> <div id="resultDiv"> </div> </body> </html>結果はこんな感じ
1 | 田中 |
2 | 佐藤 |
2012年3月21日水曜日
RailsのActiveRecordのfindメソッドの基礎的書き方の一例
ラベル:
rails
FundIndex.find(:all, :select =>["fund_id,value,as_of_date"], :conditions => ["fund_id=? and fund_index_type_id=?", 564,2], :limit => 100)
登録:
投稿 (Atom)