今月に入って苦労していた

VS2010からoracle11gの参照がうまくいかない


いろんなことを試したんですが、結局oracle Clientを64bit版と32bit版の両方インストールすることで解決しました。



PCのCPUが64bit対応のもので、OSもVS2010ももちろん64bit版を入れてたので


oracleも64bit版を入れれば問題ないだろうと思ってたんですが・・・・


oracle client自体はそれで問題なく動きました。



ただ、ODACをインストールしてVS2010から参照設定してもエラーで動かない状況


最後の最後でVS2010が64bit版のものを入れていても、32bitで動作する時があるとの掲示板情報を見て


oracleclient32bitとODAC32bitを追加インストールしました。



そうしたら、参照設定が従来どおりできて、サーバーコントローラもちゃんと動きましたええ!!


VS2010がまだ64bit対応しきれてないってことなのかな苦笑


この問題は64bit端末が多く普及していけば、解決していく問題かもしれません。

先月から着手してる開発の環境


Windows7 64bit

oracle11g 6

visualstudio2010 64bit



ちょっとした事情でoracle11gを64bitと32bit両方入れていました。


するとVS2010からの参照がうまくいかない。


エラーを見るとどうもassembly内のファイルが競合してうまく読み込めない様子



しょうがないのでいったんすべてアンインストールして再インストールってことになったんですが、アンインストールも一筋縄ではいきません


アンインストールはOracle Universal Installerを立ち上げ、「製品の削除」をクリックし、削除を行う。


ですが、64bit版はUIが対応してないのか、フォルダ内のdeinstall実行するよう指示される。


コマンド実行


スタートメニューから「Oracle」フォルダが消えて、サービスを開くと、Oracle関係のサービスがすべて消えたことが分かる。

※サービスの確認

  msconfig→サービスタグ


晴れその他の作業
Oracleに関係するファイルを削除しても、まだ作業は残っている。これをしっかりやらないと、ごみが残ってしまい、Oracle11gを入れなおすのに苦労するので、確実に行う。


晴れ残ったフォルダの削除
残ったフォルダなどを削除する。

ロックがかかって削除できない場合は、パソコンを再起動し、再度削除を行う。

C:\app\user
C:\Program Files\Oracle


晴れレジストリの削除
「コマンドプロンプト」もしくは「ファイル名を指定して実行」から「regedit」と入力しレジストリ・エディタを開き、「HKEY_LOCAL_MACHINE」→「SOFTWARE」の中にある「ORACLE」フォルダを削除する。


晴れGACのアンインストール


晴れ再起動
以上の処理を行ったら、パソコンを再起動する。

去年からPHPやったり携帯システム開発やったりしてましたが、最近またASP.netの作業に戻ってきましたにゃ


インプリンティングみたいなものなのか、最初に着手したアプリケーションなので1番落ち着きます苦笑


でも、Web系の開発ってjavaとかPHPが主流で.netのサンプルが少ないのがつらいとこですカピバラ



サンプル無くて今ちょっと苦労してるのが、メニュー作りウキャー!


今はどこのサイトもTOPページとかお洒落ですしね~カピバラ


うちもワンパターンな画面の使いまわしじゃ駄目だよねってことでショック



メニューやサイトマップについては以前作成したことがあります が、当時はメニュー用に新規でテーブルを追加しましたあひる


今回は既存システムの見直しなので、テーブル変更や追加はできるだけ無い方向で考えないといけないのでちょっと大変ムンクの叫び



処理の手順としては


親ノードのみのメニュー項目を抽出して追加


親ノードに付随する子ノードのメニュー項目を抽出して追加していく


これをひたすらループ処理



Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If Not IsPostBack Then
    PUT_TREE_MENU("", treeMnu.Nodes) '新規作成 ツリービュー
  End If
End Sub

Private Sub PUT_TREE_MENU(ByVal parent As String, ByVal nodes As TreeNodeCollection)
  Dim ds As DataSet ' メニュー情報
  Dim strPRG_ID As String = parent

  メニュー項目の抽出条件  ⇒抽出結果:ds
   親ノードの項目はPRG_ID=parent("")
   子ノードの場合は桁=parent(親項目の桁)

  With ds.Tables(0)
   For i As Integer = 0 To .Rows.Count - 1
     Dim node As New TreeNode()
     Dim rootnode As New TreeNode()
     If parent = "" And i = 0 Then
     '最初の1回だけルートノードの作成

       rootnode.Text = GSYA_NM & "メニュー"
       nodes.Add(rootnode)
     End If

     '親ノード作成
     If .Rows(i)("行") = 0 Then
       node.NavigateUrl = ""
       node.Text = .Rows(i)("名称")
       node.Target = "_blank"

       Me.PUT_TREE_MENU(.Rows(i)("桁"), node.ChildNodes)

     Else '子ノード作成
       node.NavigateUrl = .Rows(i)("プログラム")
       node.Text = .Rows(i)("名称")
       node.Target = "_blank"
     End If

     nodes.Add(node)

   Next

  End With
End Sub



テーブルの構成が以前やった時と違うので、


Me.PUT_TREE_MENU(.Rows(i)("桁"), node.ChildNodes)


の処理の順番が違います苦笑


というか、この処理をミスって危うく無限ループにはまりそうでしたガクリ