• ベストアンサー

VBのマイグレーションについて

VB6からVB2005へのマイグレーションについて質問です。 マイグレーション後の問題について。 恐らく、マイグレーション後 ソースに若干変化があると思います。 go to文をtry catch文に修正したりする必要があるのかな・・ と予想したりしています。 これ以外にもソース上の変化・問題について教えてください。

noname#76583
noname#76583

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

VB2005以降はかなりVB6に近い構文が通るようになっています。 実際 >go to文をtry catch文に修正したりする必要 はなく、そのままでも動きます。 VB2003までは対応していなかったVB用の関数もかなりの部分対応しているし、何より「モジュール」なんてのができてますしね。 ということで、ソースそのものよりも、「参照設定」で設定しているようなコントロール・部品関連が問題です。 言語自体は同じ文法で動いても、そこで使われている部品は当然そのままで動くとは限らないわけで。 というか、標準コントロール以外ならまず動かないでしょうし。 そのあたりはNo2でいろいろ書かれているのでそれを参照すればいいかと。 アップグレードユーザーのために、いろいろ機能が加えられているのですが、それでも業務アプリとして(特にパフォーマンス・ソースの可読性)ちゃんと動くかは別物ですから…機械的なコンバート+αと考えてるとひどい目にあうかもしれないです。

その他の回答 (2)

  • equinox2
  • ベストアンサー率48% (321/660)
回答No.2

>ソースに若干変化があると思います。 簡単なソースであれば若干で済むかもしれませんが、ちゃんとした業務に 使用されていたまともなソースであれば、仕様書とソースを参考にして 新たに制作したほうが良いくらい違います。 #VB6ではできてVB.NET以降ではできない機能もあります。 また、サードパーティのOCXなどを使われている場合には、.NET対応版が 存在するかをまず調べてください。 MicrosoftのOCXが使われている場合には、列挙して各々が.NETで対応されているか 調査してください。 DBアクセスがある場合には、何を使用しているか調べてください。 RDO、ADO、DBベンダーのOCXなど .NETの標準はADO.NETです。使われているDBではサポートしていますか。 #オラクル、DB2ならネイティブプロバイダが準備されています onerrorの処理とTry Catchでは設計思想が違います。 いずれにせよ、業務用のソースであれば一筋縄では行きません。

noname#259269
noname#259269
回答No.1

まず技術調査として実際にやってみる・パターンを抽出する事だと思います。業務であればなおさらです。 それをせずに机上で予測を立てても、作業工程・規模は測れないと思うのですが。 他の人のケースを聞いても、あなたの対象ソースで100%そうであるかは、ソース毎に実装が異なりますので、参考にならない可能性がありますよ。

関連するQ&A

  • VB6の _ExtentX, _ExtentY

    VB6 アプリケーションのメンテナンスをしています。 修正前後で FRM ファイルのソース差分をとって確認したところ、_ExtentX, ExtentY の値が変わっていました。 今回の修正ではいじっていないのですが、変わってしまいまってました。 名前から、水平方向と、垂直方向の領域に関するプロパティと思われるのですがどこで設定されているのか分かりません。 そこで、質問ですが (1) このプロパティの意味は何でしょうでしょうか (2) このプロパティ値が変わることによりどのような影響があるのでしょう (3) このプロパティは意識する必要があるのでしょうか。 以上、ご教示願います。

  • finally ってどのようなときにつかうんですか?

    処理A try 処理B catch 処理C finally 処理D ---------------------- 処理A try 処理B catch 処理C 処理D ---------------------- 以上2種類 どのみち 処理Dはとおりますよね? いったいどのような場合使うのでしょうか? 言葉で書くのが難しいのならソースでも構いません・・。 (言語はできたら VBかC#)

  • VB2005でINSERT文が。。。

    こんにちわ、VB2005初心者でいつもお世話になってます。 単純なINSERT文「コンマ、')'、または有効な式の継続文字が必要です」のエラーです。記述のどこが間違いなのかご指摘いただけますでしょうか。 DataGridViewにAテーブル(MDB、5フィールド)データを表示して新規入力されたデータ(行)をAテーブルに追加しようとしています。これはデータソース追加でのクエリーではなくPG内に記述しています。 「values("& dTbl.Rows(i)(0)","」の「","」がエラーとなっています。 If dTbl.Rows(i).RowState = DataRowState.Added Then Try dCom = New OleDb.OleDbCommand( _ "INSERT INTO Aテーブル values("& dTbl.Rows(i)(0)","& dTbl.Rows(i)(1)"," _ & dTbl.Rows(i)(2)"," & dTbl.Row(i)(3)"," & dTbl"." & Row(i)(4)", cn) dCom.ExecuteNonQuery() cn.Close() MsgBox(dCom) MessageBox.Show("追加しました。", "通知") Catch ex As Exception cn.Close() MessageBox.Show(ex.Message) End Try End If よろしくお願いいたします。

  • VBのFileOpenとInputというコマンドをVC#で使えませんか?

    例:(VB)   FileOpen(2, "test.txt", OpenMode.Input)   Dim i, j, p, r, t As Integer Dim y, T1 As Double Dim x As Double Dim S1() As Double Dim S2() As Double Try Input(2, y) Input(2, T1) For p = 1 To Emax Input(2, x(p)) Next For t = 1 To Tmax Input(2, S1(t)) Next For t = 1 To Tmax Input(2, S2(t)) Next Catch ex As Exception FileClose(2) Exit Sub End Try

  • VB6自身が強制終了される

    アバウトな質問になりますこと最初にお詫びします。 現在WindowsXP(SP2)+VisulaBasic(SP5)にて開発しています。 ざっとした内容はEXE形式で作成されたメニューのプログラムから複数の(メニュー単位の)DLLを呼び出して処理するシステムです。よって全てのソースがVBGにて管理されています。 そこで先日まで動いていたプログラムが急にVB6自身がアボートしてしまうようになりそれ以来、アボートばかりしてしまいます。 ちなみに別のPC(WindowsXP+VB6 SPも同様)の環境では問題なく同じソースで動作しています。ソースの問題ではないと思うのですが何が原因なのでしょうか?ちなみに現段階ではVB6の再インストールを行ないましたが結果は同じでした。VBGから対象のプロジェクトを開放しDLLで実行しても同様でした。しいて言うなら先日メモリを増設したことぐらいの環境変化なのです。解りづらく尚且つアバウトで申し訳ありませんがどなたかご存知の方がおられましたらよろしくお願いします。

  • VB.Net TableAdapterで登録してい

    お世話になります。 VB.Net 駆け出しの者です TableAdapter に登録してあるストアドプロシジャーをよく実行しますが、 Dim Ret Integer Ret = Me.問題のTableAdapter.問題の関数(引数) こんな感じで実行しますが、実行後の戻り値は1か0の 反映した件数?!が帰ってきると思われるのですが、ストアド内のReTurn で返している値を取得するにはどうしたらよいのでしょうか? 例えば、ストアドプロシジャーの最後の部分で、下記のようにオートナンバーのキーを取得したい場合、ReturnValue の値を取得したいことってあると思うのですが、こういう場合、TableAdapter.関数の記述でReturnValue の値を取得するためにはどのような記述をすればいいのでしょうか? 何卒よろしくお願いいたします。 SET @Ret = @@IDENTITY COMMIT TRANSACTION RETURN @Ret END TRY BEGIN CATCH ROLLBACK TRANSACTION RETURN 0 END CATCH

  • VB6の印刷でメモリリーク

    VB6の印刷でメモリリーク VB6.0(SP6)について質問です。 PRINTERオブジェクトを使用して連続で印刷するとメモリリークが発生します。 プログラムは単純にPrint文で印刷しているのみですが、Printerオブジェクトに 問題があるのでしょうか? もしかしたら使用可能メモリ限界まで増加し続けるというWindowsの仕様でしょうか? お知恵をお貸しください。よろしくお願いします。 以下のソースを2秒周期のタイマで実行しています。 For iLoop = 0 To 100 Printer.CurrentX = iLoop Printer.CurrentY = iLoop Printer.Print "TEST" Next iLoop ’ テスト用にKILLDOCをしています Printer.KillDoc

  • 教えてください。。。

    try...catch構文を使ってテキストボックスに数字以外のものを 入力した時にエラーメッセージが表示するようにしたいのですが どのようにソースを書いたらいいのでしょうか? 教えてください。

  • 掲示板なぜ消える?

    http://haporun.go.to/index.cgi?bbs/index.html で掲示板を作っています。 初心者の浅い知識で作ったので、機能もほとんどなし。 たまに、以前にあった文が消えてしまうことがあります。 また、文章が長いと切り取られてしまうことがあります。 なぜなのか、わかりません。 ソースファイルは http://haporun.go.to/temp/bbs.zip においてあるので、ソースを見れば原因がわかりそうな人は、ぜひ見にきてください。 こういう方法はあまりいいことだとは思いませんが、この欄にソースやファイル構成をずらずら書き並べるのもいやだったので、こうさせてもらいました。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • VB.net エラーメッセージを英文にしたい。

    VB.net でプログラムを開発して居ます。 プログラムは海外拠点に出すものなのでメッセージは英文にしようとして居ます。 プログラムで出すメッセージは英文にしていますが、問題はシステムが出すメッセージです。 たとえば try ・・・・・・・・・ catch ex as exception MsgBox( ex.Message ) end catch とした場合、メッセージの内容が日本語に成ってしまいます。 当然、英文OS下でコンパイルすれば英文メッセージに成るでしょうが、手元に英文OSのPCはありません。 海外拠点は英文OSを使って居ます。 そこで、質問なんですが、この様なVB.netシステムが出すメッセージを英文にするにはどうしたら良いのでしょうか。 先ほどVB.Netの再インストールを英文でやってみましたが、これはインストールやコンパイルのメッセージが英文に成るだけの様でした。 PCの言語切り替えも英語にして診ましたが駄目でした。 NETのインストールを英語(選択が出来たかは定かではありませんが)でやり直すとかで英文の表示になりますでしょうか。 理想的には、海外拠点のPCは英文OSで、その他のモジュールも英文に成っているはずなので、開発は日本語でやっても、現地でプログラムを実行すると自動的に英文に成っていれば一番良いのですが。 お分かりに成る方がおられましたらお教え下さい。 宜しくお願いいたします。

専門家に質問してみよう