Accessの最近のブログ記事

accessでレコードセットのupdateを一期に大量におこなっていると、「ファイルの共有ロック数の制限を越えています。」のメッセージが。

これを2万行分くりかえす

set rst=new adodb.recordeset
with  rst
 .source="select * from talbe1"
 .connection=・・・・・
・・・・・・
.open
Do until .eof
 !fielda=!fieldb+3
.update
 .move nxt
loop


多分これのこと

多数のトランザクション処理中にエラー メッセージ "ファイルの共有ロック数が制限を超えています" が表示される



「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0」のMaxLocksPerFileを既定値の9500からおおおきするらしい。*9500は行数のことではない。めもり量。

他の方法
1)繰り返しを9500(行数ではあい)を越えないところで分割実行する。
2)do〜loop内に、begintran〜commitranをいれる
(トランザクションを管理するため、do〜loopの外にいれて、このえらーが起きるのはよくあること。
1件1件commitをきちんといれると、なぜか上手くいく。どこまで処理できるはわからないけど。)


時々度忘れするので、書き込み。

テキストファイルの操作。

 

Open ファイル名 For 開き方 As #ファイル番号

開き方について

開き方 処理 モード
 Input  読み込み 入力
 Output  書き込み 出力
 Append  書き込み 追加書き込み
 Random  読み込み/書き込み ランダムアクセス
 Binary  読み込み/書き込み バイナリ

 

書き込み読み込みについて

ステートメント  内容
Input #filenumber,変数 Inputモードで開いたファイルからデータを読み込んで変数に格納。カンマで区切ることで、複数の変数を指定できる。
Line Input #ファイル番号,変数 Inputモードで開いたファイルから行単位で読み込み、変数に代入します
Write #ファイル番号,書込内容 Output、Appendモードで開いたファイルにデータを書き込みます。出力したデータはカンマで区切られ、文字列は""で囲まれます。
Print #ファイル番号,書き込む内容 Outputモードで開いたファイルに、データを書き込む。Print毎に改行する。
「;」を付加すると改行しない。


net start サービス名

net stop サービス名

 

なので、sqlserverのインスタンスは、

net start MSSQL$インスタンス名

net stop MSSQL$インスタンス名

 

 


accesでadoxを利用してフィールド追加する。
※参照設定で、Microsoft ADO Ext. 2.8 for DDl and Securityを参照設定すること。

Function AddFiled(strTName As String, strFName As String, intKata As Integer) As Boolean
'フィールドを追加する
'引数:テーブル名、フィールド名、フィールドの型 型は下記

On Error GoTo Err_Description
    Dim catdb As New ADOX.Catalog
    Dim tbladd As Table
    catdb.ActiveConnection = CurrentProject.Connection
    Set tbladd = catdb.Tables(strTName)
    tbladd.Columns.Append (strFName), intKata
    AddFiled = True
    Exit Function
Err_Description:
   If Err.Number = -2147217857 Then
       AddFiled = True
   Else
      AddFiled = False
      MsgBox Err.Number & " : " & Err.Description
   End If


End Function



'adBigInt   20
'adBinary   128
'adBoolean  11
'adBSTR 8
'adChapter  136
'adChar 129
'adCurrency 6
'adDate 7
'adDBDate   133
'adDBTime   134
'adDBTimeStamp  135
'adDecimal  14
'adDouble   5
'adEmpty    0
'adError    10
'adFileTime 64
'adGUID 72
'adIDispatch    9
'adInteger  3
'adIUnknown 13
'adLongVarBinary    205
'adLongVarChar  201
'adLongVarWChar 203
'adNumeric  131
'adPropVariant  138
'adSingle   4
'adSmallInt 2
'adTinyInt  16
'adUnsignedBigInt   21
'adUnsignedInt  19
'adUnsignedSmallInt 18
'adUnsignedTinyInt  17
'adUserDefined  132
'adVarBinary    204
'adVarChar  200
'adVariant  12
'adVarNumeric   139
'adVarWChar 202
'adWChar    130

accessで指定したテーブルが存在するか確認をする方法
MSysObjectsで
Name:オブジェクト名(テーブル名、クエリ名、モジュール名、、、)
Type:オブジェクトのタイプ「1」がテーブル

存在チェックをする関数
引数:strTName:調べたいてール部名
戻り値:ある場合はtrue
Function ReTableExists(strTName As String) As Boolean
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    With rst
        .ActiveConnection = gCN
        .Source = "select count(DateCreate) as 数 from MSysObjects where Name='" & strTName & "' and Type=1"
        .Open
        If !数 > 0 Then
            ReTableExists = True
        Else
            ReTableExists = False
        End If
        .Close
    End With
End Function
※gcnはコネクション。別途はっておくこと。

Microsoft Jet データベース エンジン SQL と ANSI SQL のデータ型

http://office.microsoft.com/ja-jp/access/HP010322291041.aspx

SQL データ型
http://office.microsoft.com/ja-jp/access/HP010322481041.aspx


DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, ”インポート先テーブル名", "ファイル名", True, "シート名" & "!"

※シート名に!を付加するのを忘れずに!
※true:ヘッダー情報あり  

Access の予約語

記号は、

   .   /   *   ;   :   !   #   &   -   ?   "   '   $

その他

http://support.microsoft.com/kb/286335/ja?spid=11265&sid=global


1)ローカルにTM_テーブル一覧を作成 

テーブルID 長整数型
テーブル名 テキスト型
パス テキスト型

2)

Option Compare Database
Sub LinkDB(strRefTableName As String, strRefPath As String)
'データベースリンク
Dim dbs As Database
Dim tdf As TableDef
Dim strLink As String
Set dbs = CurrentDb
Set tdf = dbs.TableDefs(strRefTableName)
With tdf
   strLink = ";DATABASE=" & strRefPath & ";TABLE=" & strRefTableName & ""
  .Connect = strLink
  .RefreshLink
End With
dbs.Close
Set dbs = Nothing
Set tdf = Nothing

End Sub

 

Sub LinkResetAll()
  gConnect 'コネクトする(かってにつくったモジュール)
    Set objMemb1 = New clsMember
  
   
    objMemb1.SetProerty strSCD
   

        Dim strTableName As String
        Dim rst As ADODB.Recordset
        Set rst = New ADODB.Recordset
        With rst
        .ActiveConnection = gCN
        .Source = "select * from TM_テーブル一覧"
        .Open
        Do Until .EOF
            LinkDB !テーブル名, !パス
            .MoveNext
        Loop
        .Close
    End With
   
   
 
End Sub


VBAで正規表現を使う には、RegExpオブジェクトをりする。

VBE(Visual Basic Editor)-ツール-参照設定で、

「Microsoft VBScript Regular Expressions 5.5」にチェックをつける。

RegExpオブジェクトについて

プロパティ 
・Pattern - 正規表現を定義するために使用される文字列。
・IgnoreCase - 大文字小文字を区別するかどうかを示す読み取り専用のブール値。
デフォルト: False。
・Global - 正規表現を文字列内のすべての可能なマッチに対してテストすべきかどうかを示す読み取り専用のブール値。
デフォルト: False


メソッド
・Test (文字列)
引数:文字列(検索文字列)
返値:boolean
正規表現がその文字列に対してマッチした場合には True を、そうでない場合には False

・Replace (検索文字列 置換文字列)
引数:2つの文字列、検索文字列 置換文字列
返値:文字列
検索文字列の中で正規表現のマッチに成功すると、そのマッチしたものを置換文字列に置き換えて、新しい文字列を返します。
マッチするものが見つからなかった場合は、元の検索文字列が返されます。

・Execute (検索文字列)
引数:文字列(検索文字列)
戻値:オブジェクト
成功したマッチの Matche オブジェクトを含んでいる Matches コレクション オブジェクトをかえす。

詳細は、

http://codezine.jp/a/article/aid/1655.aspx

 

 

 


このアーカイブについて

このページには、過去に書かれたブログ記事のうちAccessカテゴリに属しているものが含まれています。

次のカテゴリはcss&html&javascriptです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01

カテゴリ

日本の借金時計


なかのひと


Firefox3 Meter
Chrome Counter 携帯アクセス解析

どこ?

どここjpの位置取得サービスを利用しています



Yahooログロール



ジオターゲッティング


ジオターゲティング

amazon