DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
Nomal.NetでのIPv6の比較(5) | Nomal追加コントロールのtabindex値を既存の間に設定する方法(1) | Nomal.Net 5.0 におけるDLL参照問題?(7) | NomalVB.net非同期処理でtextboxに出力したい(2) | NomalToolStripStatusLabelの空白部分を埋めたい(2) | NomalOracle への OleDb 接続に失敗する(3) | Nomal正規表現で株価を取得したい(1) | Nomal親スレッドへ処理の移譲(7) | Nomalデザイナで編集・チェックアウトキャンセルすると(3) | NomalVB.NETで作成したDLLをVB6.0から呼び出す(3) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(4) | NomalクラスによるGetBytes関数のエンディアンの違い(2) | Nomal.Net 5.0 におけるServiceControllerの代替クラス(3) | Nomal[VB.NET]Excelのプロセスが終了しない(2) | NomalC#をVBに変換した際の強制的な参照渡し(2) | Nomal新たにshowしたフォームでのボタンのクリック(5) | Nomalリッチテキストボックスの文字を太文字にしたい(2) | NomalVB.netにおける固定長出力方法(3) | NomalDataObjectの使いまわし(5) | NomalLIstview のDataSource(2) | NomalClassの作り方(2) | NomalOpenFileDialogの初期ファイル名の表示が変(1) | NomalVB.NETのVBA化(2) | Nomal改行のコード(7) | NomalGoogle翻訳の結果の取得(2) | NomalStopwatchクラスのElapsedMillisecondsの挙動(2) | Nomal.net Chartで二重ドーナツグラフの作り方(3) | Nomalexeをショートカットから起動した場合のエラー(2) | Nomalデスクトップ と Desktop(6) | Nomalデザイナのプロパティウィンドウで静的プロパティを選択したい(3) | NomalPHPでシリアライズした、データをデシリアライズしたい(4) | Nomal二次元配列 インデックスが配列の境界外(2) | NomalVB.netで作成したexeのNgenによる弊害(1) | NomalDrawBezierの使い方について(7) | Nomalメジャーバージョンの異なるLog4netライブラリを参照したい(4) | NomalVB6→2005変換時のDeclare宣言のマーシャリング属性(8) | NomalGROUPBOXの複製について(vb.net)(1) | NomalActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて(4) | NomalAccess OLEでExecuteNonQuery(3) | NomalKeyDownでの右コントロールキーイベント(2) | NomalExcel複数シートの印刷順序(3) | NomalWMPへno(3) | NomalDataGridViewの行番号(7) | Nomalapp.config定義によるネットワークトレースログの世代管理(2) | Nomalrelease/debugのどちらで作成されたものかを判断する方法(2) | NomalC#コンソールアプリでタイピング練習ソフト作成(3) | Nomal自分自身を呼び出すのはOKですか(1) | NomalWebBrowser Control foreachで値が消える(2) | NomalDeclare宣言するdllと参照追加をするdllの区別(4) | NomalTaskクラスを.NET Framework 2.0で実現させる方法(2) | NomalVS2017で作成されたDLLをVS2005で作成されたAPで使用する方法(4) | NomalWebBrowser Controlを使って、任意の値を取得(5) | NomalEditボックスに簡体字をセットする方法(2) | NomalList型でエラーが起きてしまい・・・(1) | Nomalフォルダ内の全ての容量を取得したい(4) | NomalWebClientが上手く動かない(2) | Nomal共変性と反変性ってこういうこと?(4) | Nomalモードレスフォーム Warning IDE0067を回避したい(7) | NomalLINQの拡張メソッドの定義(1) | Nomalこんな演算子初めて見ました。(5) | Nomalプロセスからウインドウを取得(4) | Nomalフォーム外のカーソルの変更(2) | NomalLINQのメソッド構文の書き方(3) | NomalVB.NETでCSVを読み込む際にSQL文を使いたい(3) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(2) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(5) | Nomalラムダ式の勉強中(2) | NomalWebClientで、短期間にDownloadStringAsyncを実行したい(2) | Nomalvb.net+SQLiteで複数データベースファイルへのトランザクション方法(3) | NomalNewの使い方間違ってますか?(4) | Nomalジェネリック型インターフェースを使った変数を扱いたい(3) | NomalC#をVBに変換(2) | NomalProcess.WaitForExitで正常に動作しない?(3) | NomalCatch時のex.StackTraceの情報(3) | Nomalユーザーコントロール内のテキストボックスのmodifiedプロパティ(4) | NomalPictureBox.Locationのキャンセル(3) | NomalJOIN操作の構文エラー(4) | NomalVisualStudioでマクロ(3) | NomalVisualStudioでExcelのVSTO開発(3) | NomalOracleDataAccess を参照したプログラムでデバッグモードが機能しなくなる(3) | NomalIE11では表示されるが、.netのWebBrowserでは、表示されないHPを表示する方法(7) | NomalマウスのないOSでマウスカーソルの表示(2) | NomalRDP接続でのネットワーク帯域制限(0) | NomalFILE.COPYでIOExceptionエラーが出る(11) | NomalToolStripMenuItemにShortcutKeysを指定した際の、元のコントロールを取得する方法(2) | Nomal動的にプロパティや変数の値の取得(4) | NomalVB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法(4) | NomalMouseEventArgsのカレント座標(2) | Nomalリッチテキストボックスでの字間の調整(2) | NomalDrawImage でメモリ不足エラー(3) | Nomal必須コンポーネントの一覧に追加したい(0) | NomalCode128でバーコードが読み取れない(8) | NomalあるWindows10PCでビルドしたEXEがW8.1以下で実行エラー(5) | NomalApp.configのMy.Application.Log設定で使用できない属性が出る(0) | NomalVC++ → VB.Netに変換時に文法エラー(2) | Nomalvb2010を使用したmicrosoft Wordの任意の行の削除(0) | NomalVb.netからAccessへの接続について(3) | NomalSQL-Server Compact 4.0が表示されない(2) | Nomalバーコードの数字を非表示にしたい(2) | Nomal令和の日付への対応(3) |



■記事リスト / ▼下のスレッド
■34499 / 親記事)  VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(11回)-(2020/07/13(Mon) 17:33:13)
  • アイコン環境/言語:[VB.NET、.NET Framework2.0] 
    分類:[.NET] 

    VB6.0のプロジェクトをVS2005のコンバート機能を使用して変換したのですが、以下のワーニングが出ています。

    'UPGRADE_WARNING: 構造体 FileTime に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。
    Public Declare Function LocalFileTimeToFileTime Lib "KERNEL32.DLL" (ByRef lpLocalFileTime As FileTime, ByRef lpFileTime As FileTime) As Integer

    なお、FileTime構造体は以下の通りです。

    'FileTime構造体
    Public Structure FileTime
      Dim LowDateTime As Integer
      Dim HighDateTime As Integer
    End Structure

    Declare宣言時に引数の型に構造体を定義するときの属性は何を渡せばよいのでしょうか?
    それとも構造体のメンバの方に属性を追加するのでしょうか?

    ご存知の方がいらっしゃいましたら、ご教示いただけると幸いです。

違反を報告
引用返信

▽[全レス8件(ResNo.4-8 表示)]
■34503 / ResNo.4)  Re[2]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(14回)-(2020/07/13(Mon) 19:39:19)
  • アイコンNo34502に返信(Hongliangさんの記事)
    > おそらくその警告は、Declare文中にByRefで構造体を渡しているところ全部に自動的に付けられるものかと思います。
    > 提示されているLocalFileTimeToFileTime関数のDeclare文については、特に問題さそうです。
    > (他の関数のDeclare文で出ている箇所がある場合、それが問題ないかは個別の話になります)
    >


    ご回答ありがとうございます。

    問題があるかないかの判断はどのように考えればよろしいのでしょうか?
    他にもいくつか同じワーニングが表示されている場所があります。
    さすがに全部ここで質問するわけにもいきませんので、判断の基準がありましたらご教示いただけませんでしょうか。

違反を報告
引用返信
■34504 / ResNo.5)  Re[3]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ Hongliang 大御所(584回)-(2020/07/13(Mon) 20:04:45)
  • アイコン> 問題があるかないかの判断はどのように考えればよろしいのでしょうか?
    > 他にもいくつか同じワーニングが表示されている場所があります。
    > さすがに全部ここで質問するわけにもいきませんので、判断の基準がありましたらご教示いただけませんでしょうか。

    特に怪しいところ、という意味では、構造体内に配列や文字列型が含まれている部分と言えますが、
    結局はすべてを1つ1つ、構造体の定義も含めたAPI定義を正しくVBに翻訳できているか確認していくことになります。
    https://docs.microsoft.com/ja-jp/dotnet/framework/interop/marshaling-classes-structures-and-unions
    一応公式ドキュメントはこの辺りです。
    // 初心者の方に対して無茶ぶりが過ぎるだろうとは思います。

    結構な数のWindows APIについては、以下のサイトにサンプル定義が載っています。
    https://www.pinvoke.net/
    Declareの代わりに<DllImport>構文だったり、C#による定義しかなかったり、といったものも多いですが。
違反を報告
引用返信
■34505 / ResNo.6)  Re[4]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(15回)-(2020/07/13(Mon) 20:11:52)
  • アイコンNo34504に返信(Hongliangさんの記事)

    ご回答ありがとうございます。
    ご教示いただいたページを読んでみたいと思います。
    ありがとうございました。
違反を報告
引用返信
■34506 / ResNo.7)  Re[5]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ 魔界の仮面弁士 大御所(1286回)-(2020/07/14(Tue) 05:11:36)
  • アイコン2020/07/14(Tue) 09:09:11 編集(投稿者)

    No34501に返信(naoさんの記事)
    > Option Strict Offになっていますし、

    API を使うなら、できるだけ Option Strict On で動作するようコーディングされることをお奨めします。


    No34499に返信(naoさんの記事)
    > なお、FileTime構造体は以下の通りです。

    実は自前で宣言しなくても、.NET Framework には
    System.Runtime.InteropServices.ComTypes.FILETIME
    という構造体が既に用意されていたりします。


    > 'UPGRADE_WARNING: 構造体 FileTime に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。
    Google ってみたところ、英語版の VS2005 だと、
     'UPGRADE_WARNING: Structure FileTime may require marshalling attributes to be passed as an argument in this Declare statement. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="C429C3A5-5D47-4CD9-8F51-74A1616405DC"'
    になり、VS2003 の場合は、
     'UPGRADE_WARNING: Structure FileTime may require marshalling attributes to be passed as an argument in this Declare statement. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1050"'
    というメッセージになるらしいです。

    手元に ms-help プロトコルを開ける環境が残っていないので未確認ですが、「Visual Studio 2005」と共に
    「Visual Studio 2005 MSDN Library」をインストールしてあればリンクを開けるかもしれません。
    (リンクを開けたとしても、有益な情報を得られない可能性は高そうですが)


    上記リンクについて、何か情報が無いか探してみたのですが、見つかったのはこれぐらい。
    https://www.mobilize.net/vbtonet/ewis/ewi1050
    それっぽいことが書かれているものの、VB6 なのにユーザー定義型を ByRef ではなく ByVal 渡ししている時点で、資料として不自然ですね。

    あとは下記がヒットしました。
    37 ページ目の「3.5.2 Structure may require Marshalling Attributes to be passed as an Argument in this Declare Statement.」の項。

    今回の LocalFileTimeToFileTime のための有益な情報にはなるかどうかは別として、一応参考までに。
    https://www.cs.kau.se/cs/education/courses/davcdiss/Exjobb_2008/C2008-06.pdf



    > Declare宣言時に引数の型に構造体を定義するときの属性は何を渡せばよいのでしょうか?
    > それとも構造体のメンバの方に属性を追加するのでしょうか?

    Hongliang さんご提示の pinvoke.net は私もたびたび参考にさせてもらっていますが、今回の
    LocalFileTimeToFileTime API の宣言は掲載されていないみたいですね。
    FileTimeToLocalFileTime API の宣言は掲載されているのですけれども。

    すでに示されているように、今回の宣言は、自動変換された宣言のままで動くと思います。
    もしあえて修正するとすれば、In 属性および Out 属性を明示して
     ' Imports System.Runtime.InteropServices
     Public Declare Function LocalFileTimeToFileTime Lib "KERNEL32.DLL" (<[In]> ByRef lpLocalFileTime As FileTime, <Out> ByRef lpFileTime As FileTime) As <MarshalAs(UnmanagedType.Bool)> Boolean
     Public Declare Function FileTimeToLocalFileTime Lib "KERNEL32.DLL" (<[In]> ByRef lpFileTime As FileTime, <Out> ByRef lpLocalFileTime As FileTime) As <MarshalAs(UnmanagedType.Bool)> Boolean
    のようにすると良いのではないでしょうか。
    元の Win32 API の戻り値が「BOOL 型」であるため、上記では戻り値も As Boolean に変更してあります。


    No34503に返信(naoさんの記事)
    >>おそらくその警告は、Declare文中にByRefで構造体を渡しているところ全部に自動的に付けられるものかと思います。
    >>提示されているLocalFileTimeToFileTime関数のDeclare文については、特に問題さそうです。
    > 問題があるかないかの判断はどのように考えればよろしいのでしょうか?

    配列や文字列型以外の注意点として思いつくのは、StructLayout 属性の付与とか。

    例えば SHFILEOPSTRUCT 構造体は、StructLayout 属性で Pack:=1 を指定しておかないと、
    fAnyOperationsAborted 以降のメンバー位置がズレてしまうことになります。

    冗長なので、既定の設定のままで問題が無い場合は、属性指定を省略することも多いですが、
    余裕があれば StructLayout 属性にて、CharSet と Pack、時には Size も明示しておいた方が良いと思います。


    その他、個別判断が必要な例としては、 KB161301 の WindowFromPoint API が挙げられます。

    この API の本来の定義は『HWND WindowFromPoint( POINT Point );』なのですが、VB6 の制限により、
    多くの場合、引数定義を (ByVal xPoint As Long, ByVal yPoint As Long) に置き換えて代用されています。
    また、VBA7 でいうところの As LongPtr 型がまだ使えないので、戻り値が As Long で代用されているわけですが、
    これらそれぞれの「As Long」を、.NET の As Integer と As IntPtr に再翻訳する作業は、
    アップグレード ウィザードの自動変換だけではまかないきれないでしょう。
違反を報告
引用返信
■34507 / ResNo.8)  Re[6]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(16回)-(2020/07/14(Tue) 19:59:13)
  • アイコンNo34506に返信(魔界の仮面弁士さんの記事)
    > 2020/07/14(Tue) 09:09:11 編集(投稿者)
    ご回答ありがとうございます。

    色々調べてくださって、ありがとうございます。

    やはり特定の判断基準はないのですね。
    ご教示いただいたページを見ながら修正を検討してみます。
    ありがとうございました。

違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-8]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34493 / 親記事)  GROUPBOXの複製について(vb.net)
□投稿者/ 北松 一般人(1回)-(2020/06/29(Mon) 11:44:40)
  • アイコン環境/言語:[vb.net] 
    分類:[.NET] 

    VB.NETでプログラミング中です。

    WindowsFormにて、
    Form1内にGroupBox1を作成し、
    GroupBox1内に複数のLabelやTextBoxを配置しています。
    TextBoxには住所や氏名を入力し、
    Botton1クリックイベントでデータベースにレコードを登録します。

    【ここからやりたいこと】
    Botton2クリックイベントにてGroupBox1を複製し、真下にGroupBox2を作成し
    たい。
    作成されたGroupBox2内のTextBoxはすべてブランク。
    Botton2クリックイベントのたび、GroupBox3、GroupBox4と追加する。
    GroupBox1とGroupBox2にそれぞれ情報を入力し、別レコードとしてデータベー
    スに登録する。
    【ここまでやりたいこと】

    上記処理は可能でしょうか?
    可能な場合、サンプル等ご教授いただければ幸いです。

    不可の場合、代替手段があれば教えてください。

    よろしくお願いします。
違反を報告
引用返信

▽[全レス1件(ResNo.1-1 表示)]
■34494 / ResNo.1)  【報告】No34493 の投稿はマルチポストです
□投稿者/ (報告) 大御所(274回)-(2020/06/29(Mon) 16:28:29)
  • アイコンNo34493 の投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

    ●マルチポストされている場所
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=95177

    ----------
    この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

    ●書き込みのルールについて
    https://dobon.net/vb/bbs/index.html
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-1]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34488 / 親記事)  ActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて
□投稿者/ かずき 一般人(1回)-(2020/06/18(Thu) 23:26:37)
  • アイコン環境/言語:[windows 10 64bit] 
    分類:[.NET] 

    初めて投稿させて頂きます。

    ActiveReports 3.0からActiveReports 7.0に変更し、ファイルコンバータでコードを更新したのですが、以下コードが正常に機能せずリビルドを行えません・・・どなたか対処方法をご教示頂けないでしょうか。。。。
    かなりピンチで困っております。

    Visual studio 2012で開発しています。OSはwindows10です。

    ・DataDynamics.ActiveReports.Toolbar.ToolStrip.PlaceHolder
    ・Document.Print
    ・Me.Viewer1.Toolbar.ToolStrip.Tools(i).Visible

    ルールは確認しましたが、マナーなどに問題があればご指摘いただければ幸いです。
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34489 / ResNo.1)  Re[1]: ActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて
□投稿者/ KOZ 一般人(1回)-(2020/06/19(Fri) 08:41:29)
  • アイコンNo34488に返信(かずきさんの記事)
    > ・DataDynamics.ActiveReports.Toolbar.ToolStrip.PlaceHolder
    > ・Document.Print
    > ・Me.Viewer1.Toolbar.ToolStrip.Tools(i).Visible

    ここを見れば解決しそうな気がします。

    「互換性に関する注意事項」
    https://docs.grapecity.com/help/activereports-9/Compatibility.html

違反を報告
引用返信
■34490 / ResNo.2)  Re[2]: ActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて
□投稿者/ かずき 一般人(2回)-(2020/06/19(Fri) 10:45:12)
  • アイコン ここを見れば解決しそうな気がします。
    >
    > 「互換性に関する注意事項」
    > https://docs.grapecity.com/help/activereports-9/Compatibility.html
    >

    KOZ様

    情報のご提供ありがとうございます。

    URLを参考とし、少し手を加えてみましたがうまく進みません。

    ・DataDynamics.ActiveReports.Toolbar.ToolStrip.PlaceHolder
    →修正前は『Dim phd(3) As DataDynamics.ActiveReports.Toolbar.ToolStrip.PlaceHolder』と定義されたいたため、以下のように3つの変数として分けるようにしました。

    Dim phd_1 As New ToolStripButton("カスタム注釈")
    Dim phd_2 As New ToolStripButton("カスタム注釈")
    Dim phd_3 As New ToolStripButton("カスタム注釈")

    その結果、以下の2箇所でエラーが発生するようになってしまいました。

    phd_1.Control = ctrLabel(0) ※ctrLabel(0)はLabelコントロールです
    phd_1.Id = 24


    ・Document.Print
    →まだ解決策が見えていません。


    ・Me.Viewer1.Toolbar.ToolStrip.Tools(i).Visible
    →『Me.Viewer1.Toolbar.ToolStrip.Items(i).Visible = False』と変更したところエラーが発生しなくなりましたが、まだリビルドをかけられていないため動作の確認を行えていません。



    私の理解不足により何から何まで質問する形となり大変恐縮ではございますが、
    月曜納品と納品まであまり時間がなくかなりテンパっております。

    お力添えの程、何卒よろしくお願い致します。

違反を報告
引用返信
■34491 / ResNo.3)  Re[3]: ActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて
□投稿者/ KOZ 一般人(2回)-(2020/06/19(Fri) 13:51:54)
  • アイコンNo34490に返信(かずきさんの記事)

    ツールバーは、Windows Forms の ToolStrip なので、ラベルであれば ToolStripLabel に置き換えれば良いのでは?

    並びや機能が違うでしょうから、前のプログラムと同等の表示にしたいのであれば調整が必要になります。

    > ・Document.Print
    > →まだ解決策が見えていません。

    Viewer.Printメソッドを使用しては?

違反を報告
引用返信
■34492 / ResNo.4)  Re[4]: ActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて
□投稿者/ かずき 一般人(3回)-(2020/06/19(Fri) 17:47:01)
  • アイコンNo34491に返信(KOZさんの記事)
    > ■No34490に返信(かずきさんの記事)
    >
    > ツールバーは、Windows Forms の ToolStrip なので、ラベルであれば ToolStripLabel に置き換えれば良いのでは?
    >
    > 並びや機能が違うでしょうから、前のプログラムと同等の表示にしたいのであれば調整が必要になります。
    >
    >>・Document.Print
    >>→まだ解決策が見えていません。
    >
    > Viewer.Printメソッドを使用しては?
    >

    KOZ様

    ご返事ありがとうございます。

    ご助言頂いた内容にてなんとかエラーは発生しない状態にすることができました。

    納品日がずれたのでまだ動作確認は一切できていませんが、
    (今日は帰って良いと言われました)
    来週の動作確認後に何かありましたらまたこの掲示板にて相談させて頂くかもしれません。その時は何卒よろしくお願い申し上げます。

    また、こちらは解決済と致します。

    本当にありがとうございました。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34484 / 親記事)  Access OLEでExecuteNonQuery
□投稿者/ み 一般人(1回)-(2020/06/16(Tue) 02:06:47)
  • アイコン環境/言語:[VS2019 NET4.5] 
    分類:[.NET] 

    こんにちは「み」ともうします。
    下記C#2019 AccessDBに対してデータ登録(update)するコードです。
    
    StrSQL = "UPDATE TABLE1 SET DATA1 = @D1 WHERE D2 = @WKEY"
    ExecuteNonQueryの実行後で処理件数は0が返ります。
    ちなみに(insert)はうまくいきます。
    現在updateのみ失敗します(いろんなテーブルにためにましたが0件でした。
    元ソースのSQL-SERVERからAccessのOLE接続にしたためなにか
    不都合な箇所がありますでしょうか
    よろしくお願い致します。
    
    using (OleDbConnection conn = new OleDbConnection(ConnectionString))
    {
        try
        {
            conn.Open();
            using (OleDbCommand cmd = new OleDbCommand(StrSQL, conn))
            {
                cmd.Parameters.Clear();
                cmd.Connection = conn;
    
                para = "@WKEY";
                cmd.Parameters.Add(new OleDbParameter(para, OleDbType.VarChar));
                cmd.Parameters[para].Direction = ParameterDirection.Input;
                cmd.Parameters[para].Value = "TEST";
    
                para = "@D1";
                cmd.Parameters.Add(new OleDbParameter(para, OleDbType.Integer));
                cmd.Parameters[para].Direction = ParameterDirection.Input;
                cmd.Parameters[para].Value = 1;
                int s =  cmd.ExecuteNonQuery();
            }
        }
        catch (Exception ex)
        {
        }
    }

違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■34485 / ResNo.1)  Re[1]: Access OLEでExecuteNonQuery
□投稿者/ Hongliang 大御所(580回)-(2020/06/16(Tue) 09:27:04)
  • アイコン2020/06/16(Tue) 14:59:34 編集(投稿者)

    > StrSQL = "UPDATE TABLE1 SET DATA1 = @D1 WHERE D2 = @WKEY"

    > para = "@WKEY";
    > cmd.Parameters.Add(new OleDbParameter(para, OleDbType.VarChar));
    > cmd.Parameters[para].Direction = ParameterDirection.Input;
    > cmd.Parameters[para].Value = "TEST";
    >
    > para = "@D1";
    > cmd.Parameters.Add(new OleDbParameter(para, OleDbType.Integer));
    > cmd.Parameters[para].Direction = ParameterDirection.Input;
    > cmd.Parameters[para].Value = 1;

    OLEDBの仕様からくるものだったかと思いますが、OleDbCommandのパラメータは、名前を無視して、単純にAddされた順に、クエリのパラメータ部分に当てはめていく仕様のはずです。
    なのでこの場合、クエリに最初に出現するパラメータ DATA = @D1 のところに、最初にAddされたパラメータ Name:="@WKEY", Type:=OleDbType.VarChar, Value:="TEST" が当てはめられることになります。

    // OleDbを使う場合はクエリ内のパラメータ指示子は基本的に ? を使うので、@xxx が使えるのは知りませんでした。
    // でもどうせ名前は使われないので却ってややこしい部分もありますね。
違反を報告
引用返信
■34486 / ResNo.2)  Re[2]: Access OLEでExecuteNonQuery
□投稿者/ み 一般人(2回)-(2020/06/16(Tue) 21:54:16)
  • アイコンHongliangさん 返信ありがとうございます。
    順番を変えてたところ正常に処理されました。
    そうかOLEは順番どうりにしないとだめなんですね・・
    AddしないでSQL文からReplaceで文字列変換した方が保守しやすいかも。
    ありがとうございました。


    No34485に返信(Hongliangさんの記事)
    >
    > OLEDBの仕様からくるものだったかと思いますが、OleDbCommandのパラメータは、名前を無視して、単純にAddされた順に、クエリのパラメータ部分に当てはめていく仕様のはずです。
    > なのでこの場合、クエリに最初に出現するパラメータ DATA = @D1 のところに、最初にAddされたパラメータ Name:="@WKEY", Type:=OleDbType.VarChar, Value:="TEST" が当てはめられることになります。

解決み!
違反を報告
引用返信
■34487 / ResNo.3)  Re[3]: Access OLEでExecuteNonQuery
□投稿者/ Hongliang 大御所(581回)-(2020/06/17(Wed) 09:14:19)
  • アイコン> AddしないでSQL文からReplaceで文字列変換した方が保守しやすいかも。

    静的な文字列ならともかく、外部から入力される文字列を直接クエリに混ぜ込むのはNGです。
    SQLインジェクションを起こす典型的なパターンです。
    必ずパラメータを使いましょう。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-3]



■記事リスト / ▲上のスレッド
■34481 / 親記事)  KeyDownでの右コントロールキーイベント
□投稿者/ Kuroi 一般人(1回)-(2020/06/13(Sat) 12:24:52)
  • アイコン環境/言語:[VB.NET(2005)/Windows7 32bit→1064bit] 
    分類:[.NET] 

    これまでWindows7 32bitで動作していた社内アプリについて、Windows10 64bitで動作しないかと検証したところ、
    Form_KeyDownイベントでの右コントロール(Keys.RControlKey)が反応しないことがわかりました。
    これを何とか動かしたいと考えています。

    厳密には、過去にWindows8や10の64bitで検証したときも動かず、ただしその時に、コンパイラの
    CPUがAnyになっているため、x86にすれば直る、あるいはSDKに含まれるCorFlags.exeにて対応すれば動いていました。

    ところが時間が暫く経って、今になって同じことをしようとするも動かなくなりました。
    変わったことといえば、PCが新しくなって、.netFramework3.5が初期状態オフになってことぐらいしか思い浮かびません。

    (ソース変えずに動けばベストなのですが)
    そもそもを何とかしようと考えております。
    右コントロール(Keys.RControlKey)以外の、たとえばKeys.F1などとすればこれは反応しました。
    Keys.Zなども反応します。
    ただ、Keys.ControlKeyやKeys.ShiftKeyなどは同様に動作しませんでした。
    CtrlやShift(ALTも?)などのキーは特殊キーだということはググっていて何となくわかってきたのですが、
    右コントロールキーを使って、何とか代替手段などで進められる方法があればご教示願えないでしょうか。

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34482 / ResNo.1)  Re[1]: KeyDownでの右コントロールキーイベント
□投稿者/ Hongliang 大御所(579回)-(2020/06/13(Sat) 14:19:31)
  • アイコン// ひょっとしたらキーボードやキーボードドライバによる影響もあるのかもしれませんが

    Keys列挙体はWindowsのVirtual Key, VKをそのまま転写したものです。
    https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardstate
    そして、ctrlキーのL/Rを区別するVK_LCONTROL/VK_RCONTROLは、
    > These left- and right-distinguishing constants are available to an application only through the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions.
    とあるように、非常に限定されたAPIでのみ有効な値になっています。
    Control.KeyDownイベントはWM_KEYDOWNメッセージのラッパであり、ここでは単純にWM_KEYDOWNのWPARAMをKeysとして扱ってるだけなので、Windows/WinFormとしては、KeyDownイベントのKeyEventArgs.KeyDataでL/Rの区別はつけていないというのが仕様と考えられます。

    区別をつけたいのであれば、前述のVK_L*/VK_R*を使えると明言されているAPIを改めて呼び出す必要があるでしょう。
違反を報告
引用返信
■34483 / ResNo.2)  Re[2]: KeyDownでの右コントロールキーイベント
□投稿者/ Kuroi 一般人(3回)-(2020/06/14(Sun) 11:07:54)
  • アイコンHongliang様

    ありがとうございます。
    L/Rどころか、Shift、Control単体でもダメだったので、何かあるのかなと思っていました。

    その後、少し検証を進めたところ、たまたま次のようにしていて

    Case Keys.F1
     関数呼び出し()
    Case Keys.RControlKey
     関数呼び出し()

    やはり右コントロールはきかないのですが、一度、F1キーを入力した後はきくようになりました。
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]






Mode/  Pass/


- Child Tree -

2021/02/28(Sun) 17:54:39 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする