VB.NET Tip集

2021.02.28

Top Page

このブログは、アコーディオンの練習日記とVB.NET+SQL Serverを使用したプログラミングの覚書となっています。
そこで、このトップページをメニュー画面として下記のどちらかをクリックすれば、どちらかのカテゴリだけを表示させることができます。
アコーディオンの練習日記 Myacco2 VB.NET Tip集 SQL Server Windows Server ※Midiデータの検索で来られた皆様へ。このブログでヒットしたMidiデータは、
  私のホームページにありますので、そちらをご覧下さい。

【お知らせ】

 

| | トラックバック (0)

2016.10.19

【VB.NET】 WebページのURLのクエリ文字列全体を取得する方法

例:http://localhost/webapp/url/WebForm1?p=abcdefghijklmn
  のURLの?以下の値を取得する。

?以下の文字列全体 = Request.Url.Query.Replace("?", "")

①:サンプルプログラムのWebFormイメージ
②:テスト用VB.NETソースプログラム
③:実行結果
2016101901

参考にした記事
https://www.ipentec.com/document/document.aspx?page=csharp-asp-net-get-request-url

| | コメント (0) | トラックバック (0)

2009.07.08

現在使用(記録)中のIISログを読む

自宅サーバでは外部公開用のWebページがありますが、
Webページのログファイル(IISログ)を解析して、どのような
語句で検索して私のWebページにたどり着いたかを調べる
プログラムをVB.NETで作成しています。

実は、ファイル共有のアクセス権についての知識が無かったため、
Closeされている昨日以前のログファイルしか検索できていません
でした。
当日分を検索するときは、ログファイルをメモ帳で開き、別名称で
保存しそのファイルを解析というようなことをしていました。

最近やっとファイル共有モードでOpen Inputする方法がわかりまし
たので掲載します。
これで、現在までのIISログファイルの中で、どのような検索語句が
使われているか分かるようになりました。

(コーディング例)

    Dim fileNameI As String
    fileNameI = "Input ファイル名称"
    Dim fileNoI As Integer
    ' Get fileNo
    fileNoI = FreeFile()
    FileOpen(fileNoI, fileNameI, OpenMode.Input) (このモードでは使用中のファイルをOpenできない)
        ↓
    FileOpen(fileNoI, fileNameI, OpenMode.Input, OpenAccess.Read, OpenShare.Shared)
    (使用中のファイルでもOpenし、Readすることができる)

| | コメント (0) | トラックバック (0)

2009.06.02

Crystalreports(VS2008)の配布について

1.以前は
Windows Server 2003 + SQL Server 2000 + VS.NET2003 で構成されたシステムで帳票の印刷はCrystal Reportsを使用していました。(VB.NET2003使用)
Crystal Reportsで作成されたプログラムは配布を簡単にするためCrystal Reportsのランタイムだけを先にクライアントPCにインストールしておき、出来上がったexeとrptは単にクライアントPCにコピーするという運用をしていました。
(下記記事参照)
http://kanakana.txt-nifty.com/tips/2006/06/crystal_reports_2d18.html

2.マシン・OS等代替後
5年間使用したマシンがリース切れで代替を行ったので、Windows Server 2008 + SQL Server 2008 + VS2008 という構成に変更となりましたがCrystal Reportsで作成されたプログラムを配布する方法が分からなかったため、またメンテナンスもなかったので、VB.NET2003 時代のプログラム(exe)をそのまま使用していましたが、プログラムのメンテナンスが発生したため、Crystal Reportsプログラムの配布が必要になりました。
基本的には、Crystal Reportsプログラムの配布はセットアッププロジェクトを作成して配布ということはわかってきましたが、上記1.のような方法は見つかりませんでした。
ところが、セットアッププロジェクトを試行錯誤しているうちに答えが見つかりました。
Crystal Reportsプログラムのランタイムは、
(1) CRRedist2008_x86.msi (本体)
(2) CRRedist2008_x86_jp.msi (ランゲージパック・日本語版)
でした。1.と2.を実行してインストールすれば、(.Net Framework等はインストール済みの前提)
.exeと.rptをコピーするだけで実行可能となりました。

上記(1)(2)を取得するには、

Business Objects Support の Software Downloads ページから以下のファイルをダウンロードします。
https://websmp130.sap-ag.de/sap(bD1qYSZjPTAwMQ==)/bc/bsp/spn/bobj_download/main.htm
(デジタル証明書の選択画面が表示されますが、そのまま[OK]をクリック)

【画面上での選択】
Software Product:Crystal Reports
製品バージョン (optional): Crystal Reports .Net
Software Type (optional) :Utility
上記指定後[Search]をクリック(現時点:2009.6.1だとIE8では表示されませんのでIE6で実行しました)

ファイルタイトルが、
CR for .NET Framework 2.0 Redistributable Package (x86)
CR Basic for VS 2008 - Redistributable file for x86
をダウンロードする。
ファイル名は、
CRRedist2008_x86.zip(CRRedist2008_x86.msi)
CRBasicVS2008_redist_x86.zip(CRRedist2008_x86_jp.msi)
zipを解凍すると、msiファイルができる。

以上です。

| | コメント (0) | トラックバック (0)

2009.05.20

Enter キイ押下の判定

Visual Studio 2003 のVB.NETのプログラムで、[Enter]キイを押したときに
処理をコントロールをしているプログラムがありますが、Visual Studio 2008
にバージョンアップしたら、[Enter]キイに反応しなくなりました。
しばらく、ほおっていましたが、・・・・・

最近プログラムをメンテナンスする必要がでてきたので、そのプログラムの
コーディングの一部で検索をかけたら、答えがわかりました。

Visual Studio 2003 VB.NETでのコーディング
   If e.KeyCode.ToString = "Enter" Then
     処理内容・・・・・・
   End If
    ↓
Visual Studio 2008 VB.NETでのコーディング
   If e.KeyCode = Keys.Enter Then
     処理内容・・・・・・
   End If

ちなみに、Visual Studio 2008 VB.NETで、[Enter]キイを
押したときの、e.KeyCode.ToString の中身は、
なんと、"Return"でした。

| | コメント (0) | トラックバック (0)

2008.01.12

ホームページからメール送信

【概要】
公開しているホームページからその所有者宛のメッセージを送るフォームは、プロバイダのcgi等によって実装されていますが、同じ機能をVB.NETによって作成してみました。
昨年の始めに開発ツールをVB.NET2005にバージョンアップしていましたが、実用プログラムを一度も作成したことがなく、今回が初回の作成となりました。当初VB.NET2003のテキストを元に作ってみましたが、古い書式ですと警告メッセージが、メール機能はバージョンアップされているのでした。

【WebPageデザイン】
TextBox1:送信者のメールアドレスを入れる
TextBox2:メールのタイトルを入れる
TextBox3:本文を入れる
Label4:処理結果のメッセージを表示させる
実際のWebページ
http://www.hagimoto.org/webapp/webmail/mailtome.aspx

【コーディング例】
送信ボタンをクリックしたら下記を実行する
If TextBox1.Text = "" Then
     Label4.Text = "あなたのメールアドレスを入れて下さい"
Else
     If TextBox2.Text = "" Then
       Label4.Text = "タイトルを入れて下さい"
     Else
       If TextBox3.Text = "" Then
         Label4.Text = "本文を書いて下さい"
       Else
         Dim strSmtp As New System.Net.Mail.SmtpClient()
         Dim strFrom, strTo, strSubject, strBody As String
         ' SMTP Server
         strSmtp.Host = "smtpサーバ名称を書く"
         strSmtp.Credentials = New System.Net.NetworkCredential("ユーザID", "パスワード")
         strSmtp.EnableSsl = False
         strFrom = TextBox1.Text
         strTo = "送り先のメールアドレスを書く"
         strSubject = TextBox2.Text
         strBody = TextBox3.Text
         '
         Try
           strSmtp.Send(strFrom, strTo, strSubject, strBody)
           Label4.Text = "メールを送信しました"
         Catch ex As Exception
           Label4.Text = "エラーがあり送信できませんでした"
         End Try
       End If
     End If
End If

| | コメント (0) | トラックバック (0)

2006.11.20

DBからExcelへダウンロード

【処理概要】
SQLサーバのあるテーブルの中身をExcelファイルにダウンロードします。
Excelデータの書式は、d:\雛形Excelファイル名.xlsにあり、1行目に項目名称が入力済みで、
ここにDBの内容をコピーし、d:\保存用ファイル名称.xlsに保存する。

【ソースリスト】
      Dim myXls As Object
      Dim myBk As Object
      Dim mySht As Object
      Dim myTbl As DataTable
      Dim y As Integer
      ' File定義 & Open
      Dim cn As New SqlConnection("server=sv11;Integrated Security=SSPI;Database=データベース名称;")
      cn.Open()
      myXls = CreateObject("Excel.Application")
      myBk = myXls.Workbooks.Open("d:\雛形Excelファイル名.xls")
      mySht = myBk.Worksheets("テーブル名称")
      ' DBの読込み&Disk出力
      Dim myadapter As New SqlDataAdapter("SELECT * from テーブル名称 ORDER BY ソートキイ", cn)
      Dim mydataset As New DataSet
      Dim myrow As DataRow
      Dim i As Int16
      Dim ctr As Integer
      ctr = 0  'レコードカウンター
      myadapter.Fill(mydataset, "テーブル名称")

      For i = 0 To mydataset.Tables("テーブル名称").Rows.Count - 1
        myrow = mydataset.Tables("テーブル名称").Rows(i)
        ' 1レコード毎の加工処理
        ctr = ctr + 1
        y = ctr + 1
        mySht.cells(y, 1).Value = myrow("項目名1")
        mySht.cells(y, 2).Value = myrow("項目名2")
        mySht.cells(y, 3).Value = myrow("項目名3")
           ・
           ・
           ・
      Next
      cn.Close()
      myBk.SaveAs("d:\保存用ファイル名称.xls")
      myBk.Close()
      myXls.Quit()
【処理上の注意】
この方式はMSDN(Help)ではデータ量が多い場合は使用しない方がよいとありましたが、
実行してみたところ約800件の処理に数分時間がかかり、その間プログラム実行画面
は応答がなくなりました。砂時計もでません。
数件なら良いようですが、数百件のレベルでも処理がきついようです。

| | コメント (0) | トラックバック (0)

2006.06.10

クエリー文字列の取得

http://www.abcdefg.com/?p=aabbccの用にURLの後ろに付いているクエリー文字列を取得する方法です。

  Dim wp As String
  wp = Request.QueryString("p")
  Label1.Text = "クエリー文字列=" & wp

| | コメント (0) | トラックバック (0)

2006.06.03

Crystal Report配布用Setup

VB.NETで作成したクリスタルレポート(Crystal Report)を他のPCに配布する場合、Setupをビルドして配布することになっています。

このときに、マージモジュールの
Crystal_Database_Access2003.msm
Crystal_Database_Access2003_jpn.msm
Crystal_Managed2003.msm
Crystal_Managed2003_JPN.msm
Crystal_regwiz2003.msm
を追加し、その後に、
Crystal_regwiz2003.msmのプロパティのLicense Key に、
Crystal Reportをユーザ登録したときにE-mailで送られてくるキーコードを入力します。
これでビルドしてできたSetupプログラムを他のPCにインストールします。
(参考)http://japan.crystaldecisions.com/support/crystalreports9/faq_dotnet.asp#net_keycode_error

上記のマージモジュールだけでも10MB近くなりますので、上記の内容だけで作成したSetupプログラムにCrystalReportSetupという名前を付け(実はCrystal Reportのランタイムになります)、一度だけインストールしておけば、後は、VB.NETで作成したCrystal Reportのプログラム(exe形式とrpt形式)をコピーするだけで他のPCでも動作させることができるようになります。

| | コメント (0) | トラックバック (0)

2006.05.30

Crystal Report作表(ジャストプリント)

VB.NETでクリスタルレポート(Crystal Report)を利用して作表する方法です。

1.ウインドーズフォーム(Windows Form)にCrystal Report Viewerを貼付け
 VB.NETのツールバーのWindowsフォームの一番下にあるCrystal Report ViewerをWindows Formに貼り付ける。
2.Windows Formの設定
 Windows FormのプロパティでSizeを900,700に設定する。(A4サイズの場合)
3.Crystal Report Viewerの設定
 Crystal Report Viewerのプロパティで、Locationを8,8にSizeを868,652に設定する。
4.Windows Form のForm Loadでのコーディング
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    With Screen.PrimaryScreen.Bounds
      Me.Top = (.Height - 40 - Me.Height) / 2
      Me.Left = (.Width - Me.Width) / 2
    End With
     '
    Dim section As CrystalDecisions.CrystalReports.Engine.Section
    Dim textObject As CrystalDecisions.CrystalReports.Engine.TextObject
    Dim fieldFormat As CrystalDecisions.CrystalReports.Engine.FieldFormat
    Dim report As New CrystalDecisions.CrystalReports.Engine.ReportDocument
    report.Load("CrystalReport1.rpt")  ' クリスタルレポート帳票ファイルを指定
    CrystalReportViewer1.DisplayGroupTree = False
    CrystalReportViewer1.ReportSource = report
  End Sub

| | コメント (0) | トラックバック (0)