2011/08/11

access2010 SQL Azureいってみようか -7-

まぁとりあえず進めてみる。ODBCリンクテーブルで使ってみる。
セキュリティ的にどうなんだってことはついて回るけど、それ以上にデータ転送量とかもかかわることになりそうだ。
SSMSでの作業。テーブルを作成しデータをインサートする。
create table table01
(
    ID int identity primary key,
    F01 nvarchar(20) collate japanese_ci_as not null,
    F02 nvarchar(5) collate japanese_ci_as not null
)
go

declare @i int
set @i = 1
while @i <= 10000
    begin
        insert into table01 values 
        (
            N'サンプル'  + right('0000'  + ltrim(str(@i)),5),
            ltrim(str(@i))
        )
        set @i += 1
    end
go

select [ID],[F01],[F02]
from [testdb01].[dbo].[table01]
go
リンクテーブルを作成する。
Function strCn() As String
    strCn = "ODBC;DRIVER=SQL Server Native Client 10.0;" & _
            "SERVER=tcp:hogehoge.database.windows.net;" & _
            "UID=testdb01user01@hogehoge;" & _
            "PWD=P@ssW0rd;" & _
            "DATABASE=testdb01;" & _
            "Encrypt=yes;"
End Function

Sub Createlinktable()
On Error GoTo ErrHnd
    Dim dbs As DAO.Database, tdf As DAO.TableDef
    Set dbs = CurrentDb
    Set tdf = dbs.CreateTableDef("dbo_table01")
    tdf.Connect = strCn
    tdf.SourceTableName = "dbo.table01"
    tdf.Attributes = dbAttachSavePWD 'ここ、お気を付けあそばせ
    dbs.TableDefs.Append tdf
    Application.RefreshDatabaseWindow
Done:
    Set tdf = Nothing
    Set dbs = Nothing
    Exit Sub
ErrHnd:
    MsgBox Err.Number & "/" & Error$
    Resume Done
End Sub
SSMS上で全レコードをselectしてみたところ。
 340KBってことでしょうか。
テーブルを直接開いた時、54KB程受信してスクロールをするたびに受信(多分、ページ分?)を繰り返す。なんにしてもテーブルを開くだけで一度に全部受信するということではないようだ。その他ソートするとそのたびに受信し直す感じになる。
 フィルターされていればその対象分だけ受信するという感じになる。

 日本語の扱いが困るということでしょう。パススルークエリしか方法がないか。。。
できればコストが膨れていくことは避けたいから、ODBCリンクテーブルであれこれするのは、かなり限定的な使い方になるかな。手軽ではあるけれども。

0 件のコメント: