- PR -

DBの移行(access→SQL server)

1
投稿者投稿内容
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2006-05-30 19:26
題名についてなのですが、

今までVB6.0+accessで開発していましたが、
容量と、スピードの問題から、DBをSQL serverにしろと言われて、
移行作業を行っています。

そこで、下記の点について質問があります。

VB6.0+Accessの時接続はDAOで接続していました。
DBをSQL serverにした場合でも接続をDAOのままにしたいと思っていたのですが、

Update文がエラーになってしまいました。

dim adbxDB As Database

Set adbxDB = DBEngine.OpenDatabase("", False, False, "ODBC;Driver={SQL Server};Server=DBマシン名;Database=DB名;UID=ユーザー;pwd=パスワード")

adbxDB.Execute ("update test set コード = 30 ;")

でエラーになり、

adbxDB.Execute "update test set コード = 30 ;",dbSQLPassThrough

と引数をつける事で、エラーが解消されました。

dbSQLPassThrough SQLパススルー クエリーを実行します。(Jet ワークスペースでのみ使用可)
という内容ですが、初めにエラーが発生した理由としては、
SQL文をすべてDAO/Jetが解釈してODBCデータソースに渡したが、
解釈の仕方が正しくなく、エラーが発生していた。

dbSQLPassThrough をつける事で、解釈が正しくなったという認識でよろしいですか?

もし、DAO接続ではなく、ADO接続にした方がいいという意見がありましたら、
理由など教えて頂けますか?


※DAO接続のままにしようとしたのは、接続形態が変わらなければ、修正が、少ないかと思いました。
また、VB6.0にバンドルされているcrystal reports for visual basicを使用しているのですが、
DBをSql serverに変える為、管理ツールODBCの登録したユーザーDSNを使用して接続を
行うのでと考えていました。

お願い致します。
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-05-30 20:52
解析が正しくなったのではなく、JetEngineによる解析がされなくなったのです。
解析はSQLServerが行いますので、Accessの組み込み関数等は使用できなくなります。

また、パフォーマンスについてですが、
SQLServerにしたから劇的に速くなる、という過度な期待はしないほうがよいでしょう。
これはデータベースの設定、テーブル定義、クエリ等による部分が大きいからです。
例えば、マルチプロセッサ・大容量メモリでも作りが悪ければ
高々数十万レコードでの検索にさえ、数十秒掛かることもあります。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-05-30 21:18
こんにちは。

引用:

もし、DAO接続ではなく、ADO接続にした方がいいという意見がありましたら、
理由など教えて頂けますか?


*以下うろ覚えの情報なので確認してください。
今回ケイさんの要件は DB に SQL Server を使用することですから、DAO を利用する代わりに ADO(OLE DB) を利用することでパフォーマンスの向上を期待できます。

DAO は Jet を扱う場合には十分なパフォーマンスを発揮しますが、SQL Server 等の外部のデータソースも Jet 経由で扱うという仕様であるため、SQL Server と Access の組み合わせに DAO は最適ではありません。

ただ、ケイさんが発行されたパススルークエリや、ODBC Direct という RDO のラッパー機能を利用すれば外部データソース利用時のパフォーマンスは DAO をそのまま利用する場合よりも向上します。

引用:

DAO接続のままにしようとしたのは、接続形態が変わらなければ、修正が、少ないかと思いました。


コードの変更を最小限に抑えたり、使い慣れた技術を活用することで品質を高く保つという意味で DAO を使い続けるのは個人的にアリだと思います。
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2006-05-31 09:56
うえくまさん、Ueさん返信ありがとうございます。

引用:

解析が正しくなったのではなく、JetEngineによる解析がされなくなったのです。
解析はSQLServerが行いますので、Accessの組み込み関数等は使用できなくなります。


という事は、dbSQLPassThrough を指定しなければJetEngineによる解析になるので、
Accessの組み込み関数等が使用出来るという事になりますか?
でも、DBがSqlServerですから、無理か??

Sqlserverに移行するなら、dbSQLPassThrough は必ずつけなくては行けませんよね?
Sql文の書き方、関数が違うので。


引用:

ueさんの書き込み (2006-05-30 21:18) より:
*以下うろ覚えの情報なので確認してください。
今回ケイさんの要件は DB に SQL Server を使用することですから、DAO を利用する代わりに ADO(OLE DB) を利用することでパフォーマンスの向上を期待できます。
〜略〜
コードの変更を最小限に抑えたり、使い慣れた技術を活用することで品質を高く保つという意味で DAO を使い続けるのは個人的にアリだと思います。



そうですか。ありがとうございます。

使い慣れた技術を勝つようすることで品質の高さを考えるなら、
ADOに変更するかもしれません。

実は、本来私はADO接続で、VB6.0+Sqlserverの開発を行っているのですが、
DAO接続で、VB6.0+Accessの別の開発を行っている方からDBを移行したいと
質問されているのです。

結局全部自分が調べる事になるので、回答があやふやになりやすいこの状況を
考えるとADOに変更して貰った方が、品質を高くできそうですね。

ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)