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

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

記事リスト ( )内の数字はレス数
NomalWindowsMediaPlayerで次のURLを指定しても反映されない。(2) | Nomal"−"を縦書きにしたい(9) | Nomal.NET6.0 のWinFormにWPFのユーザーコントロールを配置したい(4) | NomalDataGridViewの列にコンボボックスを表示する(2) | Nomalデータグリッドビューの特定の列ヘッダの色(2) | NomalVB-Report10→11への移行(4) | Nomalデフォルトプリンタの用紙向き変更(0) | NomalASP.net デバッグ時の .js ファイルの変更が反映されない(1) | NomalpictureBoxとlabelの重ね合わせ(2) | NomalWindowsエクスプローラへのドロップ先フォルダの取得(4) | Nomal入力値を元に描画させたい(2) | NomalVBで開いたExcelでのイベントを取得するには(4) | NomalデザイナでSystemColorsのような色一覧から選択できるようにしたい(0) | NomalTaskの入れ子の待ち方2(4) | NomalTaskの入れ子の待ち方(5) | NomalVisualStudio2019 以降の検索ダイアログが正常に動作しない(2) | NomalUsingの使い方が間違っている?(4) | Nomal//./の意味は?(2) | Nomalバイナリーファイルの結合と分解(2) | NomalVSTOとWebView2の共存って可能?(2) | Nomal表の最後の行の下にDropできない(1) | NomalCookieの勉強を始めました。(2) | NomalDataGridViewの特定セルにボタンを配置する方法(3) | NomalDataGridViewのセル結合部分にボタンを表示する方法(3) | Nomal複数のPageに分かれる場合のスクレ―ピング(6) | NomalTask.Runの使い方(4) | NomalPictureBox のサイズを設定する(2) | NomalProcessクラスMainModuleプロパティでアクセス拒否(3) | NomalLINQでControlsをEnable=Falseに設定(3) | Nomalランダムファイルを高速化させたい(5) | Nomalプロセス間の通信(相互)(2) | NomalC#をVBに変換する方法が分かりません(1) | NomalPictureBoxに動的に画像を表示する(1) | NomalYahooのHPで、検索文字の入力ができない(3) | NomalWebView2のEncodeの問題?(5) | NomalWinFormでChromeをSeleriumで操作しているが、Closeの仕方(2) | Nomal印刷部数の固定(1) | NomalWinformでのDataGridView Comboboxのデータ追加削除が出来ない(3) | Nomalプログラムについて。(2) | Nomal拡張子関連付けのサンプルで削除時 例外発生(1) | Nomalユーザーコントロールをフォームで使用した時のエラー(6) | NomalマルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する(12) | Nomal画像の大きさを取得するには(4) | Nomalファイルがドライブ内で占有する容量(3) | NomalC#FormのXボタンイベントで、e.Cancel が使えない(2) | NomalAxWindowsMediaPlayerでプレイリストの途中から再生するには(2) | NomalWebView2でJavaScriptの実行の終了イベント(4) | NomalDataTableのDataRowVersion毎のInt型値の比較がうまくいかない(5) | NomalGPTかMBRを判断したい(2) | Nomalアセンブリ言語について。(1) | Nomalマクロについて。(3) | NomalDLL内のスレッドからイベントを発行すると、受信したフォームでラベルが更新できない(3) | Nomalアセンブリ言語について。(20) | Nomalシステムコールについて。(2) | Nomal Parallel.Forで思ったより早くならない(5) | NomalAngleSharp.Scripting.JavaScriptの使い方(2) | NomalDataAdapterで2回目のUpDateが出来ない(6) | NomalForm1イベントの選択が出来なくなりました。(9) | Nomalデザーナー時の継承先formのサイズ(0) | Nomalコンソールではなくテキストボックスに文字列を出力したい(7) | NomalAngleSharpのクエリー文2(4) | Nomalコーディングについて。(3) | Nomaldll修正時、それを参照しているexeのリビルド要否(2) | NomalAngleSharpのクエリー文(2) | Nomalデフォルトプロパティを使いたい(6) | Nomalテキストボックスでの制御(7) | NomalUSBカメラをピクチャボックスに表示(3) | Nomal二次元配列内の文字の置き換え(3) | Nomalcolor型を引数にする方法(2) | NomalVSプロジェクト作成方法の違いによる、プラグイン機能を持つアプリケーションへの影響について(6) | NomalInputボタンが押せない(4) | NomalWebBrowserのDocumentCompletedイベントの切り替え(3) | NomalEndConnectでのエラー(2) | Nomalボタンクリック時のLeaveイベントについて(1) | Nomalエクセルのデータを配列に読込んだ時の配列要素番号について(2) | Nomalorder by で抽出したデータをDataTableに入れてForEachでDataRow取得した際の順番(2) | Nomal非同期プログラミング時のConsole.WriteLineの動作(4) | NomalC#からストアドにDecimalを渡すと値が丸められる(4) | Nomalインスタンスの型を文字列で指定したい(2) | NomalSendKeys.Sendが効いていない(2) | Nomal他のプロジェクトのコントロールがツールボックスに表示されない(3) | Nomal複数のテキストボックス間のTextChangedイベントが相互干渉しないようにしたい(9) | Nomal呼び出し元によってWebApi側の処理速度に差が出る(1) | NomalPanelのDock=Topだとうまくいかない。代替案。(2) | Nomal.NetでのIPv6の比較(5) | Nomal.Net 5.0 におけるDLL参照問題?(7) | Nomal追加コントロールのtabindex値を既存の間に設定する方法(1) | NomalVB.net非同期処理でtextboxに出力したい(2) | NomalToolStripStatusLabelの空白部分を埋めたい(2) | NomalOracle への OleDb 接続に失敗する(3) | Nomal正規表現で株価を取得したい(1) | NomalVB.NETで作成したDLLをVB6.0から呼び出す(3) | Nomalデザイナで編集・チェックアウトキャンセルすると(3) | Nomal親スレッドへ処理の移譲(7) | NomalクラスによるGetBytes関数のエンディアンの違い(2) | Nomal[VB.NET]Excelのプロセスが終了しない(2) | NomalC#をVBに変換した際の強制的な参照渡し(2) | Nomal.Net 5.0 におけるServiceControllerの代替クラス(3) | Nomal新たにshowしたフォームでのボタンのクリック(5) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(4) |



■記事リスト / ▼下のスレッド
■34790 / 親記事)  AngleSharp.Scripting.JavaScriptの使い方
□投稿者/ Wan 一般人(19回)-(2021/06/26(Sat) 13:13:53)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    検索の結果、[C#]AngleSharpで、JavaScriptを含むサイトのスクリプトを解釈させるというサイトに行きつきました。
    https://akamist.com/blog/archives/1129
    
    記載されているコードをVBに変換したのが、下記のものです。
    (質問1)
    まず、エラーになる。⇐@のように、'AngleSharp.Parser.Html.HtmlParser' は定義されていません。がでます。
    (質問2)
    ⇐Aのように.Parser.Htmlを.Html.Parserと書き換えると'IConfiguration' の値を 'HtmlParserOptions' に変換できません。とエラーの内容が変わります。
    
    AngleSharp.Scripting.JavaScript使用の第一段階として、どのように加工すれば使えるのでしょうか?
    詳しいか宜しくお願い致します。
    
    
    
    
    
    Imports AngleSharp
    Imports AngleSharp.Dom.Html
    Imports AngleSharp.Extensions
    Imports AngleSharp.Html.Dom
    Imports AngleSharp.Scripting
    Public Class Form1
    
        Public Sub parseAngleSharp_Javascript()
            Dim config = Configuration.[Default].WithJavaScript()
            Dim parser = New AngleSharp.Parser.Html.HtmlParser(config) ⇐@
            Dim parser2 = New AngleSharp.Html.Parser.HtmlParser(config) ⇐A
            Dim source = "
    <html>
        <head>
            <script>
            document.write('<span>Hello World</span>');
            </script>
        </head>
        <body>
        </body>
    </html>"
            Dim document = parser.Parse(source)
            Console.WriteLine(document.ToHtml())
        End Sub
    End Class

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34791 / ResNo.1)  Re[1]: AngleSharp.Scripting.JavaScriptの使い方
□投稿者/ 魔界の仮面弁士 大御所(1356回)-(2021/06/26(Sat) 13:53:54)
  • アイコンNo34790に返信(Wanさんの記事)
    > 記載されているコードをVBに変換したのが、下記のものです。

    ※提示頂いたソースはまだ読んでいないのですが:

    AngleSharp および AngleSharp.Scripting について、
    それぞれどのバージョンを利用されていますか?
    これらのライブラリが持つ API には、バージョンアップ時に
    互換性の無い仕様変更が含まれていることがあります。

    Web の記事を参考にする場合は、その記事が使っていたものと
    同系統のバージョンで揃えるようにしてみてください。


    たとえば AngleSharp の場合、安定版バージョンとして
    2021/06/12 リリースの 0.16.0
    2021/04/22 リリースの 0.15.0
    2020/03/31 リリースの 0.14.0
    2019/09/06 リリースの 0.13.0
    2019/05/14 リリースの 0.12.1
    (中略)
    2018/11/22 リリースの 0.9.9.11
    2016/10/07 リリースの 0.9.9
    などがあります。

    一方 AngleSharp.Scripting.JavaScript については、
    2017/05/07 リリースの 0.5.1 で更新が止まっており、これは
    AngleSharp 0.9.9 に依存した古い設計のライブラリです。


    そして AngleSharp 0.9.9 と AngleSharp 0.16.0 の使い方は大きく異なります。
    バージョンの組み合わせで不整合があると、
    ライブラリが動作しなくなりますのでご注意ください。


    なお、現在でも更新が続いているスクリプトエンジンは
    AngleSharp.Js の方です。バージョン遷移は下記の通り。
    2021/06/13 リリースの 0.15.0 (AngleSharp 0.14.0)
    2020/04/01 リリースの 0.14.0 (AngleSharp 0.14.0)
    2020/04/01 リリースの 0.13.0 (AngleSharp 0.13.0)
    2019/05/14 リリースの 0.12.1 (AngleSharp 0.12.1)

    https://anglesharp.github.io/projects/Overview
違反を報告
引用返信
■34795 / ResNo.2)  Re[2]: AngleSharp.Scripting.JavaScriptの使い方
□投稿者/ Wan 一般人(22回)-(2021/06/26(Sat) 17:26:26)
  • アイコンAngleSharpは、0.16.0を、AngleSharp.Scripting.JavaScriptは、0.5.1をインストールしています。AngleSharp.Scripting.JavaScriptに依存関係の欄に、AngleSharp(>=0.9.9)とあったので、0.16.0は問題ないと思っていました。が、ご指摘のように、更新が2017年から行われていないので、おかしいな?って思っていました。
    AngleSharp.Jsの存在を知りませんでしたので、そちらに、変更します。
    また、壁にぶち当たった時には、助けてください。
    有難う御座いました。

解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34789 / 親記事)  DataAdapterで2回目のUpDateが出来ない
□投稿者/ Wan 一般人(18回)-(2021/06/26(Sat) 12:22:42)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    次のようなコードで、DataAdapterを使いまわして二つのTabelを更新しようとしています。既存のデータは一旦全て削除して、ListデータをDataTabelに変換(拡張メソッドを作成しています:ToDataTable)してMargeして更新しようとしています。
    1回目(Dt説明)は上手くいくのですが、2回目のUpDateの時に、'SourceColumn '説明' の DataColumn  '説明' が見つかりません。'と怒られます。
    上手く使いまわす方法を教えてください。
    宜しくお願い致します。
    
    
         Dim MyDir As String = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
            Dim Dir既存DB As String = MyDir.Substring(0, 1) & ":\DataBaseTestFolder/"
            Dim ConStr As String = "Provider = Microsoft.ACE.OLEDB.12.0;" &
                               "Data Source=" & Dir既存DB &
                               "株データベース.accdb"
            Dim Dt説明 As New DataTable
            Dim Dt銘柄 As New DataTable
    
            Dim Sql説明Select As String = "Select * From 説明Dt"
            Dim Sql銘柄Select As String = "Select * From 銘柄Dt"
            Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(ConStr)
            Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(Sql説明Select, conn)
            Dim Da As New OleDb.OleDbDataAdapter
            Dim ComBuilder As New OleDb.OleDbCommandBuilder(Da)
    
            Da.SelectCommand = cmd
            Da.Fill(Dt説明)
            Da.InsertCommand = ComBuilder.GetInsertCommand
            Da.DeleteCommand = ComBuilder.GetDeleteCommand
            For Each LopDtRow As DataRow In Dt説明.Rows
                LopDtRow.Delete()
            Next
            Dt説明.Merge(List説明.ToDataTable)
            Da.Update(Dt説明)
    
            conn = New OleDb.OleDbConnection(ConStr)
            cmd = New OleDb.OleDbCommand(Sql銘柄Select, conn)
            Da.SelectCommand = cmd
            Da.Fill(Dt銘柄)
            Da.InsertCommand = ComBuilder.GetInsertCommand
            Da.DeleteCommand = ComBuilder.GetDeleteCommand
            For Each LopDtRow As DataRow In Dt銘柄.Rows
                LopDtRow.Delete()
            Next
            Dt銘柄.Merge(List銘柄.ToDataTable)
            Da.Update(Dt銘柄)

違反を報告
引用返信

▽[全レス6件(ResNo.2-6 表示)]
■34793 / ResNo.2)  Re[2]: DataAdapterで2回目のUpDateが出来ない
□投稿者/ Wan 一般人(20回)-(2021/06/26(Sat) 17:17:37)
  • アイコン
    早速のご指導有難う御座います。
    基本中の基本だと思いますが、私のために時間を割いて頂ければと・・
    
    >1 つ目の接続を Close / Dispose することなく、
    >新たに 2 つ目の接続を開いているのは何故ですか?
    DataAtapterは、Fill、UpDateをすると自動でOpen、Closeを行うので必要ないと思っています。
    
    >トランザクションを明示した上で、DELETE クエリを投げるのでは駄目なのでしょうか。
    Da.DeleteCommand = New OledDb.OleCommand(“Dalete From 説明Dt”)
    Da.Fill(Dt説明)
    という記述で、Deleteクエリを投げたつもり(コードがここまで進んだ段階で、Accessの出たーを見ると消えていない)ですが、上手くいきませんでした。
    
    >WHERE の無い SELECT で全データを取得し、その内容を読むことも無く
    >ループ処理で取得したデータに削除マークを付けていってから、
    >一件一件 DELETE クエリを投げつけるという現状の実装は、無駄が多すぎるかと。
    上記の方法で、上手くいかなかったので、説明Dt.Clearとしたのですが、上手くいかず、ググるとループで削除マークを付ける必要があるとのことなので、読み込んだものを一切触らず、削除後、Margeしています。ただ、この次のステップで、キーが重複しているものを削除するつもりなので、一旦読み込むことは、アリ?(クエリで処理すべき?)かな?って考えています。
    
    >ComBuilder.GetInsertCommand().CommandText を確認すると分かるかと思いますが、
    >1 回目の `説明` なクエリ情報が残っているからです。
    これは、想像していましたが、対処方法がわからないので質問したことになります。
    
    >今回の場合、`説明` を終えた時点で、Da や ComBuilder を使いまわしているので、
    > Da Is ComBuilder.DataAdapter
    > Da.SelectCommand Is ComBuilder.DataAdapter.SelectCommand
    > Da.InsertCommand Is ComBuilder.DataAdapter.InsertCommand
    > Da.DeleteCommand Is ComBuilder.DataAdapter.DeleteCommand
    > Da.UpdateCommand Is ComBuilder.DataAdapter.UpdateCommand
    >が、いずれかも True な状態であることは分かるかと思いますが、
    Trueの状態をいう概念を私が理解できていないのはさておき、ComBuilderは、Daと関連付けて生成しているので、DaのSelect文のみ更新すれば、GetInsertCommandメソッドを呼べば、更新後のSelect文に対応するInsert文が取得できると考えていました。UpData文に関しては、生成していないし、使用(Rowの内容を触らない)しないので問題外と考えていました。Insert文とDelete文は、Getメソッドで上書きしているので問題ないと考えていました。
    
    >同一 Adapter に対しては、以前作成した時のコマンドをキャッシュする設計になってい>ます。
    >この動作は OleDb に限らず、他の ADO.NET プロバイダーでも同様です。
    これは、エラーの内容から想像できました。
    
    >cmd や conn は使いまわさずに毎回 New しなおしているのに、
    >Da や ComBuilder だけ使いまわしている点に非対称性を感じますが、
    >意図的にそのような実装にしているのでしょうか。
    全てをNewするのは、無駄なので、出来る限り使いまわそうとしたのですが、上手くいかないので、これは使いまわせないのかな?って考え少しずつNewを増やした結果です。根本的に理解していない私です。connをNewしているのは、ComをNewしても上手くいかなかったので、connもNewしないとだめなのかな?って思い追加。
    
    >アダプター類を再生成するかどうかは好みの問題とはいえ、
    >今回のケースなら conn の方を使いまわすべきに思えました。
    勉強させて頂きます。アダプタ類をNewした方が、余計な処理が省けるということですね?
    接続先が一緒なので、Connは使いまわす。
    
    >案1) そもそも CommandBuilder を使いまわさず、再生成する。
    > ※どうせ SelectCommand/InsertCommand/DeleteCommand/UpdateCommand 総入れ替えなので。
    そのように致します。
    
    >案2) コマンドを作り直す前に、ComBuilder.RefreshSchema() を呼び出しておく。
    > ※これは以前のコマンドを削除するメソッドです。
    これも試してみますが、案1の方が、直観的なような気がしますので、近い将来、自分でコードを見た時に、何してんだ?とならないように・・・
    
    >案3) DataAdapter のみを再生する。すなわち、
    > 「Da.SelectCommand = cmd」の代わりに
    > 『ComBuilder.DataAdapter = New OleDb.OleDbDataAdapter(cmd)』とする。
    > ※ DataAdapter プロパティを差し替えた場合、自動的に RefreshSchema が呼ばれる
    >仕様です。
    なるほど・・です。が、同じく、案1でコードは残し、コメントで、案2、案3を列記しておきます。将来スキルが、上がった時(が来るかどうかは別として)に役に立つように・・
    
    丁寧なご指導有難う御座いました。
    大変助かっています。
    

違反を報告
引用返信
■34794 / ResNo.3)  Re[3]: DataAdapterで2回目のUpDateが出来ない
□投稿者/ Wan 一般人(21回)-(2021/06/26(Sat) 17:19:06)
  • アイコン
    解決しました

解決み!
違反を報告
引用返信
■34796 / ResNo.4)  Re[3]: DataAdapterで2回目のUpDateが出来ない
□投稿者/ 魔界の仮面弁士 大御所(1358回)-(2021/06/26(Sat) 20:49:34)
  • アイコンUpdate を UpDate や UpData と書いているのがちょっと気になる…。


    No34793に返信(Wanさんの記事)
    >> 1 つ目の接続を Close / Dispose することなく、
    >> 新たに 2 つ目の接続を開いているのは何故ですか?
    > DataAtapterは、Fill、UpDateをすると自動でOpen、Closeを行うので必要ないと思っています。

    その自動開閉によって、現状、Open/Close が 4 回繰り返されることになりますよね。

    Da.Fill(Dt説明)  'conn1.Open → SELECT * FROM `説明` → conn1.Close
    Da.Update(Dt説明) 'conn1.Open → DELETE & UPDATE `説明` → conn1.Close
    Da.Fill(Dt銘柄)  'conn2.Open → SELECT * FROM `銘柄` → conn2.Close
    Da.Update(Dt銘柄) 'conn2.Open → DELETE & UPDATE `銘柄` → conn2.Close


    DataAdaper を一回しか使わないケースなら自動開閉任せでも良いのですが、複数回呼び出す場合は
    DataAdapter の操作前に Open し、処理が終わった後に Close させた方が望ましいです。
    たとえば下記の実験例だと、100 回の DataAdapter.Fill で、50 倍の速度差になっています。
    http://okwakatta.net/code/ado12.html

    今回のケースだとこんなイメージかな。
     Using conn As New OleDb.OleDbConnection(ConStr)
      conn.Open()
       :
      Da.Fill(Dt説明)
       :
      Da.Update(Dt説明)
       :
      Da.Fill(Dt銘柄)
       :
      Da.Update(Dt銘柄)
       :
      conn.Close()
     End Using


    実際には、OleDbTransaction クラスも併用して
    トランザクション処理を組み入れる必要がありますね。
    (OleDbConnection の接続先が *.mdb や *.accdb の場合は、特に重要です)


    >> トランザクションを明示した上で、DELETE クエリを投げるのでは駄目なのでしょうか。
    > Da.DeleteCommand = New OledDb.OleCommand(“Dalete From 説明Dt”)
    (OleCommand というのはスペルミスとして…)

    > Da.Fill(Dt説明)
    DataAdapter の『Fill メソッド』は、レコードを DataTable に取り込む目的にしか使えないのです。

    INSERT / DELETE / UPDATE 等を呼ぶ場合は、OleDbCommand の
    『ExecuteNonQuery メソッド』を使ってみてください。
    このメソッドの戻り値は、処理件数を示す Integer 値です。

    OleDbCommand にはこのほか、SELECT を呼ぶ場合に使われる
    『ExecuteScalar メソッド』… 1 行 1 列な単一データを取得する際に使う
    『ExecuteReader メソッド』… レコードCSV出力するなど、行単位の処理で済む場合
    などが用意されています。併せて習得しておきましょう。

    データを SELECT するには、DataAdapter の『Fill メソッド』でも良いのですが、
    たとえば大量のレコードを持つテーブルの内容を CSV ファイルに保存するような処理の場合、
    Da.Fill だと全レコードをすべて DataTable に取り込んでから CSV 化するため、メモリ負荷が大きくなります。
    それを cmd.ExecuteReader で得た OleDbDataReader をループ処理する方法に変更すれば、
    現在行のための 1 行分のメモリしか消費せずに済むため、パフォーマンスが向上します。


    > 読み込んだものを一切触らず、削除後、Margeしています。
    × Marge
    ○ Merge


    > ググるとループで削除マークを付ける必要があるとのことなので、
    ToDataTable の実装がどのようになっているか分かりませんが、
    生成された ToDataTable で得られる各行(DataRow) の RowState プロパティの
    状態によって、Merge 結果が変わってくるかと思います。


    > キーが重複しているものを削除するつもりなので、
    ん? データベースがは全件削除するのですよね。
    キー重複というのは ToDataTable のことでしょうか。

    元が List というなら、DataTable 側でどうこうするより、
    List 側を LINQ した方が手っ取り早いかもしれません。

    DataTable 側で処理するなら、PrimaryKey をセットしておけば、
    親 DataSet の EnforceConstraints プロパティによる検査で
    DataTable.GetErrors メソッドからエラー行を取得することも一応できます。


    >> Da Is ComBuilder.DataAdapter
    >> が、いずれかも True な状態であることは分かるかと思いますが、
    > Trueの状態をいう概念を私が理解できていないのはさておき、
    Is の両辺が同一のオブジェクト インスタンスであるということです。
    「If Da Is ComBuilder.DataAdapter Then」が真である状態。

    たとえば、SQL 文を下記のように書き換えた場合、
     Da.SelectCommand.CommandText = SQL
    これによって
     If ComBuilder.DataAdapter.SelectCommand.CommandText = SQL Then
    も True になります。DataAdapter が同一なので。


    > 全てをNewするのは、無駄なので、出来る限り使いまわそうとしたのですが、
    それは物によります。Connection や Command などはデータベースと直接やりとりする部分なので、
    同一内容であれば使いまわす方が良いでしょう。異なる内容ならその都度生成しても問題ありません。

    DataSet/DataTable などは、特定のデータベースと直接通信するものでないので、
    繰り返し回数がそれほど多くないなら、毎回 New しようと、使いまわそうと大差無いです。

    しかし、繰り返し処理の回数が多いプログラムや、長い日数動き続けるプログラムの場合は別。

    たとえば、table.Rows.Clear() してから、.Rows.Add あるいは DataAdapter.Fill する処理を
    繰り返していくと、Rows.Add の処理時間が目に見えて遅くなってしまう事例があるのですが、
    新しい DataTable を New しなおしてから行追加すると、この問題を回避できます。

    …といっても下記のような問題もあったりするので、どちらにせよ長時間の稼働には向かないのですが。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=81781&KLOG=140


    > アダプタ類をNewした方が、余計な処理が省けるということですね?
    そうですね。とはいえ好みの問題などもあるので、使いやすい方法を選んでみてください。
解決み!
違反を報告
引用返信
■34798 / ResNo.5)  Re[4]: DataAdapterで2回目のUpDateが出来ない
□投稿者/ Wan 一般人(24回)-(2021/06/28(Mon) 17:35:18)
  • アイコン誤字、脱字は大変申し訳ございません。
    インテリセンスに頼りすぎとボキャブラリーが余りにも少なく反省です。

    DataAdapterで、Open/Closeの件は、知識としては、知っていましたが、余り重要視していませんでした。そんなに、違いが出てくるのですね?

    トランザクションは、価値を全く理解していません。なぜ?Accessならなおさらなのか?言われても、価値が・・・

    ExecuteNonQuery メソッドは、Netからデータを取得して、単純にDataBaseに追加するだけの時は、常時接続で使っていました。が、今回は、既存のデータベースを全削除して、と思ったので、DataAdapterを使おうと考え、既存のテーブルを全削除するのに、常時接続との混在はスマートではないので、DataAdapterで、全削除しようと思い。Loopにたどり着いたのが、実情です。結果。ぐちゃぐちゃなった。

    全データをメモリに読み込んでいては、データベースを使っている意味が無いですね?反省。

    LINQも、仮面さんにここで教えて貰ったので、ちょこちょこかじっている状態です。根本的に理解しないで、ググったコードをちょこっと改造して使ってやれって気持ちが、だめなんですね?

    反省しています。




解決み!
違反を報告
引用返信
■34800 / ResNo.6)  Re[5]: DataAdapterで2回目のUpDateが出来ない
□投稿者/ 魔界の仮面弁士 大御所(1359回)-(2021/06/28(Mon) 19:09:08)
  • アイコンNo34798に返信(Wanさんの記事)
    > トランザクションは、価値を全く理解していません。なぜ?Accessならなおさらなのか?言われても、価値が・・・

    SQL Server や Oracle などのデータベースとは異なり、
    Access の *.accdb / *.mdb は「ファイル共有型データベース」です。

    そのため、ファイルのロックはサーバー上で画一的に行われるのではなく、
    それぞれのアプリケーション上で個別に実施されます。
    そのため、排他制御において幾許かの制限があるのです。

    その一つが、『更新結果が即座に反映されない』というものです。

    既定で「遅延(非同期)書込み」が行われるようになっていることから、
    マルチユーザー環境においては、最大で 0.5 秒の間、追加したレコードが、
    他のユーザーの接続からは認識されないという問題が生じます。

    しかし、トランザクションを明示的に切れば「同期書き込み」となり、
    コミットした時点で、直ちにデータを反映させることができます。
    詳細は下記をご覧ください。
    2001年当時の古い資料であり、.NET 向けに書かれた物でもありませんが、
    非同期書き込みという点については、ほぼそのまま当てはまります。

    [Jet Engineのキャッシュとその制御]
    http://www.canalian.com/workshop/access/JetCache.html

    この仕様があるがゆえに、JET Provider や ACE Provider においては、
    たとえデータ更新の SQL を一つ投げるだけであったとしても、
    明示的にコミットするのが無難である、ということです。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34781 / 親記事)  Form1イベントの選択が出来なくなりました。
□投稿者/ もう夏かも 一般人(1回)-(2021/06/24(Thu) 19:12:58)
  • アイコン環境/言語:[Win10 VisualStudio Community 2019] 
    分類:[.NET] 

     お世話になります。

    説明が下手なので、画像を添付しますが
    それでも、うまく説明できないように思います。

    気が向いた時にしかプログラムを書かないので
    いつから選択できなくなったかは、分かりません。

    以前はFormイベントを選択するとイベントの一覧が出て
    それを選択していたのですが、全くできなくなりました。

    これは、僕だけの現象なのかもしれませんが
    解決策がありましたら教えていただきたいのですが。

    よろしくお願いします。

140×133
イメージ
2021-06-24.png
/14KB
違反を報告
引用返信

▽[全レス9件(ResNo.5-9 表示)]
■34786 / ResNo.5)  Re[3]: Form1イベントの選択が出来なくなりました。
□投稿者/ 魔界の仮面弁士 大御所(1355回)-(2021/06/25(Fri) 10:51:25)
  • アイコンNo34784に返信(もう夏かもさんの記事)
    > 検索しても情報を見つけることが出来なかったので
    > もしかして、僕だけの現象かもと思ってました。

    本家の方で、何度かフィードバックが挙がっています。
    https://developercommunity.visualstudio.com/t/*/1432877
    https://developercommunity.visualstudio.com/t/*/1456896

    現行の v16.10.2 でも改善されておらず、この一ヶ月大変でしたが、
    次版の v16.10.3 (と v16.11 Preview 3.0) にて解消されるようです。

    VS2022 は当方未検証。
    https://visualstudio.microsoft.com/ja/vs/preview/vs2022/
解決み!
違反を報告
引用返信
■34787 / ResNo.6)  Re[4]: Form1イベントの選択が出来なくなりました。
□投稿者/ もう夏かも 一般人(4回)-(2021/06/25(Fri) 17:37:27)
  • アイコンNo34786に返信(魔界の仮面弁士さんの記事)

     追加情報ありがとうございます。
    「16.9.6」をセットアップしたら問題は、解消されました。
     (サブ PC )

    ただ、当方の問題でメインで使いたいパソコンでは
    「使用期間終了のため起動できません。」とのことです。
     (Enterpise版での出来事です。)

    ちなみに、VisualStudio2022をセットアップしたのですが
    残念ながら、「Formイベント」が選択できませんでした。

    趣味でVisualBasicを使っているので問題はないので
    ”VisualBasic Community”が改善されるのを
    待ちたいと思います。

    この度は、ありがとうございました。

違反を報告
引用返信
■34788 / ResNo.7)  Re[5]: Form1イベントの選択が出来なくなりました。
□投稿者/ もう夏かも 一般人(5回)-(2021/06/26(Sat) 07:47:12)
  • アイコン解決済み、忘れていました。

解決み!
違反を報告
引用返信
■34813 / ResNo.8)  Re[5]: Form1イベントの選択が出来なくなりました。
□投稿者/ 魔界の仮面弁士 大御所(1365回)-(2021/07/01(Thu) 12:03:36)
  • アイコンNo34787に返信(もう夏かもさんの記事)
    > 趣味でVisualBasicを使っているので問題はないので
    > ”VisualBasic Community”が改善されるのを
    > 待ちたいと思います。

    2021/06/29 リリースの VS2019 v16.10.3 にて解消されました。

    https://developercommunity.visualstudio.com/t/*/1432877
    https://docs.microsoft.com/ja-jp/visualstudio/releases/2019/release-notes#16.10.3
解決み!
違反を報告
引用返信
■34815 / ResNo.9)  Re[6]: Form1イベントの選択が出来なくなりました。
□投稿者/ もう夏かも 一般人(6回)-(2021/07/01(Thu) 15:24:26)
  • アイコン ご案内により、VisualStudio Community2019の
    最新版をインストールしました。

    問題部分が解消されていて、気持ちよく使えそうです。
    製品登録も問題なくできています。

    今回は問題解決まで案内いただき、ありがとうございます。
    今後もよろしくお願いします。

解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34780 / 親記事)  デザーナー時の継承先formのサイズ
□投稿者/ 殿下 一般人(1回)-(2021/06/23(Wed) 15:29:58)
  • アイコン環境/言語:[Windows7 Visual Studio 2017 Framework4.7.2 VB.NET] 
    分類:[.NET] 

    2021/06/23(Wed) 15:54:30 編集(投稿者)
    2021/06/23(Wed) 15:53:42 編集(投稿者)

    Formを継承で作成しました。
    継承先のFormのサイズを変更し保存後、デザイナーを閉じて再度開くと、
    継承元のFromサイズに戻っていました。

    デザイナー上では継承元のFormサイズに見えています。
    プロパティウィンドウのSizeも継承元のサイズです。
    但し、実行すると、変更したSize相当のSizeで表示されます。
    Designerファイルを見てみると、ClientSizeに変更した相当のサイズが
    設定されています。
    > Me.ClientSize = New System.Drawing.Size(802, 452)

    デザイナー上でも設定したFormサイズで表示したい。
    (デザインの変更等の作業を随時行いたい為、サイズを目視したい)

    可能なものでしょうか?
    可能であれば、ご存じであればその方法、又は、アドバイスを頂きたく。
    お願い致します。


    <以下のどちらとも同じ現象です>
    (1)「新しい項目」から「継承されたフォーム」にて作成
    (2) クラス宣言にInheritsを追加して手動で継承

違反を報告
引用返信



■記事リスト / ▲上のスレッド
■34768 / 親記事)  コンソールではなくテキストボックスに文字列を出力したい
□投稿者/ スイカ 一般人(1回)-(2021/06/09(Wed) 13:29:44)
  • アイコン環境/言語:[Windows 10 Pro 64bit/Visual Studio 2019/VB.NET/.NET Framework 4.7.2] 
    分類:[.NET] 

    下記のサンプルで文字列の出力をコンソールではなくて、
    テキストボックスにしたいと思い変更してみましたが、
    テキストボックスには何も表示されずにフォームも移動すらできなくなります。

    免罪符で恐縮ですが、プログラミングを始めてまもなくGoogle検索して調べているのですが、
    お手上げ状態になってしまい質問させていただきました。

    どうかよろしくお願いします。

    【■変更前】
    > Private Shared Sub p_OutputDataReceived(sender As Object, _
    > e As System.Diagnostics.DataReceivedEventArgs)
    > '出力された文字列を表示する
    > Console.WriteLine(e.Data)
    > End Sub

    【■変更後】
    > Private Shared Sub p_OutputDataReceived(sender As Object, _
    > e As System.Diagnostics.DataReceivedEventArgs)
    > '出力された文字列を表示する
    > 'Console.WriteLine(e.Data)
    > '下だとエラー
    > 'TextBox1.Text = e.Data
    > '検索して下記のようにするといいと見つけましたがフォームの移動すらできなくなる
    > Me.Invoke(Sub() Me.TextBox1.Text = e.Data)
    > End Sub

    【■サンプル】
    -DOSコマンドを実行し出力データを取得する
    --出力とエラーの両方を読み取る
    https://dobon.net/vb/dotnet/process/standardoutput.html

    【■サンプル内で実行しているコマンド】
    PINGコマンドのため、結果は1行ずつわずかに時間をおいて返ってきます。
    訂正前:p.StartInfo.Arguments = "/c dir c:\ /w"
     ↓
    訂正後:p.StartInfo.Arguments = "/c ping 192.168.0.1"

    【■環境】
    ・Windows 10 Pro 64bit
    ・Visual Studio 2019
    ・VB.NET
    ・Windows フォーム アプリケーション(.NET Framework)
    ・.NET Framework 4.7.2
違反を報告
引用返信

▽[全レス7件(ResNo.3-7 表示)]
■34773 / ResNo.3)  Re[3]: コンソールではなくテキストボックスに文字列を出力したい
□投稿者/ 魔界の仮面弁士 大御所(1351回)-(2021/06/09(Wed) 14:17:04)
  • アイコンNo34772に返信(スイカさんの記事)
    > 何やらすごい難しそうな処理を追加しないといけないんですね。
    多少煩雑なのは、エラー出力と標準出力を分けて表現しているのが一因。

    No34645 のサンプルで言えば、
     TextBox1.Text = Environment.GetEnvironmentVariable("ComSpec")
     TextBox2.Text = "/c ping 192.168.0.1"
    にした状態で Button1 を押せば、
    結果が黒背景の RichTextBox1 に表示されます。

    通常応答は白文字、エラー応答は赤背景に黄色文字。


    しかし、目的が PING だけなのであれば、
    Ping クラスを使った方が手っ取り早いですよ。

    Using P As New System.Net.NetworkInformation.Ping()
     Dim r = P.Send("www.yahoo.co.jp")
     If r.Status = System.Net.NetworkInformation.IPStatus.Success Then
      TextBox1.Text = $"Reply from {r.Address}:bytes={r.Buffer.Length} time={r.RoundtripTime}ms TTL={r.Options.Ttl}"
     Else
      TextBox1.Text = "失敗: " & r.Status
     End If
    End Using
    https://dobon.net/vb/dotnet/internet/ping.html
違反を報告
引用返信
■34774 / ResNo.4)  Re[4]: コンソールではなくテキストボックスに文字列を出力したい
□投稿者/ スイカ 一般人(3回)-(2021/06/09(Wed) 14:40:24)
  • アイコンNo34773に返信(魔界の仮面弁士さんの記事)
    > ■No34772に返信(スイカさんの記事)
    >>何やらすごい難しそうな処理を追加しないといけないんですね。
    > 多少煩雑なのは、エラー出力と標準出力を分けて表現しているのが一因。
    >
    > No34645 のサンプルで言えば、
    >  TextBox1.Text = Environment.GetEnvironmentVariable("ComSpec")
    >  TextBox2.Text = "/c ping 192.168.0.1"
    > にした状態で Button1 を押せば、
    > 結果が黒背景の RichTextBox1 に表示されます。
    >
    > 通常応答は白文字、エラー応答は赤背景に黄色文字。
    >
    >
    > しかし、目的が PING だけなのであれば、
    > Ping クラスを使った方が手っ取り早いですよ。
    >
    > Using P As New System.Net.NetworkInformation.Ping()
    >  Dim r = P.Send("www.yahoo.co.jp")
    >  If r.Status = System.Net.NetworkInformation.IPStatus.Success Then
    >   TextBox1.Text = $"Reply from {r.Address}:bytes={r.Buffer.Length} time={r.RoundtripTime}ms TTL={r.Options.Ttl}"
    >  Else
    >   TextBox1.Text = "失敗: " & r.Status
    >  End If
    > End Using
    > https://dobon.net/vb/dotnet/internet/ping.html
    度々ありがとうございます。
    Pingクラスというのもあるんですね。勉強になります。
    よく読んでみます。

    あとPING以外にもテキストボックスに入力したコマンドを実行できるようにしたいなと思っていて、
    最初はDIRコマンドのように1度に結果が返ってくるもので試したのでよかったのですが、
    次にPINGコマンドで試してみたところ随時結果が表示されるものだったので、
    それをテキストボックスに表示させる方法が分かりませんでした。
違反を報告
引用返信
■34777 / ResNo.5)  Re[4]: コンソールではなくテキストボックスに文字列を出力したい
□投稿者/ スイカ 一般人(4回)-(2021/06/20(Sun) 15:49:08)
  • アイコンNo34773に返信(魔界の仮面弁士さんの記事)
    あれから色々調べて見たのですが、どうしても理解できずに解決できませんでしたので、
    再度質問させていただきました。
    よろしくお願いします。


    【質問】
     下記のコードでエラーが出ないようにするには、実際にどういうコードを追加すればいいのでしょうか?


    【状況】
     ・VisualStudioから「開始」を押して実行して下記のコードで「Button1」をクリックした時に、
      「Private Sub P_OutputDataReceived(」内で添付写真のエラーが出ます。
     ・ビルドして出来たexeを実行して「Button1」をクリックした時はエラーは出ず正常に完了します。


    【コード】
    '■1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Call Main(TxtCommand.Text) 'TxtCommand.Textは「ping 192.168.1.1」が入力されています
    End Sub

    '■2
    Private Sub Main(strcmd As String)
    Dim p As New System.Diagnostics.Process()

    p.StartInfo.UseShellExecute = False
    p.StartInfo.RedirectStandardOutput = True
    p.StartInfo.RedirectStandardError = True

    AddHandler p.OutputDataReceived, AddressOf P_OutputDataReceived
    AddHandler p.ErrorDataReceived, AddressOf P_ErrorDataReceived

    p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
    p.StartInfo.RedirectStandardInput = False
    p.StartInfo.CreateNoWindow = True
    p.StartInfo.Arguments = "/c " & strcmd

    p.Start()

    p.BeginOutputReadLine()
    p.BeginErrorReadLine()

    p.WaitForExit()
    p.Close()
    End Sub

    '■3
    Private Sub P_OutputDataReceived(sender As Object, e As System.Diagnostics.DataReceivedEventArgs)
    If e.Data <> "" Then
    Me.TxtResult.AppendText(e.Data) '◆ここが赤いバツになって添付写真のエラーが出ます
    Me.TxtResult.AppendText(vbCrLf)
    End If
    End Sub

    '■4
    Private Sub P_ErrorDataReceived(sender As Object, e As System.Diagnostics.DataReceivedEventArgs)
    If e.Data <> "" Then
    Me.TxtResult.AppendText(e.Data)
    Me.TxtResult.AppendText(vbCrLf)
    End If
    End Sub


    【コード補足】
     TxtCommand.Textは実行するコマンド(例えばping 192.168.1.1など)が入力されています。
     TxtResult.Textは実行したコマンドの結果を表示するテキストボックスです。

違反を報告
引用返信
■34778 / ResNo.6)  Re[5]: コンソールではなくテキストボックスに文字列を出力したい
□投稿者/ スイカ 一般人(5回)-(2021/06/20(Sun) 15:51:46)
  • アイコン添付写真です。
824×236 => 250×71
イメージ
Error.jpg
/17KB
違反を報告
引用返信
■34779 / ResNo.7)  Re[2]: コンソールではなくテキストボックスに文字列を出力したい
□投稿者/ スイカ 一般人(6回)-(2021/06/20(Sun) 16:21:29)
  • アイコンNo34771に返信(魔界の仮面弁士さんの記事)
    > ■No34768に返信(スイカさんの記事)
    >>下記のサンプルで文字列の出力をコンソールではなくて、
    >>テキストボックスにしたいと思い変更してみましたが、
    >
    > No34644 - No34645 あたりでどうでしょう。
    > https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=all&namber=34642
    >

    https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=red&namber=34645&no=0
    こちらのサンプルは無事に動かせました。
    どうもありがとうございます。

    度々質問ですみません。
    このサンプルで「PING 192.168.1.1 -t」とした場合に、
    ボタンで強制的に止めるにはどういったコードが必要になりますでしょうか?
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -