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)