- PR -

Calendarコントロールについて。

投稿者投稿内容
ひよこ
会議室デビュー日: 2006/01/24
投稿数: 13
投稿日時: 2006-01-24 20:50
いつもとても参考にさせてもらっています。

開発環境はWin2000 VS.NET2003 VB ASP.NET Webアプリケーションです。

こちらのサイトで公開されている
http://www.atmarkit.co.jp/fdotnet/dotnettips/337aspcalendarsel/aspcalendarsel.html
についてお尋ねします。こちらはSQL Serverを使って行っている処理だと思いますがこれと同等に近い機能でサーバーエクスプローラー上のSQL Serverを使わずにAccessのデータベースを使って作りたいと考えています。

AccessのデータベースをWebアプリケーション上に接続(?)する方法などは調べて分かりましたが肝心な全体のコードが分かりません。
どこかにこの条件のCalendar機能の作成方法などはありませんでしょうか?

助言の方よろしくお願いいたします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-25 00:03
MDB にはどのようにして接続しますか?

oledb を使用して接続するなら下の URL を見てもらえばわかりますが
SQLServer と Access だと記述がかなり似通っています。
http://support.microsoft.com/default.aspx?scid=kb;ja;311021
ひよこ
会議室デビュー日: 2006/01/24
投稿数: 13
投稿日時: 2006-01-25 12:06
返信が遅くなり申し訳ありません。
MDBはoledbを使って接続するやり方です。

Web.configの下のほうに下記のような記入をし

<appSettings>
<add key="conStringAccSc"value="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\フォルダ名\Accessファイル名.mdb" />
</appSettings>

のようにしています。

本コード中からは

・・・前略・・・

mdtCustomers = CreateDataTable("EXECUTE クエリ名")
Dim dc As DataColumn = 項目名.項目("ID")

・・・中略・・・
Private Function CreateDataSet(ByVal strQuery As String, _
Optional ByVal strConnectionString As String = "conStringAccSc") As DataSet
Dim con As New OleDbConnection(ConfigurationSettings.AppSettings(strConnectionString))
Dim da As New OleDbDataAdapter(strQuery, con)
Dim ds As New DataSet
da.Fill(ds)
Return ds
End Function

・・・以下略・・・

このように呼び出そうと考えています。

接続の方法はわかるのですがSQL Serverを使わずにAccessを使って
http://www.atmarkit.co.jp/fdotnet/dotnettips/337aspcalendarsel/aspcalendarsel.html
のような機能を実装したいと考えています。

どこかにこの条件のCalendar機能の作成方法などはありませんでしょうか?

助言の方よろしくお願いいたします。
び〜る
会議室デビュー日: 2005/11/29
投稿数: 12
投稿日時: 2006-01-25 12:59
SqlConnectionをOleDbConnection
SqlCommand をOleDbCommand
と書き換えるだけでいいんじゃないですか?
(もちろん使用する名前空間と、接続文字列は修正する必要がある)。
ひよこ
会議室デビュー日: 2006/01/24
投稿数: 13
投稿日時: 2006-01-25 21:17
返信ありがとうございます。
SqlConnectionをOleDbConnection
SqlCommand をOleDbCommand
に書き換えてやってみましたがうまくいきませんでした。その際に接続文字列は変更しました。

今まで行った事を整理してみます。
開発環境はWin2000 VS.NET2003 VB ASP.NET Webアプリケーションです。
接続の方法はoledbを使うやり方です。


・Cドライブ直下にtestというフォルダを作り仮想ディレクトリも設定。

・「test」フォルダの中にVB ASP.NET Webアプリケーションの新規プロジェクト作成。

・「test」フォルダの中にWebDBというフォルダを作りその中にAccessで「Sc.mdb」というファイルを作成。

・「Sc.mdb」の中のテーブル名は「scd」でフィールド名に「sid(主キー)」・「title」・「sDate」・「sTime」・「eTime」・「memo」を作成。

・Web.configに下記の内容を追加

<appSettings>
<add key="conStringAccSc"
value="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\\test\\WebDB\\Sc.mdb" />
</appSettings>

・http://www.atmarkit.co.jp/fdotnet/dotnettips/337aspcalendarsel/aspcalendarsel.html
のサイトにあるコードの(VB.NET版:calendar_desc_vb.aspx)をWebForm1.aspxのデザイン上に貼り付け。

・SqlConnectionをOleDbConnection ・SqlCommand をOleDbCommandに置換。


ここまでは間違っていないと思うのですがこの後が問題のようです。
どこをどう変えたらよいかアドバイスいただけないでしょうか?
よろしくお願いいたします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-25 21:41
サンプルを切って貼って、置換してもそう動きませんよね
SqlClient と OLDDB のコードの違いをしっかりと把握しましょう


google で「mdb asp.net oledb 」などで検索すると
ASP.NET から OLEDB を使用して MDB から レコードを引っ張るような例が
たくさん出てくると思うのでまず、MDB から レコードを検索するところから
勉強されたほうがいいかも知れませんよ。


これなんかも参考になるかも
[HOWTO] ASP.NET、ADO.NET、および Visual Basic .NET を使用して Access データベースからレコードを取得して表示する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;308278
ひよこ
会議室デビュー日: 2006/01/24
投稿数: 13
投稿日時: 2006-01-26 02:23
素早い返信ありがとうございました。教えていただいた
http://support.microsoft.com/default.aspx?scid=kb;ja;308278
サイトを見てOLEDBを使ってMDBを取得するのを学び直し途中ま作ることが出来ましたが行き詰まってしまいました。

最初はWeb.configを使った方法でやると言いましたが少し変更して以下の方法を使わせてもらいました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/337aspcalendarsel/aspcalendarsel.html
のサンプルのままだとフォームとコードビハインドが一つになっていてより複雑だったので今回は別々の形で作ってみました。早速ですがコードの方を記入いたします。


***WebForm1.aspx***

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DateSample.aspx.vb" Inherits="test.DateSample"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>DateSample</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:Calendar id="Calendar1" runat="server" BorderWidth="1px" BackColor="#FFFFCC" Width="220px"
DayNameFormat="FirstLetter" ForeColor="#663399" Height="200px" Font-Size="8pt" Font-Names="Verdana"
BorderColor="#FFCC66" ShowGridLines="True">
<TodayDayStyle ForeColor="White" BackColor="#FFCC66"></TodayDayStyle>
<SelectorStyle BackColor="#FFCC66"></SelectorStyle>
<NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC"></NextPrevStyle>
<DayHeaderStyle Height="1px" BackColor="#FFCC66"></DayHeaderStyle>
<SelectedDayStyle Font-Bold="True" BackColor="#CCCCFF"></SelectedDayStyle>
<TitleStyle Font-Size="9pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></TitleStyle>
<OtherMonthDayStyle ForeColor="#CC9966"></OtherMonthDayStyle>
</asp:Calendar>
<asp:Table id="DisplayTable" runat="server"></asp:Table>
</form>
</body>
</HTML>


***WebForm1.aspx.vb***

Imports System.Data.OleDb

Public Class DateSample
Inherits System.Web.UI.Page

#Region " Web フォーム デザイナで生成されたコード "

'この呼び出しは Web フォーム デザイナで必要です。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents DisplayTable As System.Web.UI.WebControls.Table
Protected WithEvents Calendar1 As System.Web.UI.WebControls.Calendar

'メモ : 次のプレースホルダ宣言は Web フォーム デザイナで必要です。
'削除および移動しないでください。
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。
' コード エディタを使って変更しないでください。
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim connectString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\\\\\\\\test\\\\\\\\WebDB\\\\\\\\スケジュール.mdb"
Dim cn As OleDbConnection = New OleDbConnection(connectString)
cn.Open()
Dim selectString As String = "SELECT ナンバー, タイトル, 日付, 開始, 終了, メモ FROM スケジュールデータ"
Dim cmd As OleDbCommand = New OleDbCommand(selectString, cn)
Dim reader As OleDbDataReader = cmd.ExecuteReader()
DisplayTable.Width = Unit.Percentage(90.0)
Dim tableHeading As TableRow = New TableRow

Dim customerナンバーHeading As TableHeaderCell = New TableHeaderCell
customerナンバーHeading.Text = "ナンバー"
customerナンバーHeading.HorizontalAlign = HorizontalAlign.Left
tableHeading.Cells.Add(customerナンバーHeading)

Dim customerタイトルHeading As TableHeaderCell = New TableHeaderCell
customerタイトルHeading.Text = "タイトル"
customerタイトルHeading.HorizontalAlign = HorizontalAlign.Left
tableHeading.Cells.Add(customerタイトルHeading)

Dim customer日付Heading As TableHeaderCell = New TableHeaderCell
customer日付Heading.Text = "日付"
customer日付Heading.HorizontalAlign = HorizontalAlign.Left
tableHeading.Cells.Add(customer日付Heading)

Dim customer開始Heading As TableHeaderCell = New TableHeaderCell
customer開始Heading.Text = "開始"
customer開始Heading.HorizontalAlign = HorizontalAlign.Left
tableHeading.Cells.Add(customer開始Heading)

Dim customer終了Heading As TableHeaderCell = New TableHeaderCell
customer終了Heading.Text = "終了"
customer終了Heading.HorizontalAlign = HorizontalAlign.Left
tableHeading.Cells.Add(customer終了Heading)

Dim contactメモHeading As TableHeaderCell = New TableHeaderCell
contactメモHeading.Text = "メモ"
contactメモHeading.HorizontalAlign = HorizontalAlign.Left
tableHeading.Cells.Add(contactメモHeading)

While (reader.Read())
Dim detailsRow As TableRow = New TableRow

Dim customerナンバーCell As TableCell = New TableCell
customerナンバーCell.Text = reader("ナンバー").ToString()
detailsRow.Cells.Add(customerナンバーCell)

Dim customerタイトルCell As TableCell = New TableCell
customerタイトルCell.Text = reader("タイトル").ToString()
detailsRow.Cells.Add(customerタイトルCell)

Dim customer日付Cell As TableCell = New TableCell
customer日付Cell.Text = reader("日付").ToString()
detailsRow.Cells.Add(customer日付Cell)

Dim customer開始Cell As TableCell = New TableCell
customer開始Cell.Text = reader("開始").ToString()
detailsRow.Cells.Add(customer開始Cell)

Dim contact終了Cell As TableCell = New TableCell
contact終了Cell.Text = reader("終了").ToString()
detailsRow.Cells.Add(contact終了Cell)

Dim customerメモCell As TableCell = New TableCell
customerメモCell.Text = reader("メモ").ToString()
detailsRow.Cells.Add(customerメモCell)

DisplayTable.Rows.Add(detailsRow)
End While
reader.Close()
cn.Close()
End Sub

End Class



AccessファイルはC直下のtestというフォルダの中のWebDBというフォルダの中にあるスケジュール.mdbというファイルでテーブル名「スケジュールデータ」です。フィールドは

ナンバー(主キー)
タイトル
日付
開始
終了
メモ

のようになっています。

現在はカレンダー表の下にデータベースに入っている全てのスケジュールが一覧表示されている状態です。
スケジュールに入っている日付データを元にカレンダーの該当の日付をクリックしたらその日の内容のスケジュールを表示する処理はどうしたらよいのでしょうか?
長くなりましたが是非アドバイスお願いいたします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-26 09:58
たとえば選択された日付を元に詳細データを検索したいのであれば
SelectedDate の値を元に データベースに再問い合わせしてください
コード:

Private Sub Calendar1_SelectionChanged _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged

Dim cal As Calendar = CType(sender, Calendar)
DispDetail(cal.SelectedDate)
End Sub

Private Sub DispDetail(ByVal SelectedDate As Date)
' データベースの検索処理
' 画面の描画処理
End Sub





[ メッセージ編集済み 編集者: かるあ 編集日時 2006-01-26 18:45 ]

スキルアップ/キャリアアップ(JOB@IT)