connect.CursorLocation = 3 'クライアントカーソルにする
Set rs = execQuery(cn, sql, , adOpenKeyset, adLockOptimistic)
debug.print rs.RecordCount
2016年12月6日火曜日
ADOレコーダーがあるのに、RecordCountが「-1」の場合の対処
レコーダーがあるのに、RecordCountが「-1」の場合の対処
2016年9月2日金曜日
列の値を一括更新(LOOP、Query、補助列を使わず!)
列の値を一括更新するときは、vbaで行ごとLOOPを書くか、ADODBでUpdateクエリーを書くか、補助列を挿入して数式で計算させるかでも、最近「Evaluate」知ったですよ
これは神メソッドですね。気を付けなければならないのは、空欄が0に評価されてしまう、数字以外の文字列がエラーになる。
メソッド化にすると
LOOP、Query、補助列を使わずに、"A1:A1000"列の数値を全部*10.1,書式を小数点二桁にする
もう少し複雑な数式でもいけるらしい
Range("B:B").Value = Evaluate(Range("B:B").Address & "*10")
これは神メソッドですね。気を付けなければならないのは、空欄が0に評価されてしまう、数字以外の文字列がエラーになる。
メソッド化にすると
Sub updateRangeValues(ByRef rg As Range, strFormula As String, Optional strFormat As String = "")
rg.Worksheet.Activate '←ここが重要!!、なぜかこうしないと全部0と評価してしまう
If strFormat <> "" Then
rg.NumberFormatLocal = strFormat
End If
rg.Value = Application.Evaluate(rg.Address & strFormula)
Application.Calculate
Do While Application.CalculationState <> xlDone '←念のため、計算が終わまでDoEvents
DoEvents
Loop
End Sub
使い方:
Call updateRangeValues(Range("A1:A1000"),"*10.1","#.00")
LOOP、Query、補助列を使わずに、"A1:A1000"列の数値を全部*10.1,書式を小数点二桁にする
もう少し複雑な数式でもいけるらしい
Sub nn()
Dim rg As Range
Set rg = ThisWorkbook.Worksheets(1).Range("C1:C36")
strFormula = "=IF(" & rg.Address & "= """",""IS EMPTY""," & rg.Address & "*10)"
rg.Value = Application.Evaluate(strFormula)
End Sub
2016年8月24日水曜日
SVN Error handling externals definition for
ラベル:
svn
[root@abc my_production]# svn up
svn: 警告: Error handling externals definition for 'lib/wired':
svn: 警告: OPTIONS (URL: 'http://svn.notexisted.jp/repos/wired/php/branches/0.2.x/lib'): サーバに接続できませんでした (http://svn.notexisted.jp)
リビジョン 1718 です。
svn propdel --recursive svn:externals .
svn ci -m"svn propdel --recursive svn:externals"
svn up
U lib
svn: 警告: Error handling externals definition for 'lib/wired':
svn: 警告: OPTIONS (URL: 'http://svn.notexisted.jp/repos/wired/php/branches/0.2.x/lib'): サーバに接続できませんでした (http://svn.notexisted.jp)
リビジョン 1719 に更新しました。
2016年7月15日金曜日
ado,sqlのunderline…自分かバカすぎで笑えない
sqlではアンダーライン"_"は、任意の一文字って意味か、ADOでもMysqlでも...、やられた、ADOでは"[]"でエスケープする、sqlでは"\"でエスケープする。
正規表現とごっちゃまぜしちゃダメよ。(;_;)
SQL
正規表現とごっちゃまぜしちゃダメよ。(;_;)
SELECT * FROM tbl WHERE tname LIKE 'abc[_]%'
SQL
SELECT * FROM tbl WHERE tname LIKE 'abc\_%'
2016年6月30日木曜日
VBAのRoundの罠
ROUND(38.5)
結果:38
ROUND(39.5)
結果:40
「銀行家の丸め (bankers' rounding)」、「銀行丸め」ともいう。
5が切り捨てられたり切り上げられたりするので「五捨五入」と呼ばれたり、
端数がちょうど0.5の場合に整数部分が偶数なら切り捨て奇数なら切り上げる
ので「偶捨奇入」と呼ばれたりもする。
本当の「四捨五入」したい場合は
WorksheetFunction.Round()
が有効だそうです。
しかし、ADODB,Jet.OLEDBなどでQuery(クエリー)で運用時は使えないので
sql = "UPDATE MyTable SET `Ammount` = ROUND(35*1.1)"
Call csv_cn.Execute(sql)
=ROUND(38.5) = 38
↓
sql = "UPDATE MyTable SET `Ammount` = FORMAT(35*1.1,""#"")"
Call csv_cn.Execute(sql)
=ROUND(38.5) = 39
ちなみに、小数点以下2位の四捨五入は
sql = "UPDATE MyTable SET `Ammount` = FORMAT(35*1.111,""#.00"")"
Call csv_cn.Execute(sql)
2016年6月24日金曜日
Scripting.Dictionaryのkeyまたはitemをindexで参照する方法
ラベル:
Scripting.Dictionary,
vba
Dim dic As New Scripting.Dictionary
dic.Add "a", "apple"
dic.Add "b", "banana"
'For Eachで
Dim vntKey As Variant
For Each vntKey In dic.Keys
Debug.Print vntKey & ":" & dic(vntKey)
Next
'または Forで
Dim intX As Integer
For intX = 0 To dic.Count - 1
Debug.Print dic.Keys(intX) & ":" & dic.Items(intX)
Next
'Indexで指定でもいい←これは面白い
Debug.Print dic.Keys()(0) & ":" & dic.Items()(0)
Debug.Print dic.Keys()(1) & ":" & dic.Items()(1)
'最後のkeyとvalue
Debug.Print dic.Keys()(dic.Count - 1) & ":" & dic.Items()(dic.Count - 1)
2016年3月26日土曜日
OSが64bitでも64bitのODBC Connectorを使ってはいけません!Officeのbit数を確認べし…そうなの?!!
ぬぬぬ、罠だ!
64bitのOSも絶対64bitのMySQL Connector/ODBC
https://dev.mysql.com/downloads/connector/odbc/
64bitを使うと
「データ ソース名および指定された既定のドライバーが見つかりません」がでます
32bitを使うとすーっと通る
なぜた?!!!
うわー、Officeが32bitじゃん!!バカが!!!っと脱力した…
64bitのOSも絶対64bitのMySQL Connector/ODBC
https://dev.mysql.com/downloads/connector/odbc/
64bitを使うと
「データ ソース名および指定された既定のドライバーが見つかりません」がでます
32bitを使うとすーっと通る
なぜた?!!!
うわー、Officeが32bitじゃん!!バカが!!!っと脱力した…
登録:
コメント (Atom)