[OSGeoJapan-discuss] spatialite形式レイヤの属性テーブルを ADOで接続・編集したい

西村和志 kazushin @ affrc.go.jp
2010年 7月 12日 (月) 01:05:53 EDT


嘉山様
皆様

お世話になります。

下記にあるODBCドライバの内、SQLite3 ODBC Driverを使うと、ADODBでExcelにデータを書き出すことはできました。
http://www.ch-werner.de/sqliteodbc/
しかし、フィールドの値を更新するためにADODB.Recordestのupdateメソッドを実行しようとすると実行時エラーが生じます。
下記はコード例です。
////////////////////////////////////////////////////////////////////////////
Sub test()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
'Connection生成と接続文字列の設定
Set con = New ADODB.Connection
con.ConnectionString = "DRIVER=SQLite3 ODBC Driver;Database=F:\gisdata\spatialite\test1.sqlite"
'sqliteに接続
con.Open
Set rs = New ADODB.Recordset
rs.Open "SELECT pkuid,地権者,面積 FROM test_Land;", con, adOpenStatic, adLockPessimistic, adCmdText
rs.MoveFirst
i = 1
Do Until rs.EOF = True
'以下3行はデータをExcelに書き出す。これは問題なく書き出す
'    Cells(i, 1).Value = rs.Fields("pkuid").Value
'    Cells(i, 2).Value = rs.Fields("地権者").Value
'    Cells(i, 3).Value = rs.Fields("面積").Value
'以下2行は全てのレコードの"地権者"フィールドに"農研機構"を入力する。が、updateで実行時エラー
    rs.Fields("地権者") = "農研機構"
    rs.Update    
    rs.MoveNext
    i = i + 1
Loop
'接続を閉じる
con.Close
Set con = Nothing
End Sub
/////////////////////////////////////////////////
ちなみに
「test1.sqlite」はspatialite-guiで作成し、そこにQGISver1.5でspatialite形式でレイヤ「test_Land」を作成しています。

ADO.NET用のプロバイダとしては下記のものを見つけたので試してみました。
http://sourceforge.net/projects/sqlite-dotnet2/files/
VisualStudio2008のデータソース構成ウィザードでプロジェクトに上記プロバイダで
test1.sqliteに接続、フォームに「test_Land」をドラッグすると、データグリッドビューでデータを表示することはできます。
(接続の時に「ジオメトリ」フィールドは除外しておく。)
しかし、データグリッドビューのセル内で値を編集してから上書きしようとすると、やはりエラーになります。

結局、VBAのADO、visualstudioのADO.NETいずれも
接続してデータを取得・表示できるけれど、編集はできない、という状況です。

う〜ん、QGISのpythonプラグインの特訓をした方が速いような気がしてきました。





>西村様
>皆様
>
>嘉山@OSGeo.jp です
>
>QGISで新規レイヤとしてspatialiteが利用できるようになったのはV1.5からです
>ので、まだこの機能を試した方は少ないと思います。
>そういう意味では、この機能の利用については現状では人柱的な位置になると思います。
>
>私もこのあたりの機能のGUIメッセージを確認するために先週の金曜日に初めてここの
>機能を使ったというのが現状でして、これから一緒に勉強させてくださいという段階です。
>
>spatialite自体はSQLiteの拡張で単一ファイルで空間データベースを構築できるので
>注目しております。
>
>とりあえずここでSQLiteの知識を仕入れてみました
>http://ja.wikipedia.org/wiki/SQLite
>
>データ型についてですが
>
>>データ型を指定する必要がない
>>サポートしている型は、Null/Integer/Real/Text/BLOBのみ
>>Unicodeのサポート
>>BLOBはメモリの許す限り
>>ROWIDを持っている (しかし、外部制約キーの仕組みがない)
>
>とのことです。Textとかは長さの指定が無いようです
>
>ODBCについては以下の記述があります
>
>>SQLiteのODBCドライバがサードパーティから提供されている。SQLite 2とSQLite 3のバージョンがあり、SQLite 2
>>向けには、さらにUTF-8対応版がある。Microsoft AccessからODBCリンクするときには、データ型をあらかじめ
>>SQLite側のCREATE TABLEで宣言しておく必要がある。そうしておかないと、全てのデータ型がintとみなされる
>>ことがある。日本語文字コードはUTF-8としておけば、Access側でも正しく表示される。
>
>ここらあたりについてちょいとためしてみてはいかがでしょうか。
>
>2010年7月11日9:33 西村和志 <netwaker @ msc.biglobe.ne.jp>:
>> お世話になります。
>>
>> 標記の件についてどなたかご教示いただけないでしょうか。
>>
>> QGISver1.5より編集可能になったspatialite形式についてです。
>>
>> SHP形式やArcGIS のmdb形式のレイヤはADOやADO.netで属性テーブルに接続して、
>> sqlクエリで値の入力・編集を行うことができますが、
>> spatialite 形式レイヤの属性値を同様の方法で編集することはできないでしょうか。
>> http://www.ch-werner.de/sqliteodbc/
>> に sqliteのODBCドライバがあるので、これで試してみたのですがうまくいきません。
>> ExcelVBAや.NETで作成したカスタムフォームで
>> 簡易にデータ入力を行うことができれば様々な業務システムのGISエンジンにQGISを
>> 採用することも考えられるので何とかしたいと考えています。
>> (QGISプラグインを作成できれば一番よいのですが、いかんせん、難しいです・・・。)
>>
>> それと、spatialiteでレイヤを作成し、フィールドを追加すると string型の文字数や数値型の桁数の指定が
>> 表示されません。これはspatialite形式の仕様でしょうか?
>>
>> よろしくお願いいたします。
>>
>> ////////////////////
>> Not Haste,Not Rest
>> ///////////////////
>______________________________________________________________________
>
>_______________________________________________
>OSGeoJapan-discuss mailing list
>OSGeoJapan-discuss @ lists.osgeo.org
>http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss

//////////////////////////////////////////////////
(独)農業・食品産業技術総合研究機構
九州沖縄農業研究センター 
イネ発酵TMR研究チーム
経営担当 西村和志
Email kazushin @ affrc.go.jp
TEL (096)242-1150
FAX (096)249-1002
携帯 090-2054-7930
携帯mail netwaker @ ezweb.ne.jp
HP http://konarc.naro.affrc.go.jp/index.html
//////////////////////////////////////////////////



OSGeoJapan-discuss メーリングリストの案内