2012年2月29日水曜日

[ASP.NET]データグリッドフッターに合計行作成

From Evernote:

[ASP.NET]データグリッドフッターに合計行作成

データグリッドを作成した後、
最後の行にフッターを作成します。
イメージとしては、合計を表示するhtmlテーブルを定義して、
フッターに入れ込む感じです。


#Region "データグリッド合計フッター作成"
    ''' <summary>
    ''' 合計フッター作成
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Protected Sub gvList_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles dgdKiban.RowDataBound

        Try
            Select Case e.Row.RowType
                Case DataControlRowType.Header
                    Dim myttalArray(10) As Integer
                    ViewState("mytotal") = myttalArray
                Case DataControlRowType.DataRow
                    CType(ViewState("mytotal"), Array)(1) += MC.ReplaceNaN(DataBinder.Eval(e.Row.DataItem, "以前生産数"), 0)
                    CType(ViewState("mytotal"), Array)(2) += MC.ReplaceNaN(DataBinder.Eval(e.Row.DataItem, "生産数"), 0)
                    CType(ViewState("mytotal"), Array)(3) += MC.ReplaceNaN(DataBinder.Eval(e.Row.DataItem, "累計"), 0)
                Case DataControlRowType.Footer
                    e.Row.BackColor = Drawing.Color.CadetBlue
                    e.Row.Height = 25
                    e.Row.Style.Item("text-align") = "right"
                    With e.Row.Cells(0)
                        .Text = "合計"
                        .Style.Item("font-weight") = "bold"
                        .Style.Item("text-align") = "left"
                    End With
                    Dim objLabel1 As New Label
                    With objLabel1
                        .ID = "GokeiIzenSeisanSu"
                        .Style.Item("font-weight") = "bold"
                        .Text = MC.FormatToComma(CType(ViewState("mytotal"), Array)(1))
                    End With
                    e.Row.Cells(2).Controls.Add(objLabel1)
                    Dim objLabel2 As New Label
                    With objLabel2
                        .ID = "GokeiSeisanSu"
                        .Style.Item("font-weight") = "bold"
                        .Text = MC.FormatToComma(CType(ViewState("mytotal"), Array)(2))
                    End With
                    e.Row.Cells(3).Controls.Add(objLabel2)
                    Dim objLabel3 As New Label
                    With objLabel3
                        .ID = "GokeiRuikei"
                        .Style.Item("font-weight") = "bold"
                        .Text = MC.FormatToComma(CType(ViewState("mytotal"), Array)(3))
                    End With
                    e.Row.Cells(4).Controls.Add(objLabel3)
            End Select

        Catch ex As Exception
            Throw ex
        End Try
    End Sub
#End Region

[SQLServer]他テーブルを利用したUPDATE文

From Evernote:

[SQLServer]他テーブルを利用したUPDATE文

更新の際によくつまづくので…。

-------------------------------------------------
update [dbo].[T_日報計上]  AS A
set  A.受注情報No =
     ( SELECT B.test受注情報No FROM  [dbo].[T_日報基本] AS B where  B.日報No = A.日報No)
-------------------------------------------------
がいいんだけど
SQLServerだとうまくいかないので
FROM句を使うこと。
-------------------------------------------------
update [dbo].[T_日報計上]
set 受注情報No = B.test受注情報No
FROM [dbo].[T_日報基本] AS B
where  B.日報No = [dbo].[T_日報計上].日報No
-------------------------------------------------

ちなみにこれだと、Bテーブルが存在しない場合、AにNULLが入ってしまうので
それが嫌な場合は
さらにExistかWHEREで?あるかどうか調べることをお忘れなく。

[ASP.NET]オリジナルのボタン作成、イベント結びつけ

From Evernote:

オリジナルのボタン作成、イベント結びつけ

 よく忘れるので…

Dim LinkButton As New LinkButton
With LinkButton
.CommandName = "Page"
.Text = "<img src=""images/left_gray.gif"" align=""middle"" border=""0"" alt=""前のページ"">"
   .Tag = 1
AddHandler .Click, AddressOf btnLM_Click
end With

Dim TableCell As New TableCell
TableCell.Controls.Add(LinkButton)
 e.Row.Cells(0).Controls(0).Controls(0).Controls.AddAt(0, TableCell)
又は
e.Row.Cells(0).Controls(0).Controls(0).Controls.Add(TableCell)

[その他]Evernoteと同期する @PGM覚書 #おぼえがきITブログ

Bloggerで

新規投稿の際はevernoteに転送する設定、にして

ブログのタイトルを↑このようにすれば
(@以降がノートブック名、#以降がタグ名)

Evernoteにも転送OKみたい。

文字や絵のはりつけはどうだろう?

OKぽい。

修正の場合は、一度「下書きに戻す」→「投稿」すると、再び送られる。
ただし、もちろんevernote側は2件になっちゃうのでいかがなもんか…。
そしてもちろん削除はNG。

でも、結構使えるかな。


または、evernote→Bloggerも出来るみたいなのでこちらでもいいかも。
これも修正、削除はNGだろうけど。
http://blog.hackingisbelieving.org/2011/11/evernote-blogger_05.html



2012年2月28日火曜日

[.NET]明細テーブルから集計テーブルに加工する方法

明細も出すし、集計も出す…といった際に、
GROUP BY1文で解決すればいいけど、
そうでもない場合や何パターンもある場合に
SQL文をいくつも用意するのは面倒くさい。


基本は明細データを取り出すルーチン1つ用意して、それを加工するようにすると
数値のズレもないし、メンテナンスしやすい。(私は。


処理速度が気にならない場合はこの手を使います。

'----------------------------------------------------

                 
      '↓ここで、明細データをゲットする
      Dim tbl As DataTable = GetMeisaiDT()

                    'ここから加工して集計データを作る!
                    Dim dt As New DataTable
                    dt.Columns.Add("事業部区分", GetType(Integer))
                    dt.Columns.Add("生産量", GetType(Integer))
                    dt.Columns.Add("生産高", GetType(Integer))


                    Dim item As String(,) = { _
                                                {"A部", "事業部区分 = 'A'"}, _
                                                {"B部", "事業部区分 = 'B'"}, _
                                                {"  他", "事業部区分 = 'Z'"}, _
                                                {"合計", ""}}
                    For i As Integer = 0 To item.GetLength(0) - 1
                        Dim dr As DataRow = dt.NewRow
                        dr.Item("事業部区分") = item(i, 0).ToString
                        dr.Item("生産量") = tbl.Compute("SUM(通数)", item(i, 1).ToString)
                        dr.Item("生産高") = tbl.Compute("SUM(生産高)", item(i, 1).ToString)
                        dt.Rows.Add(dr)
                    Next


'----------------------------------------------------

2012年2月24日金曜日

[ACCESS→SQLServer]MicrosoftSQLServerMigrationAssist使い方

MicrosoftSQLServerMigrationAssistの主な使い方①。

ウィザードが始めに立ち上がるのでそれに沿って行なえばいいのだが、
ウィザードで行なっていることは以下の手順。


①新しいプロジェクトを生成する。
 [File]→[New Project]→[プロジェクト名入力]ボタン



②変更するACCESSファイルを登録する。(複数OK)
 画面上の[AddDatabases]ボタンから、ACCESSファイルの場所を指定する。

③データ移管先のSQLServerを登録する。
 画面上の[Connect To SQLServer]ボタンから、SQLServerを指定する。


④データ移管するファイルorテーブルを選択する。

 ②で指定したACCESSが画面左上に表示されていると思います。
 ここを展開していき、移管したいテーブルにチェックをつけましょう。
 「×」がついているテーブルは(おそらく)リンクテーブルだったりして、
 状況によってはデータ取り出せないよ!というマーク。
 ちなみにテーブルを選択していると右にテーブルのデザインが表示されるのでチェック。
 

そのうち②へ続く。

[EXCELVBA]処理速度を上げる基本

これは絶対必須。

マクロの実行を早くするために以下の処理を行います。

'--------------------------------------------------------
'実行速度向上のため画面更新と自動計算を停止

Application.ScreenUpdating = False
ThisWorkbook.Sheets("選択画面").Cells(1, 1).Select  '※1
ThisWorkbook.Sheets("選択画面").Activate  '※2 
Application.Calculation = xlCalculationManual
'-----------------------------------------------------------

 '実行速度向上のため画面更新と自動計算を再開----
 Application.ScreenUpdating = True
ThisWorkbook.Sheets("選択画面").Cells(1, 1).Select  '※1
ThisWorkbook.Sheets("選択画面").Activate  '※2 
 Application.Calculation = xlCalculationAutomatic
'-----------------------------------------------------------

'※1 はなくてもいいですが、エクセル97はコレがないとエラーになります
'※2 これはエクセルバージョンを問わず必須。

[EXCELVBA]土日かどうか?


         
            dateLoop = .Range("A1")          


            '土日で色を変える
            If Weekday(dateLoop) = vbSunday Or _
              Weekday(dateLoop) = vbSaturday Then
                .Range("A2").Interior.ColorIndex = 36
            End If

           

[EXCELVBA]ADOを使ったデータの処理方法

ADOでデータを読んだ後のレコードセット。
.NETみたいにDataTableとして扱ったり、並び替えたりとか色々したいんだけど
さすがにそうもいかなく、結局ぶん回すことがほとんど。

↓基本の型。
'---------------------------------------
  Dim objADOCON As ADODB.Connection
  Dim objADORS  As  ADODB.Recordset

  Set objADOCON = Application.CurrentProject.Connection
 
Set objADORS = objADOCON.Execute("SELECT * FROM アドレス帳")


  If  objADORS.EOF = True Then
        MsgBox "指定のデータはありませんでした。"
        Exit Sub
  End If

 Do Until objADORS.EOF
         Debug.Print objADORS!氏名
         objADORS.MoveNext
 Loop
  objADORS.Close
  objADOCON.Close

  Set objADORS = Nothing
  Set objADOCON = Nothing
'---------------------------------------


で、
Set objADORS = objADOCON.Execute("SELECT * FROM アドレス帳")
でとってきたレコードセットはぶん回すこと以外
ADOでは何ができるのだろうかと調べてみた。


↓①フィルターがかけられます。
'---------------------------------------
objADORS.Filter = "都道府県 = '広島'"

'解除の際は空欄でOKみたい。
objADORS.Filter = ""

'---------------------------------------



↓②Excel上のセルに一気に表示します。(これ便利!!!
'---------------------------------------

Range("A1").CopyFromRecordset objADORS

'---------------------------------------


↓③GetRowsを使って配列に格納することができます。
'---------------------------------------
Dim a As Variant
a =  objADORS .GetRows
'---------------------------------------
↑これも、配列でないと出来ない何かしらの処理をして、一気にセルに格納すれば、いいかもしれない。






 

2012年2月23日木曜日

[EXCELVBA]セルの内容を2次元配列に格納(逆もしかり)

これ知ってると大分コードがシンプルになった。

(参考元)
http://kazemati.blogspot.com/2008/09/vba.html


'-------------------------------------------------------
'セルの内容を2次元配列に格納(要素1~で作られるみたい。)
Dim ArrayTEST As Variant: ArrayTEST = ThisWorkSheet.Range("N1:N5")

For j = 0 To UBound( ArrayTEST  ) - 1
     MsgBox (ArrayTEST(j + 1, 1))
Next


'逆に、配列の内容をセルに一気に入れることも可能。
ThisWorkSheet.Range("A1:A5") = ArrayTEST
'-------------------------------------------------------




今まで知らなくて後悔…!!





[VB]変動的な配列を扱う方法。

よく忘れるので。
とゆーかVB6以降ならそもそも配列を使わないかもしれないが。

'---------------------------------------------------------
'まず宣言。
Dim ArrayA() As String

'いくつになるかわからないがとにかく格納していく。
For i = 0 to ThisWorkbook.thisWorkSheet.Range("カウント数").value

      ReDim Preserve   ArrayA(i)
     Array(i) = ThiwWorkBook.ThisWorkSheet.cells(1, 2 + i)

Next

'---------------------------------------------------------


ポイントは ReDim Preserve  です。

2012年2月22日水曜日

[EXCELVBA]コピーインサート



with TestSheet

                .Rows(3).Copy
                .Rows(2).Select
                Selection.Insert Shift:=xlDown

    end with


[EXCELVBA]シートをコピーして新しいシートを作成する


関数にしました。

'*******************************************************************************
'   コピーして新しいシートを作る
'   コピー先、コピー元,コピー場所
'*******************************************************************************
 Sub NewSheet(Name, Name2, Optional ByRef setNo = 1)
 
    Dim i, cnt As Integer
    Dim Existsheet

    g_WBK.Activate
    g_WBK.Sheets(Name2).Visible = True
    g_WBK.Sheets(Name2).Select
    g_WBK.Sheets(1).Activate
    g_WBK.Sheets(Name2).Copy after:=g_WBK.Sheets(setNo)
    g_WBK.ActiveSheet.Name = Name

End Sub

2012年2月17日金曜日

[ACCESS→SQLServer]"YES/No"型と"bit”型(修正版)

ACCESSの"YES/No"型をSQLServerに移管するときは"bit"型を採用します。

"YES/No"型では0(No)と0以外=-1(Yes)で扱われますが
"bit"型は0(False)と0以外=1(True)で扱われます。

この"bit"型、閲覧モードでみるとFalseやTrueで表示されますし、
実際プログラムを組む際はFalseやTrueで指定しないと構文エラーになるそうな。

パッと見は【0と-1データ】が【0と1データ】に変換されるので調整が必要??とか思いそうだが
bit型はなかなかうまくできています。

「0以外」という所がミソで、
今まで通り-1(Yes)を入力しても、bit型は1(True)として処理してくれます(0以外だから)。
もちろん、True,Falseで入力すれば間違いはないんだけど。
と、いうことで入力処理は問題なさそう。

しかも、ACCESSでリンクテーブルを貼ってSQLServerを見た場合、
1(True)→-1(Yes)として表示されるではないか。従来に合わせて。


つまり、ACCESSモジュール部分で、
MySet!フラグ = -1
という表記がしてあるのは問題ないんです。

と、いうことで出力判定処理も問題なさそう。



あとの問題はデータを読み込むときのSQL文…
どうやら以下の現象になるみたい。(追記)


ACCESSから作成するSQL文を  ~WHERE  フラグ = True " としている


ACCESSから作成するSQL文を  ~WHERE  フラグ = Yes " としている
(SQLServerに投げるときにTrueに変換してくれている模様。でも今時キモチワルイ)


×ACCESSから作成するSQL文を  ~WHERE  フラグ = -1 " としている
(ACCESSでは-1と出てる癖に!
 実際にSQLServerにSQL文投げるときは1(てかTrue)にする必要があるみたい)




SQL文の部分はやはり修正する必要ありです。




入力値 ACCESS SQLServer
-1 -1(YES) 1(True)
0 0(No) 0(False)
1 -1(Yes) 1(True)
True -1(Yes) 1(True)
False 0(No) 0(False)
Yes -1(Yes) #Err
No 0(No) #Err

出力値 ACCESS表示 SQLServer表示
1(True) -1(YES) 1(True)
0(False) 0(No) 0(False)



2012年2月16日木曜日

[ACCESS→SQLServer]移行後にテーブルを更新しにいくと「読み取り専用」となる。

SQLServerに移行した後にテーブル更新を行なうと、「読み取り専用」でエラーになる。

これは

ACCESSでは主キーもなくてOKだったが、
SQLServerでは主キーがないと読み取り専用として処理されてしまうからである。


まぁ移行時にはきちんと主キーも設定しておく必要があるということ。

[ACCESS→SQLServer]MicrosoftSQLServerMigrationAssistインストール

ACCESSからSQLServer移行時は
MicrosoftSQLServerMigrationAssistを使ってデータ移行するのが無難かと。




以下、インストール方法。

①まずはインストールするにはACCESSRuntimeが必要。
(すっとばしてもMicrosoftSQLServerMigrationAssistインストール時に警告がでます)
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=57a350cd-5250-4df6-bfd1-6ced700a6715

②MicrosoftSQLServerMigrationAssistダウンロード
  (Ver4.2では、SQLServerのバージョンによってファイルが異なります。Ver5以降は同じファイルで良いみたい。)
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=959

③ダウンロードしたファイルよりインストール開始。
はじめにアカウント認証ファイルを聞いてきます。
  登録だけ行なう必要があるので警告で出てきたリンクをクリックしてアカウント登録。
  登録後にダウンロード出来た認証ファイルをデフォルトの場所に置き、次へ進みます。
 ↓
 あとはデフォルトインストール設定で特に問題なし。完了。

[ACCESS→SQLServer]MicrosoftSQLServerMigrationAssistを使ってACCESS→SQLServerへ移管する。

ACCESSからSQLServerへテーブルを移管する際の手段としては…

①SQLServer側からACCESSをインポート
→キーやインデックスが移管されない


②【Microsoft Access Upsizing Tools】をダウンロードして、実行
→エラーが発生することがある。97の場合どうも明確なエラー回避方法が見当たらない。


③【MicrosoftSQLServerMigrationAssist】をダウンロードして実行
→と、いうことでちょっと難しいけどこれがオススメ。






[SQLServer]特定ユーザに特定権限を与えるスクリプト

ぽちぽちチェックして権限付与するのは面倒くさい。


更新、選択、挿入、削除権限を与えるなら
テーブル毎に

'----------------------

use [TestDB]
GO



GRANT UPDATE,DELETE,SELECT,INSERT ON  [dbo].[マスターテーブル1] TO [userName]


GRANT UPDATE, DELETE ,SELECT,INSERT ON  [dbo].[マスターテーブル2] TO [userName]


GRANT UPDATE, DELETE ,SELECT,INSERT ON  [dbo].[マスターテーブル3] TO [userName]


GO


'----------------------


というスクリプトを用意して一度に実行すればOK


[android開発]基本_android構成概要

さて、andoroidのプログラムの構成としては

…こんな感じかなぁ。






[android開発]基本_レイアウト・コントロールの設定



メインプログラム内の
  setContentView(R.layout.main)
で画面を生成しています。
この(R.layout.main)とは
「/(プロジェクト名)/res/layout/main.xml」を指しています。
このファイルをいじることで画面レイアウトを作成していくことができます。


以下、レイアウト設定方法。


コントロールを配置していきます。
カーソルをあてたコントロールに対し、
プロパティや、右クリックから設定を指定していきます。



主な例は以下。


【位置】→Layout gravity
【幅】→Layout With
【高さ】→Layout Height
   fill_parent…親の部品に対する許容範囲いっぱい
   wrap_content…その部品の中身に合わせる


[android開発]基本_まずはサンプルを開く

インストールしたSDKのコンポーネントからサンプルを開きます。


「新規」→「プロジェクト」での設定画面にて

「外部ソースからプロジェクトを作成」を選択し、
ロケーションを
「C:\Users\*****\android-sdk-windows\samples\android-8\●●●●」
( ●●●●は開きたいプロジェクト)
ビルド・ターゲットは何でもいいですがひとまずAndroid2.2で。


これでサンプル●●●●プロジェクトが立ち上がるハズです。


android サンプル 新規 基本

2012年2月15日水曜日

[VBAマクロ]テキストファイルを吐き出す。


現在の時刻の名前でテキストファイルを吐き出します。
エラーログ等で使用します。


    'ログの書き出し---------------------------
    Dim strFilePath As String
    Dim intFileNo As Integer
    Dim strData As String
    strFilePath = "D:\TEST" & "_" & Format(Now, "mmddhhnnss") & ".txt"
    intFileNo = FreeFile
    Open strFilePath For Output As #intFileNo
    Print #intFileNo, StrLog
    Close intFileNo



テキスト マクロ txt FO 

[ACCESS→SQLServer]ACCESS内のリンクをVBAではりかえる(DNS-LESSver)。

【追記※DNS-LESS方式バージョン】--------------------------------------------

※DNS-LESS方式でリンクテーブルを張り替えると
SQLServerがintでも→ACCESSだと文字列扱いになるみたいです(ACCESS2003)。
(調査中)。
きちんとSQLServerと型を一致させるにはやはり
ローカルPCにきちんとODBC設定して行なった方がいいみたい…。

DNSバージョンはこちら
http://shumitestitblog.blogspot.jp/2012/04/accesssqlserveraccessvbadnsver.html

-------------------------------------------------------------------------

ACESSリンクテーブルのリンク先をSQLServerリンクに一斉に変更します。
SQLServerへのリンク方法はODBC設定等色々手順があると思いますが、
ローカルPCのODBC設定を行なうのがイヤだったので(DB更新時など)
ローカルPCのODBC設定がいらない方法として
DNS-LESS方式で接続する方式にしました。
(これはVBA通さないと出来ないみたい?)


'--------------------------------------------------------

    Dim strDSN As String: strDSN = "systest.aa"
    Dim strDB As String: strDB = "testDB"
    Dim strUser As String: strUser = "user"
    Dim strPass As String: strPass = "pwd"
    Dim TblName As String: TblName = ""
    Dim RemoteTblName As String: RemoteTblName = ""


    '確認(パスワード聞くとかするといいかも)---------------
    rtn = MsgBox("退避OK?", vbQuestion + vbYesNo, "確認")
    If rtn <> vbYes Then
        Exit Sub
    End If

    
    '実行--------------------------------------
    Dim db As DAO.Database, tb As DAO.TableDef
    Set db = CurrentDb


     For Each tb In db.TableDefs
               
            If tb.Connect <> "" Then 'リンクテーブルだけを処理
                               
                    TblName = tb.Name
                    If Left(tb.Connect, 4) = "Text" Then
                        Dim tmp As String
                        Dim tmp2
                        tmp = tb.SourceTableName
                        tmp2 = split(tmp, ".")
                        RemoteTblName = tmp2(0)
                    Else
                        RemoteTblName = tb.SourceTableName
                    End If
                 
                    '↓チェック=======
                    Dim stADOConnect As String
                    stADOConnect = "Driver={SQL Server};server=" & strDSN & _ 
                                           ";database=" & strDB & _ 
                                           ";uid=" & strUser & ";pwd=" & strPass & ";"
                    Dim ChkFLG As Boolean: ChkFLG = False
                    Dim adoCON As New ADODB.Connection
                    Dim adoRS As ADODB.Recordset
                    Dim mySQL As String
                    adoCON.Open stADOConnect
                    mySQL = "SELECT * FROM dbo.sysobjects " & _ 
                                 " WHERE xtype =N'U' ORDER BY name"
                    Set adoRS = adoCON.Execute(mySQL)
                    Do Until adoRS.EOF = True
                        If RemoteTblName = adoRS!Name Then
                            ChkFLG = True
                            Exit Do
                        End If
                        adoRS.MoveNext
                    Loop
                    adoRS.Close
                    Set adoRS = Nothing
                    adoCON.Close
                    Set adoCON = Nothing
                    '↑チェック=======
                 
                 
                    If ChkFLG = True Then
                        '実行!-----------------------
                        AttachDSNLessTable TblName, RemoteTblName, strDSN, strDB, strUser, strPass
                    Else
                        'MsgBox("×「" & TblName & "」元の「" & RemoteTblName & _ 
                                    "」テーブルはSQLServerに存在しません。")
                    End If                   
                   
            Else
                'MsgBox ("「" & tb.Name & "」はリンク元なしなのでスルーしました")
            End If
               
    Next tb
   
    RefreshDatabaseWindow



'--------------------------------------------------------


Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)
    On Error GoTo AttachDSNLessTable_Err
    Dim td As TableDef
    Dim stConnect As String
   
   
    If Len(stUsername) = 0 Then
        '//Use trusted authentication if stUsername is not supplied.
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
    Else
        '//WARNING: This will save the username and the password with the linked table information.
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
    End If
   
   
    '現テーブル削除
    For Each td In CurrentDb.TableDefs
        If td.Name = stLocalTableName Then
            CurrentDb.TableDefs.Delete stLocalTableName
        End If
    Next


    '新テーブル作成
    Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
    CurrentDb.TableDefs.Append td
    AttachDSNLessTable = True
       
    Exit Function


AttachDSNLessTable_Err:
   
    AttachDSNLessTable = False
    MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description


End Function


'--------------------------------------------------------



ACCESSからSQLServer 変換 移行 VBA  マクロ

[EXCELVBA]一番下の行を求める。

よく忘れるので…

色々あるので使い分けたりしてます。

※A列を基準にする場合


LastGyo = ThisWorkbook.WorkSheets("Sheet1").Range("A" & "65536").End(xlUp).Row + 1




ラスト、最終行、使用している、マクロ

[ACCESS→SQLServer]エクセルでACCCESSのテーブル、リンク構成の一覧を求める


ACCESS→SQLServer変換の際に
ACCESSのデータテーブル一覧、リンク先を一斉チェックする必要があったので作成。  
エクセルで実行して出力します。

'--------------------------------------------------------------------

Private Sub CHKACCESS()

'参照設定でMicrosoft DAO 3.6 Object Library にチェックを入れておいて下さい。
 
    Dim WB As Workbook
    Set WB = ThisWorkbook
    Dim WS As Worksheet
    Set WS = WB.Worksheets("Sheet1")
    Dim StartGyo As Integer: StartGyo = 5         
 
    'ACCESS指定
    Dim strAdd as String; strAdd = "D:\TEST"
    Dim strFile as String; strFile = "test.mdb"
    Dim strChkFile As String: strChkFile = strAdd & "\" & strFile
    Dim db As DAO.Database, tb As DAO.TableDef
    Set db = DBEngine.OpenDatabase(strChkFile, False, True)
     
    Dim No As Integer: No = 1
    For Each tb In db.TableDefs
        If Left(tb.Name, 4) <> "MSys" Then
            WS.Cells(StartGyo, StartRetu - 2) = Now
            WS.Cells(StartGyo, StartRetu - 1) = db.Name
            WS.Cells(StartGyo, StartRetu) = No
            WS.Cells(StartGyo, StartRetu + 1) = tb.Name
            WS.Cells(StartGyo, StartRetu + 2) = tb.Connect
            WS.Cells(StartGyo, StartRetu + 3) = tb.SourceTableName
            No = No + 1
            StartGyo = StartGyo + 1
        End If
    Next tb


    db.Close
 
    MsgBox "OK"


End Sub


'--------------------------------------------------------------------



ACCESSからSQLServer 変換 移行 VBA  マクロ

[.NET]例外処理を意図的に発生させる

どうも忘れてしまうので…



Throw New Exception("ERR:エラーが発生しました。")




エラー 例外 わざと

[ASP.NET]Response.Redirect、Response.End、Server.Transfer で、“スレッドを中止しようとしました”というエラー



エラーの詳しい内容は
http://support.microsoft.com/default.aspx?scid=kb;ja;312629


response.redirectを
何も考えずに使っていたら、“スレッドを中止しようとしました”というエラーが多発していたので、
エラー回避手段を取る必要があった。

'---------------------------------------------------
Response.Redirect("blank.html")


↓なら


Response.Redirect("blank.html", False)

'---------------------------------------------------
Response.End()


↓なら


Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()
'---------------------------------------------------

Server.Transfer の場合は、代わりに Server.Execute使うとの事らしい。(未実行)


エラー ログ 

[javascript]スクロールバーの位置を覚える

ページ再読み込みのときにスクロールバーを固定します。

'--------------------------------------------------------

function SaveScroll(){
            document.all['txtScroll'].value = document.documentElement.scrollTop;
        }
       
        function GoScroll(){
            var tmp = document.all[ 'txtScroll' ].value;
            if ( tmp == "" ) {
                window.scroll(0, document.body.scrollHeight);
            }
            else{
                document.documentElement.scrollTop = tmp;
            }
        }

'--------------------------------------------------------

html側では
<body style=" text-align:center;" onload="GoScroll();" >
<input type="text" name="txtScroll">

'--------------------------------------------------------

セーブしたい場合
javascript:if(confirm('削除してよろしいですか?\n')){SaveScroll()}else{return false}






html  

[javasciprt]エンターで送信するのを防ぐ

htmlページでテキストボックス内でエンターを押すと
半意図的にデータが送信されてしまうことがあります。
これを防ぐためにjavascriptでひとつ埋め込んでおきます。

'---------------------------------------
  function keydown() {
            if(event.keyCode==13) {
                if (window.event.srcElement.type!='submit' && window.event.srcElement.type!='textarea') {
                    event.keyCode=9;
                }
            }
        }
        document.onkeydown = keydown;



'---------------------------------------



html 

[javascript]オブジェクトの位置を求める。

色々あるけど確定はコレかな。

  function GetTop(obj){
         var n = 0;
         while(obj){ n += obj.offsetTop;  obj  =  obj .offsetParent; }
         return  n ;
  }
  function GetLeft(obj){
         var n = 0;
         while(obj){ n +=  obj .offsetLeft;  obj  =  obj .offsetParent; }
         return n;
 }

[ACCESS]データテーブル非表示になっているACCESSの開き方2

データテーブル非表示になっているACCESSは
[Shift]+[Enter]で開けばOKだが、

例えばACCESS2.0をACCESS97で開いて、「データベースを変換してください」と出た場合、
せっかく[Shit]+[Enter]で開いたのに、無効となってしまう。

解決方法は、
「データベースを変換してください」に対する「OK」ボタンも、
[Shift]を押しながらマウスクリック(もしくはエンター)押せばいい。

ACCESSからファイルを指定して開くときも同様で、
[Shift]を押しながら選んだファイルをマウスクリック(もしくはエンター)押せばいい。

[ACCESS]データテーブル非表示になっているACCESSの開き方

ACCESSを開くと、
ユーザにいじられないように
フォームだけ表示され、その他のデータベースは最初から非表示にされている場合がある。

[Shift]+[Enter]でACCESSを開けばOK

[ACCESS2.0→97]エラー:このデータベースを変換または有効にするときコンパイルエラーが発生しました。

ACCESS2.0→97変換時のエラー。

このデータベースを変換または有効にするときコンパイルエラーが発生しました。
データベースはコンパイル済みの状態で保存されません。各セッションでデータベースを再コンパイルする必要があるため、このデータベースの性能は低下します。
性能を高める方法については、[ヘルプ]をクリックし、表示されるヘルプトピックを参照してください。




要は2.0だとOKだけど
97だとNGなモジュールがあるので直して自分でコンパイルしろよ!との事。


例としては…

①半角カナ→全角カナに修正 
Set F2 = Forms!カナ検索フォーム

②プロパティ日本語NG
Forms![社員].表題→Forms![社員].caption

③ネットからユーティリティ関数とか拾ってきてると、予約語と被ったりしている。
Sub ShowEvent (Event As String)→Sub ShowEvent (strEvent As String)

④Boolean扱い
txtBox.Enable = "Yes" → txtBox.Enable = True

⑤RecordSetに対しての項目参照
   MySet1.在庫残 → MySet1!在庫残

[ACCESS2.0→97]エラー:このデータベースのモジュールには、16ビットのDLLに対する呼び出しが含まれます。

ACCESS2.0→97変換時のエラー。ACCESS2.0→97変換時のエラー。

このデータベースのモジュールには、16ビットのDLLに対する呼び出しが含まれます。
Microsoft Windows95 または Microsoft Windows NTでは、これらは動作しません。
対応する32ビットのDLLを呼び出すように、コードを変更してください。


宣言モジュールで参照していたDLL(16ビット)を32ビット用に参照先を変更。
Microsoft Dao 3.6 Object Liblary あたりのモジュールで発生しやすいかな。
「モジュール」-「ツール」-「参照設定」
Microsoft Dao 3.6 Object Liblary にチェック。

[ACCESS2.0→97]エラー:オブジェクト「Msys...」は見つかりませんでした。

ACCESS2.0→97変換時のエラー。

オブジェクト「Msys...」は見つかりませんでした。
オブジェクトが存在しているか、または名前やパス名が正しいかを確認してください。

現在、考え中…
色々考えたけど、ファイルが壊れている等等の理由で、だめっぽいので
変換あきらめ
97で2..0をインポート+再コンパイルエラーつぶし
でいきました。
リンクはもちろん貼り直し。

いい方法が知りたいです。

2012年2月13日月曜日

[android開発]基本_共通の定義をする

「/(アプリ名)/res/values/strings.xml」
プロジェクト全体で使用する
Color型、String型等の共通変数を指定していきます。



※アプリの日本語対応と切り替えて管理するには
「/(アプリ名)/res/values-ja」フォルダを作成し、
「/(アプリ名)/res/values-ja/strings.xml」内で別途定義します。