したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

VBでつくられた2chブラウザ

11 </b><font color=#FF0000>(GQrDul2E)</font><b>:2003/03/28(金) 17:19 ID:ih5oMVcU
VB製の2chブラウザとそのサンプルプログラムはあるのかにゃあ?

2611 ◆ExGQrDul2E:2005/05/24(火) 00:14:19 ID:T8FibFIw
2chで必要なのは何日間もファイルが流れないで多量アクセスにも余裕で答えられるアップロダであり、
Webサーバ+MSDEだと5人までしか同時アクセスできん。

2621 ◆ExGQrDul2E:2005/05/24(火) 00:22:47 ID:T8FibFIw
庶民のクライアントアプリも同時アクセス5だと
インターネットから自動的にファイルや情報を集めるアプリだとすると
そのアプリはほとんどの情報をスルーしてしまうことになり、自動的にお宝を集めるアプリを目指してるキミにはものたりたりないはずだ。

263名無しさん:2005/05/25(水) 09:05:39 ID:4Z1r0KjE
> MSDEだと5人までしか同時アクセスできん。
100でもいくつでもアクセスできるよ
しょうもない記事を鵜呑みにしてないで自分で試してから書け

それにクライアント側での最近の流行はユーザ側でSQL鯖(含むMSDE)を建てないで済むSQLiteだよ
これはDLL配布だけで済むし基本的なSQL文は解釈してくれるし言うことない
身近なところではRSSリーダーや2chブラウザに組み込んで使用される実例が増えている

勉強不足だ
しっかり汁

2641 ◆ExGQrDul2E:2005/05/27(金) 19:30:42 ID:rY7x7oOg
( ^▽^)このスレおもしろーい

2651 ◆ExGQrDul2E:2005/07/12(火) 22:45:14 ID:ihzvuwJE
日本にお金持ちが現れて2chのような掲示板をつくり、そこは2chよりもユーザ思いのシステムであろうと予測される。
数十年後の予言である。

2661 ◆ExGQrDul2E:2005/07/19(火) 21:55:13 ID:y8dbjjbM
ホントこのモナジラBBSはくそスレばっかだな

2671 ◆ExGQrDul2E:2005/10/13(木) 02:38:24 ID:GRrXdLqk
さて、ネットにあるテキストドキュメントをダウンロードしてディスクに保存するプログラムを作ったので紹介する。
まずは名前空間のインポートを行う。
Imports System.Net
Imports System.Text
Imports System.IO
---------------
サーバへの送受信を行うクラスを使用する。
Dim WC As New WebClient
このクラスは先ほどインポートしたSystem.Netに含まれているものだ。
---------------
そしてアドレス文字列を準備する。
Dim UStr As String = "とりこみ対象ページのアドレス"
たとえばhttp://www.abcd.net/efg.htmlなど。
-----------------------------------------
ネットドキュメントをバイナリデータとして読み込む。
Dim DownLoadData As Byte() = WC.DownloadData(UStr)
-----------------------------------
今回はEUCコードのページをUTF-8に変換する例を挙げておく。
Dim UTF8Bytes As Byte() = Encoding.Convert(Encoding.GetEncoding("EUC-JP"), Encoding.UTF8, DownLoadData)
(画像ファイルなどはこのコード変換作業は不要だ。WindowsXPではUTF-8のドキュメントが扱いやすいようなのでUTF-8にしてみた。私がフランス語やドイツ語も使うこともあるのであえてShift-JISは見送った。)
----------------
エンコード後のバイナリデータをディスクに書き込むところ。
Dim fs As New FileStream(AppPath & "\DownLoad.html", FileMode.Create)
Dim w As New BinaryWriter(fs)
w.Write(UTF8Bytes)
w.Close()
fs.Close()

268名無しさん:2005/10/13(木) 05:15:15 ID:N4pIWB/U
わーい、1さん、おかえりなさい

2691 ◆ExGQrDul2E:2005/10/13(木) 07:41:32 ID:GRrXdLqk
うむ

2701 ◆ExGQrDul2E:2005/10/13(木) 19:09:37 ID:GRrXdLqk
ちなみにバイト配列をファイルとして保存しないで、
メモリ内に文字列変数としておいておきたい場合は
S = Encoding.UTF8.GetString(UTF8Bytes)
みたいにGetStringメソッドを使えばよい。

2711 ◆ExGQrDul2E:2005/10/14(金) 08:07:08 ID:wkvnVpxM
ネットドキュメントで取得すべきは
ズバリ競馬データである。
競馬で生活していくためには過去のレース結果を収集して分析しなければならない。

2721 ◆ExGQrDul2E:2005/10/15(土) 06:58:58 ID:wkvnVpxM
今はパソコンで馬券を買えるので
JRAホームページで無料会員に入ること。
土日は自宅で競馬をすればよい。

2731 ◆ExGQrDul2E:2005/10/15(土) 15:54:59 ID:FNbh/Qr2
競馬データを解析するプログラムを何千行も書いた。
そしてバグがありうまくうごかない。ノイローゼになるほど探したがどこが悪いのか見つからない。
泣く泣く0行目から新規に書くことにした。つらすぎる・・・・

プログラムのデバッグはVB.NETよりVB6.0のほうが優れているというのが体験的に感じられた。

2741 ◆ExGQrDul2E:2005/10/15(土) 16:28:55 ID:FNbh/Qr2
しかし、今日は競馬で3万勝てたので
プログラムの書き直しも苦にならないほど機嫌がいいのだ。競馬は毎月8回あるから
いつもこれぐらい勝てれば毎月20万ぐらいになる。
だからなんとしてでも競馬ソフトを開発しなければならない。
大事なのは、どの人気番の馬券が来たか、である。
人気番の解析ができるソフトを作れれば高い確率で当たり馬券を買えるのだ。

2751 ◆ExGQrDul2E:2005/10/16(日) 07:14:46 ID:FNbh/Qr2
.NETではメモリ内データベースであるDataTableをよく使うが、
Dt.Columns.Add("abc",GetType(String))
で列を加えて、
Dim Row1 as DataRow = Dt.NewRow
Row1("abc")="あいうえお"
Dt.Rows.Add(Row1)
で行を加える。
列はフィールド、行はレコードともいう。

書き込んだデータをすべて削除するメソッドはClearである。
Dt.Clear()
テーブル構造さえも消去するメソッドはResetである。
Dt.Reset()
先ほど加えた特定の列を削除するメソッドはRemoveである。
Dt.Columns.Remove("abc")

2761 ◆ExGQrDul2E:2005/10/16(日) 08:40:47 ID:FNbh/Qr2
プログラミング自体は簡単だ。
問題はシステム設計、仕様だ。
とくにデータを蓄積する場合はデータベースの設計が悩ましい。
競馬ソフトでは日付ごとに格納するか、馬券の式別ごとに格納するか、それの決定が微妙なのだ。
ハードディスクに余裕があるなら両方採用でもよい。
馬券で儲けることが目的ならまずは式別ごとに格納しよう。
あと1時間半で馬の発走時間になってしまうので私も急ピッチでコーディング中だ。

2771 ◆ExGQrDul2E:2005/10/16(日) 21:58:32 ID:WLy9nzRo
バグでプログラムが動かない件については
VB.NETのバグだとわかった。
インテリセンスinstrrev関数の-1が1になっていたり
dim lng1 as long
do while instr(lng1+,......

loop
では
ループの前にlng1=0と書いておかないとダメなことなど
VB.NET自体に修正すべきところがある。
バグがあったら自分と言語両方を疑おう。

2781 ◆ExGQrDul2E:2005/10/17(月) 07:16:32 ID:WLy9nzRo
テーブルにNull値を代入するにはDBNull.Valueを入れる。
Nullかどうかの検査はIsDBNull関数を使う。

2791 ◆ExGQrDul2E:2005/10/17(月) 20:45:29 ID:kmK7nyDQ
完成図
http://www.interq.or.jp/guitar/lead/up/2005_10_17_keibasoft.png

競馬場に毎日通ってるおじさんたちはこういったデータを手入力しているのだが
競馬データは膨大で一生かかっても入力できるものではない。
しかし私たちプログラミング経験者はボタンをクリックしただけで自動的にデータを集めるソフトを作れてしまうのだ。
私はネットドキュメントをインターネットから取得してそれをバイナリのままあるいは任意の文字コードの文字列に変換する方法を解説した。
それからメモリ内データベースであるデータテーブルの作り方も述べた。
それらを使って競馬データも取得するのだ。
あとはその競馬データを自分なりに解析して競馬でのもうけかたをあみだす。
マーチンゲールに最適な馬券の買い方を見つけるのだ。
たとえばX番人気を掛け金をY倍にしながら買い続ける。など。
とりあえず
ギャンブル マーチンゲール
で検索すればわたしの言っている意味もわかるだろう。そしてお金持ちになれる可能性も沸いてくるだろう。
私との出会いがあなたの人生を良い方向に変えたはずである。

2801 ◆ExGQrDul2E:2005/10/25(火) 20:31:17 ID:yyu0AzNw
最近2ch板リストページのアドレスがiij4uから別のに変わったのはまだ漏れしか知らないみたいだね

281名無しさん:2005/10/25(火) 21:30:54 ID:PwzqRQvE
>>280
かなり前からですよ

2821 ◆ExGQrDul2E:2005/10/29(土) 22:29:37 ID:ajdWMgkE
((((((;゚д゚)))))

2831 ◆ExGQrDul2E:2005/10/29(土) 22:41:33 ID:ajdWMgkE
Dtというメモリ内テーブルが定義されていたとする。
その列(フィールド、カラムともいう)のコレクションを得るにはどうするか?
Dim DC() as DataColumn
のなかにテーブル内の列情報を格納することはできないのだ。
DataColumnCollectionというオブジェクトがありそれに代入する。
Dim DC as DataColumnCollection
DC=Dt.Columns

これで列コレクションをテーブルから独立して扱えるようになった。
そのあとは
dim dc2 as datacolumn
For each dc2 in DC
列名取得
列に定義されているデータタイプ取得
Next

SQL="Create Table メモリ内テーブルと同じ構造定義"
Execute SQL

などのコードを書いてテーブルと同じ構造でSQL Serverにテーブルを自動的につくったりする。
メモリ内テーブル(データテーブル、DataTable)とSQL Serverの両方でテーブル作成するのは大変なので
これでデータテーブルのみ設計すればSQL Serverではわざわざ列を手動で作る必要は無くなった。

2841 ◆ExGQrDul2E:2005/10/29(土) 23:09:18 ID:ajdWMgkE
こちらはすでに作り終わってるのでもうちょっと紹介してみると
カラムをFor EachでまわしてDC.DataType.ToStringの戻り値がSystem.Int32だったら
SQL=SQL & "int"
などとしてSQL文に列定義をどんどん追加していけば最後にはDataTableと同じ構造をくれるようなSQL文ができあがるので
それを実行すればSQL ServerにDataTableと設計が同じなテーブルが作成される。

2851 ◆ExGQrDul2E:2005/10/29(土) 23:14:57 ID:ajdWMgkE
日本のギャンブルでは払戻最高額は2億円までと決められているとのことで、
配当のデータ型はint型 -2^31 (-2,147,483,648) から 2^31 - 1 (2,147,483,647) までの整数
で扱うことにした。
ナイチンゲールの法則の計算などはbigintやそれ以上の
万億兆京がいじょじょうこうかんせいさいごくごうがしゃあそうぎなゆた
という大きな数が扱えるデータ型にすること。

2861 ◆ExGQrDul2E:2005/10/30(日) 07:39:32 ID:ajdWMgkE
さてメモリ内データテーブルをハードディスクのSQL Serverに保存するところをやっているわけであるが、
ADO.NETでは
レコードセット.EOFに相当するものはデータリーダー.HasRow
である。
HasRowがTrueかFalseかによってSQL文は
InsertにするかUpdateにするかを決める。

2871 ◆ExGQrDul2E:2005/10/30(日) 11:38:42 ID:ajdWMgkE
データベースをいじるときは
Where文を書き忘れないこと。書き忘れるとデータベース全部が削除されたり上書きされたりしてしまう。

2881 ◆ExGQrDul2E:2005/10/30(日) 19:56:09 ID:2lbTmlQA
競馬データには
'95インターナショナルジョッキーズ
というクオーテーションを含んだ文字列がありこの'はSQL文では予約記号なので
SQL文で扱える形にエスケープさせること。

2891 ◆ExGQrDul2E:2005/10/30(日) 20:10:41 ID:2lbTmlQA
SQLエスケープ
「'」→「''」
「\ 」→「\ \ 」

2901 ◆ExGQrDul2E:2005/10/30(日) 21:16:46 ID:2lbTmlQA
\0 ASCII 0 (NUL)
\n 改行文字
\t タブ文字
\r リターン文字
\b バックスペース文字
\z ASCII 26 (Control-Z)。
\' シングルクォート( ' )
\" ダブルクォート( " )
\\ バックスラッシュ( \ )文字
\% % 文字
\_ _ 文字

2911 ◆ExGQrDul2E:2005/11/01(火) 07:56:40 ID:2lbTmlQA
前回はDataTableのテーブル構造をSQL Serverに自動作成するプログラムを書いた。
次はSQL Serverのテーブル構造をDataTableなどに自動作成するために必要なスキーマの取得をしてみる。
Dim CS As String = "Data Source=(local);Initial Catalog=Keiba;User ID=kimagure;Password=kimagure"
Dim conn As New SqlConnection(CS)
Dim SQL As String
SQL = "Select * From Race Where ID=20000105100000"
Dim cmd As SqlCommand = New SqlCommand(SQL, conn)
conn.Open()
Dim DR As SqlDataReader = cmd.ExecuteReader
DR.Read()
Dim schemaTable As DataTable = DR.GetSchemaTable()
Dim myRow As DataRow
Dim myCol As DataColumn
SS = ""
For Each myRow In schemaTable.Rows
For Each myCol In schemaTable.Columns
SS = SS & myCol.ColumnName & " = " & myRow(myCol).ToString() & CL
Next
Next
DF_.RTB1.Text = SS : DF_.Show()
LnanComp2:
DR.Close()
conn.Close()
LandComp:
Button1.Enabled = True
App.DoEvents()

2921 ◆ExGQrDul2E:2005/11/01(火) 07:58:53 ID:2lbTmlQA
このプログラムではSQL ServerがWindows認証になっていないのでセキュリティをアップさせる必要があるような大事なことはWindows認証でSQL Serverを扱うこと。

2931 ◆ExGQrDul2E:2005/11/01(火) 08:01:39 ID:2lbTmlQA
上記プログラムでschemaTableがどのような構造になっているかはデータグリッドに表示させるとわかりやすいだろう。
DataGrid1.DataSource = schemaTable

2941 ◆ExGQrDul2E:2005/11/01(火) 08:07:03 ID:2lbTmlQA
schemaTableの戻り値で特に大事なのは
ColumnName
ColumnSize
DataType
で、これらを取得すればSQL Serverのテーブルと構造が同じなDataTableを自動作成できる。

今回と前回のことを知っていれば、
DataTableあるいはSQL Serverどちらか一方だけのテーブル設計をすればよくなる。
両方とも手動で設計していたのではテーブル設計の仕様変更のたびに両方とも修正しなければならなくメンテナンス製に乏しくなる。

2951 ◆ExGQrDul2E:2005/11/01(火) 11:05:12 ID:2lbTmlQA
ユニーク列(主キー)があるばあいはそのこともスキーマ作成時に付加すること。

2961 ◆ExGQrDul2E:2005/11/09(水) 12:15:32 ID:oxEmRE/U
データビューのRowFilterやSortには私たちの目的を達成できるほどの柔軟性がないので
結局はデータテーブルから自前でデータを加工することになりその結果をまた別のデータテーブルに保存するであろうから、
そのときもフィールド名を自動的に取得してくれる今回のサンプルは役立つはずだ。

2971 ◆ExGQrDul2E:2005/11/11(金) 02:11:57 ID:oxEmRE/U
.NETになってコーディングが厳密になったとささやかれているとはいえ、
デフォルトプロパティに甘えることは許されている。
レコードのフィールドを厳密に指定するなら
Row.Item(indexまたはフィールド名)
だが、Itemというプロパティがデフォルトなため省略してしまって
Row.(indexまたはフィールド名)
と書いてもよい。
そのほか大文字小文字を区別しないですむ仕様などは私の好みであるしグラマーの労力軽減に役立っている。
Windows携帯がついに発売されるとのことで、VB6.0、VB.NETを信じてきたグラマーに希望の光が見えてきた感じである。

2981 ◆ExGQrDul2E:2005/11/24(木) 20:31:41 ID:FyL9DViM
問題
vbCrLf,vbLf,vbCrの改行コードの混じったテキストの改行コードをすべてvbCrLfにするコードを書きなさい。

299名無しさん:2005/11/24(木) 21:04:43 ID:Fl3fPTYk
なんでまじっちゃったの?

3001 ◆ExGQrDul2E:2005/11/26(土) 03:24:12 ID:oxEmRE/U
(?_?)

3011 ◆ExGQrDul2E:2005/11/26(土) 03:32:46 ID:oxEmRE/U
データグリッドコントロールでもっともいじりたいのは列の幅ではないだろうか。
整数値の列は幅が狭いだろうし、String列は幅の広さが必要だ。
デフォルトではすべての幅が均等に表示されてしまう。

DataGridの任意の列の幅を変更するコードを作ってみた。
DataGridには
dim Dt2 as new DataTable("Dt2")
とDt2という名前のデータテーブルを作ってそれを表示する。
そしてDt2にはColumns.AddやDt2.Rows.Add(DataRow)で列と行が追加してある。
今回存在する列名はo、oSの2つであるとする。
参考:Dt2.Columns.Add("o",gettype(Single))
↑oというなまえの列をSingle数値型で追加
Dt2の列を定義したらデータグリッドの列幅も操作できる。

3021 ◆ExGQrDul2E:2005/11/26(土) 03:33:22 ID:oxEmRE/U
Dim ts As New DataGridTableStyle
ts.MappingName = Dt2.TableName
Dim DTS As DataGridTableStyle
Dim StyleName As String
Dim StyleExist As Short = 0
For Each DTS In DataGrid1.TableStyles
StyleName = DTS.MappingName
If StyleName = "Dt2" Then StyleExist = 1
Next
If StyleExist = 0 Then
DataGrid1.TableStyles.Add(ts)
End If

'Try
'DataGrid1.TableStyles.Add(ts)
'Catch
'End Try

DataGrid1.DataSource = Dt2
DataGrid1.TableStyles(Dt2.TableName).GridColumnStyles("o").Width = 35
DataGrid1.TableStyles(Dt2.TableName).GridColumnStyles("oS").Width = 35

3031 ◆ExGQrDul2E:2005/11/26(土) 03:38:24 ID:oxEmRE/U
最後の行に
.Width = 35
があるが、単にWidthを操作するにもVB6.0とは違って事前準備が必要なのだった。
しかしこれでDataGridの幅を好きに設定できてめでたしである。

3041 ◆ExGQrDul2E:2005/11/26(土) 04:36:18 ID:oxEmRE/U
テキストボックスでリターンキーを押したときに
ボタンを自動押下する例
If e.KeyCode = Keys.Return Then
Button12_Click(sender, e)
End If

3051 ◆ExGQrDul2E:2005/11/26(土) 06:43:28 ID:oxEmRE/U
テキストボックス内の文字列の一番右にカーソルがあるときに→キーを押すと次のテキストボックスにフォーカスが移動する例
Dim T As TextBox
T = CType(sender, TextBox)
If e.KeyCode = Keys.Right Then
If T.SelectionStart = T.Text.Length Then
o2.Focus()
End If
End If

3061 ◆ExGQrDul2E:2006/05/23(火) 04:52:22 ID:MziW6YcM
ASP.NET2.0からはIISがなくても開発できるようになり、すなわちWindowsXP HomeEditionでも開発できる。
ASPをつかったブラウザタイプの2chブラウザというのはまだないが、これからぼちぼちと出始めてもよいころではある。

307名無しさん:2006/05/25(木) 00:39:21 ID:X78H8gwM
明けましておめでとうございます、1さん

3081 ◆ExGQrDul2E:2006/05/26(金) 21:22:21 ID:MziW6YcM
ほぉ自分以外にこのスレに人がいるのかね。
---------------------------------------------------
さて今はVisual Studio 2005の時代になった。
マイクロソフト→開発ツール というホームページサーフィン(ネットサーフィン)
とうかただ単にホームページを見るということだが、それをすると
.NET2.0を開発するツールで無料のが見つかる。
Visual Web Developer 2005 Express Editionは無料で役立つので良いとしよう。
しかしSQL Server 2005 Express Editionは開発環境でしか動作しないので上位エディションのSQL Server 2000や2005を持っているのなら最初からそれを使ったほうがあとでデータベースを移行しなくてすむ。
このスレではデータベースを丸ごとコピーするコードを>>291で紹介したのでデータベースの移行などは恐れる必要はないし後でやってもいいことである。
ニュースなのはマイクロソフトが無料でつかえる開発環境を打ち出してきたことである。
マイクロソフトの配布してる無料ツールを使うユーザーが増えると言うことはWindowsやWindowsサーバーのユーザーが増えることにつながるのでそこがねらいだろう。

3091 ◆ExGQrDul2E:2006/05/27(土) 00:04:35 ID:MziW6YcM
.aspxファイルに名前空間をインポートする方法
<%@ Import namespace="value" %>
------------------
(特注)
2chブラウザに関係ないような書き込みは実はすべて2chブラウザを作るための準備である。

3101 ◆ExGQrDul2E:2006/05/27(土) 00:28:49 ID:MziW6YcM
では環境も.NET1.1から.NET2.0に変わったことだし基本的なことからまたはじめたい。
.NET2.0では便利なコントロールが増えたり従来のコントロールに新たなプロパティやメソッドが加わったが基本的なことは今までどおりのコードで良い。
まずはデータベースのなかのひとつのテーブルをホームページに表示するプログラムをやってみたい。

メモ帳でもVisual Web Developer 2005 ExpressでもなんでもよいのでUTF-8でコードを書いていく。
ページの先頭は次のように書く。今書いているファイルは.aspxファイルである。
<%@ Page Language="VB" %>
<%@ Import namespace="System.Data.SqlClient" %>

System.Data.SqlClientはデータベースを利用するための名前空間だ。
ページロードイベントでもボタンクリックイベントでもどこでもいいので次のコードを書く。

Dim ConnectionString As String = "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI;"
Dim SQL As String = "Select * From Products"
Dim conn As New SqlConnection(ConnectionString)
Dim cmd As New SqlCommand(SQL, conn)
conn.Open()
Dim DR As SqlDataReader = cmd.ExecuteReader
GridView1.DataSource = DR
GridView1.DataBind()
DR.Close()
conn.Close()

3111 ◆ExGQrDul2E:2006/05/27(土) 00:36:54 ID:MziW6YcM
ConnectionStringはデータベースへの接続文字列である。
Integrated Security=SSPIはデータベースへのログインをWindows認証で行うと言う意味だ。
接続文字列を正しく書いて、さらにデータベース側でASP.NETユーザーにアクセス権限を持たせれば無事接続できる。
接続さえしてしまえばあとは好きなようにデータを取ってこれる。
うまくホームページにテーブルのデータがずらずらと表示された。

3121 ◆ExGQrDul2E:2006/05/27(土) 00:51:31 ID:MziW6YcM
無料版のSQL Server とはMSDEの後継版ことだった!

従来のSQL Server 2000 に付属していた MSDE が Express Edition として新しくなりました。MSDE には GUI ベースの管理ツールは付属していませんでしたが、Express Edition にはサービスの起動を管理できる SQL Computer Manager が追加され、更に SQL Server 2000 のクエリアナライザとほぼ同等の機能を持つ SQL Server 2005 Express Manager が使用できるようになりました。SQL Server 2005 Express Manager は無償でダウンロードすることができます。これにより、Express Edition を利用したデータベース アプリケーションの開発がより簡単になります。

3131 ◆ExGQrDul2E:2006/05/27(土) 00:57:59 ID:MziW6YcM
Visual Web Developer 2005 Express Editionという無料のサーバーサイドアプリ開発ツールをインストールすると
SQL Server 2005 Express Editionも同時にインストールされる。
そのあとさらにマイクロソフトのページに行き
Microsoft SQL Server 2005 Express Edition with Advanced Services
をインスコする。
そうするとWindowsのスタート→プログラムメニューに
SQL Server 2005 Management Studio Express
のショートカットができる。これはなにかというと、上位SQL ServerのEnterprise Manegerのようなものでグラフィカルにデータベースを操作できるのだ。

3141 ◆ExGQrDul2E:2006/05/27(土) 01:11:54 ID:MziW6YcM
これからやる実験は、SQL Server ExpressでApp_Dataに作ったデータベースを
SQL Server 2005 Management Studio Expressでつくった別のデータベースにコピーする実験である。

Visual Web Developer 2005 Express Editionでプロジェクトを開始する。
するとソリューションエクスプローラの一番上の項目はフォルダ名になっているが、
Visual Web Developer 2005 Express Editionではこのフォルダをプロジェクトと呼んでしまってよい。
ソリューションエクスプローラのプロジェクトを右クリックしてASP.NETフォルダの追加→App_Data
を行う。次にApp_Dataを右クリックして新しい項目の追加を選択する。
するとSQL Serverを追加できる。
これこそがまさにApp_Dataの中にできたSQL Serverデータベースである。
このデータベースは開発環境でしか動かないのでこれから公開用のデータベースにデータを移行しようというのが今回の作業である。
もちろん学習用としてプロジェクトを作ったなら移行しなくてよい。
肝心なのは.NET2.0でSQL Serverをいじってみれる環境が誰でも手に入るのが今という時期なのである。
Visual Web Developer 2005 Express EditionでASP.NETをやれば
Windows XP Home EditionでもASP.NETファイルを動作させることができる。
いままではXPプロフェッショナルエディションでしかASP.NET開発できなかったがこれからは
ASP.NETに興味をもったばかりの人もすぐにASP.NETに取り掛かれてしまうのだ。

3151 ◆ExGQrDul2E:2006/05/27(土) 01:15:25 ID:MziW6YcM
ちなみにVisual Basic の無料版もあるのでそれもチェックしてみよう。

3161 ◆ExGQrDul2E:2006/05/27(土) 01:45:45 ID:MziW6YcM
SQL Serverのデータベースファイルは.mdfである。

App_Dataにある.mdfをローカルデータベース、
SQL Serverサービスにある.mdfをサーバーデータベースと呼ぶことにする。

App_Dataにあるデータベースはまさにローカルで開発する時用のデータなのである。

3171 ◆ExGQrDul2E:2006/05/27(土) 02:13:49 ID:MziW6YcM
いいかね?データベースのデータをWEBページに表示できるかどうかでプログラミングをつづけるかやめるかが決まると思ってよい。
データベースを読み込めないときっとあなたは泣きたくなるだろう。
これから書くことは私が一文字ずつ書いたものでありどの本にも載ってないのでぜひ読んでおくべきだ。

あなたはVisual Web Developer 2005 Express EditionでApp_Dataの中にSQL Serverを作ったとする。
さらにそのデータベースに1個テーブルを作り、テーブルにもフィールドを1個つくり、そこまでしたらいったん保存ボタンを押して保存しそのテーブルデザイン画面を閉じ、
Visual Web Developer 2005 Express Editionの右にあるデータベースエクスプローラの中にそのテーブルがあり、
テーブルを右クリックしてテーブルデータの表示をしてからいくつか値を入力する。
これでApp_Dataデータベース作成→テーブル作成→データ入力をしたことになり、
実験用データベースができあがった。先ほど入力したデータがホームページに表示されれば実験成功というわけである。

3181 ◆ExGQrDul2E:2006/05/27(土) 02:32:33 ID:MziW6YcM
App_Dataのデータベースを表示するのは簡単だ。
Webページを新規につくり、データベースエクスプローラを開き、データベースの中の方の階層にあるテーブルをWEBページにドラッグするだけだ。

テーブルをドラッグするだけというのが画期的である。
今回は凝ったことをやりたいのでもっと汎用性のあるデータベース操作をしてみる。

3191 ◆ExGQrDul2E:2006/05/27(土) 03:59:13 ID:MziW6YcM
まずデータベースエクスプローラからデータベースを右クリックしてデタッチというのを実行する。
これで現在のプロジェクトからデータベースは隔離された。
次にSQL Server 2005 Management Studio Expressを立ち上げてデータベースを右クリック→アタッチ→追加ボタンを押してしばらく待つ、を行う。
アタッチするファイルはプロジェクトフォルダのなかのApp_Dataフォルダの中の.mdfデータベースファイルである。
こうしてアタッチするとこの.mdfはローカルではなくサーバーで動作している状態である。
SQL Serverにはローカルデータベースとサーバーデータベースがあるが、
将来Webページを公開するときはサーバーにデータがないとだめなわけでそれでローカルからサーバーに移行する日がいつかくる。
SQL Serverのローカルデータベースは一生自分しか見ることはできない。
なぜかというと、SQL Server 2005 Express Editionは無料版ゆえの制限がありデータをネットで公開できないように制限がかかっているからだ。
SQL Server 2005 Management Studio Expressで先ほどアタッチしたデータベースもローカルデータベースをアタッチしたのだから公開はできないが、
将来公開するときにそなえてサーバー側っぽい挙動をさせてみた。

3201 ◆ExGQrDul2E:2006/05/27(土) 04:36:26 ID:MziW6YcM
アタッチしたデータベースの表示

Dim ConnectionString As String = "Data Source=.\sqlexpress;Initial Catalog=DATABASE.MDF;Integrated Security=SSPI;"
Dim SQL As String = "Select * From aaa"
Dim conn As New SqlConnection(ConnectionString)
Dim cmd As New SqlCommand(SQL, conn)
conn.Open()
Dim DR As SqlDataReader = cmd.ExecuteReader
GridView2.DataSource = DR
GridView2.DataBind()
DR.Close()
conn.Close()

アタッチすると通常のSQL Serverのように扱える。

3211 ◆ExGQrDul2E:2006/05/27(土) 10:39:29 ID:MziW6YcM
VBプログラマ質問スレ(6.0以前) Part39
http://pc5.2ch.net/test/read.cgi/tech/1099737063/l50

910 名前: デフォルトの名無しさん [sage] 投稿日: 04/12/11 10:03:35
ADOである名前のテーブルが存在するかどうかはどうやってしらべるのでしょう?
SQL="Table Exist('NorthWind')"
conn.execute(SQL)
みたいなものだと予想してます
911 名前: デフォルトの名無しさん [sage] 投稿日: 04/12/11 11:50:22
>910
え?
912 名前: デフォルトの名無しさん [sage] 投稿日: 04/12/11 11:54:37
>>910
ADOXを使うとか。
ADODB.ConnectionオブジェクトのOpenSchemaメソッドを使うとか。
新着レス 2004/12/11(土) 12:16
913 名前: デフォルトの名無しさん [sage] 投稿日: 04/12/11 12:16:10
自己解決してたけどどーも


Const adSchemaTables = 20
rc = conn.openschema(adSchemaTables)
で、データベース内のいくつものテーブル名はコレクションとしてとりだされるから
rc("TABLE_NAME").valueをさらにFor EachとかDo whileで1個ずつとりだせた。


do until rc.eof
S+=rc("table_name").value
rc.movenext
loop

debug.print S

914 名前: デフォルトの名無しさん [sage] 投稿日: 04/12/11 12:56:56
>913
さすが

3221 ◆ExGQrDul2E:2006/05/27(土) 12:36:47 ID:MziW6YcM
データベースの中にどんなテーブルがあるか列挙したい場合がある。

dim Dt as new DataTable("Dt")
'Const adSchemaTables = 20
Dim ConnectionString As String = "Data Source=.\sqlexpress;Initial Catalog=MyDataBase;Integrated Security=SSPI;"
Dim conn As New SqlConnection(ConnectionString)

'Dt = conn.getschema(adSchemaTables)
conn.open
Dt = conn.GetSchema("Tables")
gridview3.DataSource=dt
gridview3.DataBind
conn.Close()

接続文字列にあるとおりMyDataBaseというデータベースのテーブル一覧を取得する例である。

次は各テーブルの構造を取得するコードを作ってみる。

3231 ◆ExGQrDul2E:2006/05/27(土) 13:22:15 ID:MziW6YcM
テーブルの構造取得は>>291に書いた。

ハードディスクの中身をしるにはフォルダの階層構造とフォルダの中のファイルを取得するわけであるが、
それと同じ要領でデータベースの構造とデータを取得したわけである。
これができれば、データベースの移動、コピー、バックアップができる。
したがって、SQL Server 2005 Express EditionからSQL Server 2000などへデータを移行できるようになった。

3241 ◆ExGQrDul2E:2006/05/27(土) 18:43:07 ID:MziW6YcM
.NET2.0でテーブル構造取得プログラムを作ってみた。
Dim ConnectionString As String = "Data Source=.\sqlexpress;Initial Catalog=DATABASE.MDF;Integrated Security=SSPI;"
Dim SQL As String = "Select Top 1 * From ESODATA"
Dim conn As New SqlConnection(ConnectionString)
Dim cmd As New SqlCommand(SQL, conn)
conn.Open()
Dim DR As SqlDataReader = cmd.ExecuteReader
DR.Read()
Dim schemaTable As DataTable = DR.GetSchemaTable()
Dim myRow As DataRow
Dim myCol As DataColumn
Dim SS As String = ""
For Each myRow In schemaTable.Rows
For Each myCol In schemaTable.Columns
SS = SS & myCol.ColumnName & " = " & myRow(myCol).ToString() & "<br>"
Next
SS += "----------------------------------------------" & "<br>"
Next
DR.Close()
conn.Close()
Label2.Text = SS

3251 ◆ExGQrDul2E:2006/05/27(土) 18:43:51 ID:MziW6YcM
↑を実行するとホームページにテー部構造が次のように表示される。
ColumnName = 日付
ColumnOrdinal = 0
ColumnSize = 8
NumericPrecision = 23
NumericScale = 3
IsUnique = False
IsKey =
BaseServerName =
BaseCatalogName =
BaseColumnName = 日付
BaseSchemaName =
BaseTableName =
DataType = System.DateTime
AllowDBNull = True
ProviderType = 4
IsAliased =
IsExpression =
IsIdentity = False
IsAutoIncrement = False
IsRowVersion = False
IsHidden =
IsLong = False
IsReadOnly = False
ProviderSpecificDataType = System.Data.SqlTypes.SqlDateTime
DataTypeName = datetime
XmlSchemaCollectionDatabase =
XmlSchemaCollectionOwningSchema =
XmlSchemaCollectionName =
UdtAssemblyQualifiedName =
NonVersionedProviderType = 4

3261 ◆ExGQrDul2E:2006/05/27(土) 18:46:54 ID:MziW6YcM
同じテーブルを自動的に作成するSQLを作りたい場合は上記情報をSQL文に挿入すればよい。

あるデータベースから別のデータベースにデータを移動させたい場合に移動ユーティリティが存在しない場合は
今回のように自分でデータ移動プログラムを書くということである。

3271 ◆ExGQrDul2E:2006/05/27(土) 20:39:42 ID:MziW6YcM
そしてこれがテーブルをつくるためのSQLである。

Dim ConnectionString As String = "Data Source=.\sqlexpress;Initial Catalog=DATABASE.MDF;Integrated Security=SSPI;"
TableName = ""
Dim SQL As String = "Create Table TABLU (Field1 datetime,Field2 nvarchar(50))" 'datetime型を作るときにはサイズを指定しない
Dim conn As New SqlConnection(ConnectionString)
Dim cmd As New SqlCommand(SQL, conn)
conn.Open()
Dim num As Integer = cmd.ExecuteNonQuery
conn.Close()

実行してからデータベースをみてみるとテーブルとフィールドがきちんと作成できたのが確認できる。

3281 ◆ExGQrDul2E:2006/05/27(土) 20:48:33 ID:MziW6YcM
これぐらいできるようになれば
どのメーカーのデータベースをつかってもよい。
上記プログラムでいつでも別のデータベースにデータを移動できるからだ。

3291 ◆ExGQrDul2E:2006/05/28(日) 00:51:04 ID:MziW6YcM
データベース構造のコピー実験

Dim TableName As String
TableName = "ACCESS"

Dim ConnectionString As String = "Data Source=.\sqlexpress;Initial Catalog=DATABASE.MDF;Integrated Security=SSPI;"
Dim SQL As String = "Select Top 1 * From " & TableName
Dim conn As New SqlConnection(ConnectionString)
Dim cmd As New SqlCommand(SQL, conn)
conn.Open()
Dim DR As SqlDataReader = cmd.ExecuteReader
DR.Read()
Dim schemaTable As DataTable = DR.GetSchemaTable()
Dim myRow As DataRow
Dim myCol As DataColumn
Dim SS As String = ""
Dim SQL2 As String
SQL2 = "Create Table " & TableName & " ("
For Each myRow In schemaTable.Rows
Dim c1 As Integer
If Not c1 = 0 Then
SQL2 += ","
End If
Dim DType As String = ""
Dim Size As Integer
For Each myCol In schemaTable.Columns 'AAAAAAAAAAAAAAAAAAAA
'SS = SS & myCol.ColumnName & " = " & myRow(myCol.ColumnName).ToString() & "<br>"

If myCol.ColumnName = "ColumnName" Then
SQL2 += myRow(myCol.ColumnName).ToString
End If

If myCol.ColumnName = "ColumnSize" Then
Size = myRow(myCol.ColumnName)
End If

If myCol.ColumnName = "DataType" Then
Select Case myRow(myCol.ColumnName).ToString
Case "System.String"
DType = "nvarchar"
SQL2 += " " & DType & "(" & Size & ")"
Case "System.Int64"
DType = "bigint"
SQL2 += " " & DType
Case "System.DateTime"

DType = "datetime"
SQL2 += " " & DType
End Select

End If
'サイズ取得のほうがタイプ取得より前なのでここに書くと失敗
'If myCol.ColumnName = "ColumnSize" Then
' If DType = "nvarchar" Then
' SQL2 += "(" & myRow(myCol.ColumnName).ToString & ")"
' Else
' End If
'End If

Next 'AAAAAAAAAAAAAAAAAAAA
SS += "----------------------------------------------" & "<br>"
c1 += 1
Next
SQL2 += ")"

DR.Close()
conn.Close()
Label3.Text = SQL2

Dim ConnectionString2 As String = "Data Source=(local);Initial Catalog=AoM;Integrated Security=SSPI;"
Dim conn2 As New SqlConnection(ConnectionString2)
Dim cmd2 As New SqlCommand(SQL2, conn2)
conn2.Open()
Dim num2 As Integer = cmd2.ExecuteNonQuery
conn2.Close()
'↑ここまでがコピー先データベースのテーブル設計が終わった段階である。つぎはデータのコピーを行う。

3301 ◆ExGQrDul2E:2006/05/28(日) 00:54:11 ID:MziW6YcM
今回はSQL Server Express 2005のテーブルをSQL Server 2000にコピーしてみた。
無事成功。
SQL Serverはバージョンが違うと互換性が乏しく自作のプログラムでデータ移行する必要があったのだ。

3311 ◆ExGQrDul2E:2006/05/28(日) 01:12:03 ID:MziW6YcM
そして、ローカルマシンにしか表示できないApp_Dataデータベースをサーバーに移してネットで公開できるようになったことも意味する。
マイクロソフトはローカルマシンでしか扱えないようにしたり、高いお金を払った製品はネットで扱えるなどの差別化をしているので
こんかいのサンプルを利用すれば最初は安いローカルマシンで開発して、将来サーバー製品を買ったときにデータを移行して外部公開できるのである。

3321 ◆ExGQrDul2E:2006/05/28(日) 01:15:39 ID:MziW6YcM
プログラミングする前に最初からサーバー向けのデータベースを用意しなくても済むというのは
金銭的にも労力的にも大きいはず。データベースコピープログラムが書けるからこその恩恵だ。

3331 ◆ExGQrDul2E:2006/05/28(日) 02:34:51 ID:MziW6YcM
フィールド名に予約語や数字のみの名前をつけたいときは[ ]でくくる。
If myCol.ColumnName = "ColumnName" Then
SQL2 += "[" & myRow(myCol.ColumnName).ToString + "]"
End If

3341 ◆ExGQrDul2E:2006/05/28(日) 04:17:57 ID:MziW6YcM
↑の方ではテーブルの構造をコピーしたので今度はデータをコピーするプログラム。
'データベースA→データリーダーに読み込み→データベースBに書き込み
ConnectionString = "Data Source=.\sqlexpress;Initial Catalog=DATABASE.MDF;Integrated Security=SSPI;"
ConnectionString2 = "Data Source=(local);Initial Catalog=AoM;Integrated Security=SSPI;"
SQL = "Select * From " & TableName
conn = New SqlConnection(ConnectionString)
conn2 = New SqlConnection(ConnectionString2)
cmd = New SqlCommand(SQL, conn)
conn.Open()
DR = cmd.ExecuteReader
DR.Read()
schemaTable = DR.GetSchemaTable()
SS = ""
Dim i As Integer

'For Each myRow In schemaTable.Rows
' SQL2 = "Insert into " & TableName & "("

' For Each myCol In schemaTable.Columns
' 'SS = SS & myCol.ColumnName & " = " & myRow(myCol).ToString() & "<br>"

' Next
' 'SS += "----------------------------------------------" & "<br>"
'Next
Dim SQL2b As String
'While DR.Read 'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW'いったんリードしてるのでここではリードしない
Do
SQL2 = "Insert into " & TableName & "("
SQL2b = ") Values ("
For i = 0 To DR.FieldCount - 1
If Not i = 0 Then
SQL2 += ","
SQL2b += ","
End If
SQL2 += "[" & DR.GetName(i) & "]"
'文字列は' 'で囲むので列のタイプがわからないといけない。
schemaTable = DR.GetSchemaTable()
For Each myRow In schemaTable.Rows
For Each myCol In schemaTable.Columns
If myCol.ColumnName = "DataType" Then
If myRow(myCol.ColumnName).ToString = "System.DateTime" Or myRow(myCol.ColumnName).ToString = "System.String" Then
If Not IsDBNull(DR(i)) Then
SQL2b += "'" & DR(i) & "'"
Else
SQL2b += "Null"
End If

End If
GoTo LandB
End If
Next
Next
LandB:
' If schemaTable.Rows(DR.GetName(i))("DataType") Then
'SQL2b += schemaTable.Rows(0)("DataType").ToString
Next
'GoTo LandA
SQL2 += SQL2b & ")"
cmd2 = New SqlCommand(SQL2, conn2)
conn2.Open()
num2 = cmd2.ExecuteNonQuery
conn2.Close()
'End While 'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
Loop While DR.Read
' GridView5.DataSource = DR
' GridView5.DataBind()
LandA:
DR.Close()
conn.Close()
Label3.Text = SQL2

3351 ◆ExGQrDul2E:2006/05/28(日) 04:21:01 ID:MziW6YcM
↑データをコピーするときはSQL のInsertコマンドを使ってみた。
こうしてテーブル構造もデータもコピーできたのであった。

336名無しさん:2006/05/29(月) 04:45:30 ID:x4fpfJRM
めでたし めでたし

3371 ◆ExGQrDul2E:2006/06/03(土) 00:30:00 ID:PfJOdz9g
     _____
   /。    \
  /        \
 / ┏━━━━━┓   コ
 |  ┃ ⊂⊃|⊃|   /
 |  ┃ | \__/| |   ホ
 \┃ \___ / |  /
   \        /

338名無しさん:2006/07/18(火) 17:55:34 ID:AUWg3sMw
http://ime.s2ch.net/log.php

3391 ◆ExGQrDul2E:2006/07/29(土) 02:10:27 ID:SEZ8PBeg
ファイルをゴミ箱に移動させる方法
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/SHFileOperation/

3401 ◆ExGQrDul2E:2006/08/04(金) 02:20:45 ID:SEZ8PBeg
パチンコおもすれーーーー

341名無しさん:2006/08/20(日) 07:24:45 ID:9yx2a7Ek
1って、>>338みたいなの作れる技量あるの?

3421 ◆ExGQrDul2E:2006/08/20(日) 10:46:33 ID:SEZ8PBeg
ノーコメント

3431 ◆ExGQrDul2E:2006/09/06(水) 01:32:00 ID:oJIhamyE
Visual Basic 言語リファレンス
ユーザー定義の日付/時刻書式 (Format 関数)
参照 使用例
すべて折りたたむ すべて展開 言語のフィルタ : すべて 言語のフィルタ : 複数 言語のフィルタ : Visual Basic 言語のフィルタ : C# 言語のフィルタ : C++ 言語のフィルタ : J# 言語のフィルタ : JScript
Visual Basic (宣言)
Visual Basic (使用法)
C#
C++
J#
JScript

ユーザー定義の日付/時刻書式を作成するときに使用できる文字を次の表に示します。以前のバージョンの Visual Basic とは異なり、これらの形式指定文字の大文字と小文字は区別されます。

文字 説明
(:)
時刻の区切り記号。ロケールによっては、時刻の区切り記号を表すのに別の記号が使用されます。時刻の区切り記号は、時刻値を表すときに、時、分、および秒を区切ります。書式指定された出力で、実際に時刻の区切り記号として使用される記号は、システムの LocaleID 値によって決まります。

(/)
日付の区切り記号。ロケールによっては、日付の区切り記号を表すのに別の記号が使用されます。日付の区切り記号は、日付値を表すときに、年月日を区切ります。書式指定された出力で、実際に日付の区切り記号として使用される記号は、ロケールによって決まります。

(%)
後に続く文字には関係なく、次の文字を 1 文字書式指定として読み取る必要があることを示すために使用します。1 文字書式指定をユーザー定義の書式として読むことを示すためにも使用します。詳細については、以下の説明を参照してください。

d
先行するゼロを付けずに日付を表示します (たとえば、1)。ユーザー定義の数値書式でこれが唯一の文字である場合は、%d を使用します。

dd
先行するゼロを付けて日付を表示します (たとえば、01)。

ddd
曜日を短縮形で表示します (たとえば、Sun)。

dddd
曜日をそのまま表示します (たとえば、Sunday)。

M
先行するゼロを付けずに月を表示します (たとえば、1 月は 1)。ユーザー定義の数値書式でこれが唯一の文字である場合は、%M を使用します。

MM
先行するゼロを付けて月を表示します (たとえば、01/12/01)。

MMM
月を短縮形で表示します (たとえば、Jan)。

MMMM
月をそのまま表示します (たとえば、January)。

gg
時代/年号を示す文字列を表示します (たとえば、A.D.)。

h
先行するゼロを付けずに、時を 12 時間制で表示します (たとえば、1:15:15 PM)。ユーザー定義の数値書式でこれが唯一の文字である場合は、%h を使用します。

hh
先行するゼロを付けて、時を 12 時間制で表示します (たとえば、01:15:15 PM)。

H
先行するゼロを付けずに、時を 24 時間制で表示します (たとえば、1:15:15)。ユーザー定義の数値書式でこれが唯一の文字である場合は、%H を使用します。

HH
先行するゼロを付けて、時を 24 時間制で表示します (たとえば、01:15:15)。

m
先行するゼロを付けずに、分を表示します (たとえば、12:1:15)。ユーザー定義の数値書式でこれが唯一の文字である場合は、%m を使用します。

mm
先行するゼロを付けて、分を表示します (たとえば、12:01:15)。

3441 ◆ExGQrDul2E:2006/09/06(水) 01:32:14 ID:oJIhamyE

s
先行するゼロを付けずに、秒を表示します (たとえば、12:15:5)。ユーザー定義の数値書式でこれが唯一の文字である場合は、%s を使用します。

ss
先行するゼロを付けて、秒を表示します (たとえば、12:15:05)。

F
秒の小数部を表示します。たとえば、ff は 100 分の 1 秒を表示し、ffff は 10,000 分の 1 秒を表示します。ユーザー定義の書式では f 記号を 7 つまで使用できます。ユーザー定義の数値書式でこれが唯一の文字である場合は、%f を使用します。

T
12 時間制を使用し、午前は大文字の A、午後 (11:59 P.M. まで) は大文字の P を表示します。ユーザー定義の数値書式でこれが唯一の文字である場合は、%t を使用します。

tt
12 時間制を使用し、午前は大文字の AM、午後 (11:59 P.M. まで) は大文字の PM を表示します。

24 時間制を使用するロケールの場合、何も表示されません。

y
先行するゼロを付けずに、年を 1 桁の値 (0 〜 9) で表示します。ユーザー定義の数値書式でこれが唯一の文字である場合は、%y を使用します。

yy
先行するゼロを付けずに、年を 2 桁の数値で表示します。

yyy
年を 4 桁の数値書式で表示します。

yyyy
年を 4 桁の数値書式で表示します。

z
標準時との時差を先頭にゼロのない数値として表示します (たとえば、-8)。ユーザー定義の数値書式でこれが唯一の文字である場合は、%z を使用します。

zz
標準時との時差を先頭にゼロのある数値として表示します (たとえば、-08)。

zzz
標準時との時差を完全な形で表示します (たとえば、-08:00)。


使用例
December 7, 1958, 8:50 PM, 35 seconds を使ったユーザー定義の日付/時刻書式の例を次に示します。

形式 表示
M/d/yy
12/7/58

d-MMM
7-Dec

d-MMMM-yy
7-December-58

d MMMM
7 December

MMMM yy
December 58

hh:mm tt
08:50 PM

h:mm:ss t
8:50:35 P

H:mm
20:50

H:mm:ss
20:50:35

M/d/yyyy H:mm
12/7/1958 20:50

3451 ◆ExGQrDul2E:2006/09/06(水) 20:52:28 ID:oJIhamyE
文字コードの判別
http://dobon.net/vb/dotnet/string/detectcode.html

346あぼんぬ:あぼんぬ
あぼんぬ

3471 ◆ExGQrDul2E:2007/11/05(月) 01:29:51 ID:PDUtZqkU
2chブラウザはWindowsフォームというアプリケーションなわけであるが、フォームの表示位置をコードで操作するプログラムを自作したので解説する。

3481 ◆ExGQrDul2E:2007/11/05(月) 01:33:07 ID:PDUtZqkU
FormのStartPositionプロパティにManualやCenterScreenという値があるが、今回は自分が指定した位置にフォームを表示させるのでManualにしておく。
そしたらForm1_Loadのプロシージャに次のコードを書く。

3491 ◆ExGQrDul2E:2007/11/05(月) 01:38:05 ID:PDUtZqkU
じゃなかった、フォームの中にリンクラベルコントロールをずらずらとならべるプログラムを書く。
リンクラベルを実行時に動的に生成する場合はコード中でリンクラベルの表示位置をX,Yで指定する。
VB6ではLabel1.LeftとLabel1.TopというプロパティがありX,Yの指定はカンタンだったが.NETではさてどうするかという問題。

3501 ◆ExGQrDul2E:2007/11/05(月) 01:39:20 ID:PDUtZqkU
Dim LinkLove As LinkLabel = New LinkLabel
LinkLove.Name = "LinkLove" & i
LinkLove.AutoSize = True
LinkLove.Text = S2(0)
If i = 1 Then 'HHHHHHHHHHHHHHHHHHHHHH
PX = 0 : PY = 0
Else 'HHHHHHHHHHHHHHHHHHHHHH
Dim o As Object
Dim LB As LinkLabel
For Each o In Me.Controls 'DDDDDDDDDDDDDDDDD
If o.Name = "LinkLove" & i - 1 Then
'CType
LB = CType(o, LinkLabel)
PX = 0
PY = LB.Location.Y + LB.Height
End If 'HHHHHHHHHHHHHHHHHHHHHH
Next 'DDDDDDDDDDDDDDDDD
End If
LinkLove.Location = New Point(PX, PY)
'→エラー'Form1.Controls.Add(LinkLove)'↓Form1でなくMeキーワードを使う
Me.Controls.Add(LinkLove)
'LinkLove.Visible = True
'ListBox2.Items.Add(FileString)
AddHandler LinkLove.LinkClicked, AddressOf LinkLove_LinkClicked

3511 ◆ExGQrDul2E:2007/11/05(月) 01:44:30 ID:PDUtZqkU
Dim LinkLove As LinkLabel = New LinkLabel
LinkLove.Name = "LinkLove" & i
LinkLove.AutoSize = True
LinkLove.Text = "←リンクラベルに表示する文字列"

ここらへんは動的にコントロールを作っている部分。Dimでコントロールを宣言したら各種プロパティの設定を行っている。
.Name コントロールの一意に定める名前で、コントロールにアクセスするときはこのNameを指定する。いわゆるコントロールのIDなので私の好みをいうと.IDと言うプロパティにしてほしかったがVB.NETでは.Nameである。
.AutoSize 表示文字の長さにあわせて自動伸縮
.Text 表示文字列

3521 ◆ExGQrDul2E:2007/11/05(月) 01:47:39 ID:PDUtZqkU
Dim o As Object
Dim LB As LinkLabel
For Each o In Me.Controls
If o.Name = "LinkLove" & i - 1 Then
'CType
LB = CType(o, LinkLabel)

ここらへん、凝っているが、LinkLabel1.Text="abc"ならできるが、
i=1
(LinkLabel & i).Text="abc"という変数iを使ったコントロールの指定ができないから特殊テクニックを使った。

3531 ◆ExGQrDul2E:2007/11/05(月) 02:15:41 ID:PDUtZqkU
ここらへんがフォームの位置座標を扱っているコード。
PY = LB.Location.Y + LB.Height

LinkLove.Location = New Point(PX, PY)
など。
Locationというキーワードを使うのもVB6.0の頃にはプログラマーが書かないでも自動でやってくれていたし、
New Point(PX, PY)というのも目新しく使いこなすのに慣れが必要だとおもふ

3541 ◆ExGQrDul2E:2007/11/11(日) 09:21:30 ID:PDUtZqkU
New Point(PX, PY)
などは構造体という言葉が思いつくであろう。

3551 ◆ExGQrDul2E:2007/11/12(月) 02:47:09 ID:PDUtZqkU
VB6.0のヘルプファイルはMSDNライブラリという膨大なものだが、
このライブラリのナンギガバイトものデータをハードディスクにインストールする余裕が無い場合は
Windowsスクリプトのヘルプファイルをマイクロソフトからインストールすると10MBぐらいですむようだ

3561 ◆ExGQrDul2E:2008/02/10(日) 12:04:43 ID:YyQ2hNss
VB.NETであるフォームから別のフォームのテキストボックスに値を表示するコード
Dim frmDebug As Form = New Debug
frmDebug.Controls.Item("RTB1").Text = S
frmDebug.Show()

3571 ◆ExGQrDul2E:2008/02/10(日) 19:23:55 ID:YyQ2hNss
ディレクトリの中身ごとディレクトリをコピーするすばらしぃメソッド
My.Computer.FileSystem.CopyDirectory(コピー元ディレクトリ, コピー先ディレクトリ, True)
第3引数のTrueはコピー先に同じ名前のものがあったら上書きするためのもの

3581 ◆ExGQrDul2E:2008/02/10(日) 19:35:22 ID:YyQ2hNss
しかし、あるファイルのみをコピーしたいなど細かい制御が必要な場合は
やはりファイルを1コずつ扱うのだ。
-----------------------------------
Dim Moto As String
Dim Saki As String
Moto = "コピー元ディレクトリ"
Saki = "コピー先ディレクトリ"
Dim di As New DirectoryInfo(Moto)
Dim fi As FileInfo() = di.GetFiles()
Dim fiTemp As FileInfo

For Each fiTemp In fi
My.Computer.FileSystem.CopyFile(Moto & "\" & fiTemp.Name, Saki & "\" & fiTemp.Name, True)
Next fiTemp

3591 ◆ExGQrDul2E:2008/02/11(月) 13:04:41 ID:YyQ2hNss
Process.Startという便利なメソッドがある。
便利だが、単にProcess.Start("http://〜")でサイトを開くとすでに開いているウィンドウに新たなページが表示されてしまう。
新しいウィンドウにページを表示したくば次のようにするのだ。
Dim URL As String
Dim i As Integer
Try
i = ListBox1.SelectedIndex
URL = URLDt.Rows(i)("URL")


Dim myProcess As New ProcessStartInfo
myProcess.FileName = BrowserPath
myProcess.Arguments = URL
myProcess.CreateNoWindow = False
myProcess.UseShellExecute = False
myProcess.Verb = "open"
Process.Start(myProcess)
Catch

End Try

3601 ◆ExGQrDul2E:2008/02/20(水) 12:31:25 ID:RHGP7ogY
これはWEBサイトを作る時の話題だが、
ASP.NETでサイトを作ったらデフォルトではすべてのページはUTF-8であり、日本語の文字はきれいに表示されてくれない。
各ページのBODYタグにスタイルシートで文字コードを指定するのは常道ではあるが、各ページに記述するのはとても大変なことである。
そこで、サイト全体をシフトジスにするには、ルートフォルダにあるweb.configの
<system.web>
</system.web>
の間に
<globalization requestEncoding="shift_jis" responseEncoding="shift_jis" />
と書くのだ。
参考ページ
http://www.atmarkit.co.jp/fdotnet/aspexp/aspexp14/aspexp14_03.html


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板