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

Yoichi Kayama yoichi.kayama @ gmail.com
2010年 7月 12日 (月) 05:34:39 EDT


西村様
皆様

嘉山です

ご指定のODBCドライバをインストールしてファイルを操作してみましたが、西村様と同じようにデータの読み込みは
できるのですが更新っしようとするとエラーが発生します。
私の場合は単純にAccess2003でODBCを利用してspatialiteのファイルを開いてみたところです。

spatialiteやSQLiteのODBCはバージョンの相性が問題であるようです。
OSGeo4w のQuantumGIS 1.5  r13910 の ヘルプ->Quantum GISについて を開いてみると
「SpatiaLiteのサポート付きでビルドされています(2.4.0)」とありますので、利用しているSpatiaLiteのバージョンが
2.4.0であることがわかります。

SpatialiteのWEBページをみてみると 2.4.0はまだ安定版ではないようですね。
もしかするとスタンドアロン版のQGIS1.5の場合どのバージョンのSpatialiteを利用するかわかりませんから、
スタンドアロン版ができたらインストールしてみてから、ここのバージョンをたしかめておくといいと思います。

SQLite's latest version (3.6.16)というように最新版が利用されているようです。
ここにあとは日本語コードが何を使っているかとかShiftJISなのかUTF-8なのかもからんでくるようですので、
まずはSQLiteで日本語含みのDBの場合ODBCがどうすれば利用できるかを検証する必要があると思います。

SQLiteで正しく動く条件がわかったら、それがspatialiteで動作するかどうかを検証できればいいと思います。

なにかサンプルデータを決めて、いろいろな組み合わせを手分けして試行してみて、その結果をFAQに書いておけば
spatialiteを利用する手順としていい情報共有になると思います。


http://www.gaia-gis.it/spatialite-2.4.0/index.html
日本語ははいっていませんが、まずはここのページの 	samples.tar.gz
http://www.gaia-gis.it/spatialite-2.4.0/samples.tar.gz

ここにあるデータベースの読み書きができるODBCとアプリケーションのくみあわせをさがすわけで、
読み書きに失敗した情報なんかもほしいですね。

というわけで、上記spatialiteファイルの読み書きができるプログラム、ドライバの組み合わせ情報がありましたら
このMLにご報告いただけるとありがたいです->皆様
また読み書きできない組み合わせの情報も同様にお願いします。

私も時間みつけてちょくちょくいじってみます。


2010年7月12日14:05 西村和志 <kazushin @ affrc.go.jp>:
> 嘉山様
> 皆様
>
> お世話になります。
>
> 下記にある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 メーリングリストの案内