- - PR -
DBの移行(access→SQL server)
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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を使用して接続を 行うのでと考えていました。 お願い致します。 | ||||||||
|
投稿日時: 2006-05-30 20:52
解析が正しくなったのではなく、JetEngineによる解析がされなくなったのです。
解析はSQLServerが行いますので、Accessの組み込み関数等は使用できなくなります。 また、パフォーマンスについてですが、 SQLServerにしたから劇的に速くなる、という過度な期待はしないほうがよいでしょう。 これはデータベースの設定、テーブル定義、クエリ等による部分が大きいからです。 例えば、マルチプロセッサ・大容量メモリでも作りが悪ければ 高々数十万レコードでの検索にさえ、数十秒掛かることもあります。 | ||||||||
|
投稿日時: 2006-05-30 21:18
こんにちは。
*以下うろ覚えの情報なので確認してください。 今回ケイさんの要件は DB に SQL Server を使用することですから、DAO を利用する代わりに ADO(OLE DB) を利用することでパフォーマンスの向上を期待できます。 DAO は Jet を扱う場合には十分なパフォーマンスを発揮しますが、SQL Server 等の外部のデータソースも Jet 経由で扱うという仕様であるため、SQL Server と Access の組み合わせに DAO は最適ではありません。 ただ、ケイさんが発行されたパススルークエリや、ODBC Direct という RDO のラッパー機能を利用すれば外部データソース利用時のパフォーマンスは DAO をそのまま利用する場合よりも向上します。
コードの変更を最小限に抑えたり、使い慣れた技術を活用することで品質を高く保つという意味で DAO を使い続けるのは個人的にアリだと思います。 | ||||||||
|
投稿日時: 2006-05-31 09:56
うえくまさん、Ueさん返信ありがとうございます。
という事は、dbSQLPassThrough を指定しなければJetEngineによる解析になるので、 Accessの組み込み関数等が使用出来るという事になりますか? でも、DBがSqlServerですから、無理か?? Sqlserverに移行するなら、dbSQLPassThrough は必ずつけなくては行けませんよね? Sql文の書き方、関数が違うので。
そうですか。ありがとうございます。 使い慣れた技術を勝つようすることで品質の高さを考えるなら、 ADOに変更するかもしれません。 実は、本来私はADO接続で、VB6.0+Sqlserverの開発を行っているのですが、 DAO接続で、VB6.0+Accessの別の開発を行っている方からDBを移行したいと 質問されているのです。 結局全部自分が調べる事になるので、回答があやふやになりやすいこの状況を 考えるとADOに変更して貰った方が、品質を高くできそうですね。 ありがとうございます。 |
1