ミスチルの大名曲の数々が配信決定!! 31日間無料!!【PR】

かなり古い環境なのですが、Visual Basic 2008 にて勉強を始めた初心者です。ネットの記事を参考にしながら勉強しているのですが、データベースのデータをTextBoxに入力された値で検索であいまい検索して表示させる方法が分りません。似たような記事があったのですが環境が違う為か上手く出来ませんでした。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.在庫表TableAdapter.Fill(Me.Database4DataSet1.在庫表)
Form1は上記のようになっております。

ここからは、Visual Basic 中学校 のサイトのコピペです。LIKE前の品名と書き換えただけです。

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

Dim Table As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
Dim View As DataView = Table.DefaultView

View.RowFilter = "品名 LIKE '" & TextBox1.Text & "%'"

End Sub

エラー:型 'System.Windows.Forms.BindingSource' のオブジェクトを型 'System.Data.DataTable' にキャストできません。

何となく入れ替えたりしてみましたが、上手く出来ませんでした。

テーブルはID、品番、品名、在庫数です
Form1にはDataGridViewとTextBoxとButtonのみの配置のシンプルなものを考えております。
品名をあいまい検索したいです。
クエリビルダの品名フィルタ欄に何かを入れるのは理解したのですが、上手く出来ません

どなたか手直ししていただけませんでしょうか?
また、今後自分の為になるようにわかりやすい参考本等、紹介していただけませんでしょうか?
まずはSQL等きちんと理解してからやらなくてはいけないのでしょうが、サンプルをいじりつつ、本で構造を理解して行ければいいななどと考えております。
繰り返し同じようなものを作ってみて、徐々にレベルアップしてゆきたいです。

なぜ、2008なのかと言うと、実はプログラムに挑戦しようと思いVisual Studioを奮発して購入したのですが、勉強する時間が足りずに放置しておりました。最近時間が出来たので、きちんと勉強したいと思い再挑戦を始めました。初歩過ぎて馬鹿にされるかも知れませんが、どうか助けて下さい。

質問者からの補足コメント

  • 答えが出そうも無いので別の所に投稿します、ありがとうございました。

      補足日時:2016/01/01 04:18

このQ&Aに関連する最新のQ&A

A 回答 (1件)

回答が難しいです。



>何となく入れ替えたりしてみましたが、上手く出来ませんでした。
 プログラムは「何となく入れ替えたりしてみましたが、・・・」では組めませんし動きません。まず設計をしたり処理の流れを追っていきます。

>入力された値で検索であいまい検索して表示させる方法が分りません。
 「あいまい検索」って簡単に言われても・・・。
 本来は難易度がむちゃくちゃ高い内容だったりもします。

 一致検索は可能でしょうか?

2008に拘るのであればこういった書籍なのだろうか?自身は中身を確認していないので無闇とは薦めません。興味がありましたら書店へどうぞ。

http://www.amazon.co.jp/%E7%8B%AC%E7%BF%92Visual …


 何かと便利な逆引き辞書です。
>VisualBasic2008逆引き大全555の極意

http://www.amazon.co.jp/VisualBasic2008%E9%80%86 …


 参考になればと思います。
    • good
    • 0
この回答へのお礼

元旦早々、ありがとうございます。さっそくアマゾンで注文しました。

全くの初心者でありますので。コピペのみで試しているところです。
とりあえず、データベースの接続までしか出来ません。
そんな感じなので、サンプルいじりをしております。
一致検索の方法も判りません。本日もブックオフに行って数冊買って読んでます。現在は子供と一緒で、ちょっと動いたら嬉しくて次も頑張ろう・・・な感じです。

お礼日時:2016/01/01 00:38

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

Q【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。

表題の通りですがやり方がよくわかりません。
データベースに接続し、
SQLで重複しない値を取り出すところまではできています。

SQL=SELECT DISTINCT FieldName FROM TableName

VB6の時はこんなソースでした
Do Until rs.EOF
   Combo1.AddItem.Fields("FieldName")
   rs.MoveNext
Loop

VB2005ではどう書くのでしょう?
よろしくご教授ください。

Aベストアンサー

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)
  Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"
  Dim conn As New OleDbConnection(connectionString)
  Dim query As New OleDbCommand(sql, conn)

  Try
    conn.Open()
    Dim reader As OleDbDataReader = query.ExecuteReader()
    While (reader.Read())
      Me.ComboBox1.Items.Add(reader.Item("FieldName"))
    End While
    reader.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  Finally
    conn.Close()
  End Try

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc...続きを読む

QSQLでテキストボックスの文字を前方一致検索をするには?

visual basic2005 を使ってSQLのデータを検索するプログラムを作っています。
テキストボックスに入力された文字を検索したいのですが、
構文がうまくいかずに困っています。
dim txt as string = textBox1.text
"SELECT * FROM tesut WHERE line LIKE '" & txt & "'"
このようにline行にtxtの値が含まれているものを検索したいです。
完全一致ではなく前方一致にしたいのですが、その文がうまくかけなくて困っています。
どうかアドバイスをお願いします

Aベストアンサー

dim txt as string = textBox1.text
"SELECT * FROM tesut WHERE line LIKE '" & txt & "%'"

でどうでしょうか。

例えば、
like 'ky%'  kyで始まるもの
like '%ky%'  kyを含むもの

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。

QVB.NET2005 DataGridViewでレコードを絞り込んで表示

Form1のTextboxより入力した数字を元にForm2のload時にoracleDBをselectしDataGridviewのテーブルの中に作成した値と一致するものを絞り込んで表示したいと考えております。
メニューのプロジェクトからDataSetを選択し、必要なDBを選択しTableadapter等も利用しています。
DBから読み込んだものをそのまま表示するだけという事は出来ました。
テキストやネットを調べながら色々試してみましたが、うまくいかず煮詰まっています。
お力を貸してください。よろしくお願いします。

Aベストアンサー

お世話になります。

TableAdapter から取ってきた DataTable を元に
DataView を使って絞り込めばよいのでは?

Dim dt As DataTable = New DataTable
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("FRUIT", GetType(String))

dt.Rows.Add(New Object() {1, "りんご"})
dt.Rows.Add(New Object() {2, "もも"})
dt.Rows.Add(New Object() {3, "かき"})
dt.Rows.Add(New Object() {4, "みかん"})

Dim dv As DataView = New DataView(dt)
dv.RowFilter = "FRUIT LIKE '%ん%'" '絞り込み

Me.DataGridView1.DataSource = dt '全件
Me.DataGridView2.DataSource = dv '絞り込まれた結果(りんごとみかん)

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/129dgfilter/dgfilter.html

お世話になります。

TableAdapter から取ってきた DataTable を元に
DataView を使って絞り込めばよいのでは?

Dim dt As DataTable = New DataTable
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("FRUIT", GetType(String))

dt.Rows.Add(New Object() {1, "りんご"})
dt.Rows.Add(New Object() {2, "もも"})
dt.Rows.Add(New Object() {3, "かき"})
dt.Rows.Add(New Object() {4, "みかん"})

Dim dv As DataView = New DataView(dt)
dv.RowFilter = "FRUIT LIKE '%ん%'" '絞り込み...続きを読む

Qテキストボックスにデータベースの値を反映させるには

とても初歩的な質問だと思いますが、回答よろしくお願いします。

データベースに保存した値を更新するページのテキストボックスに、データベースの現在値を反映させたいです。
使っている本には、フォーム要素のvalue属性に対応するフィールド値を反映させる、と書いてあるのですが、その通りにやってもできません。

edit.php
<?php
try {
$db = new PDO('mysql:host=●●;dbname=●●;charset=utf8', '●●', '●●');
$stt = $db->prepare('SELECT name, email, password FROM `users` WHERE number = :number');
$stt->bindValue(':number', $_GET['number']);
$stt->execute();
} catch(PDOException $e) {
die('Error:'.$e->getMessage());
}
?>
<?php
/*
print($_GET['number']);
*/
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>インフォメーション</title>
</head>
<body>
<h3>あなたの登録情報</h3>
<form method="POST" action="dbconnect4.php">
<input type="hidden" id="number" name="number" maxlength="3"
value="<?php print($row['number']); ?>" />
<div class="container">
<label for="name">ユーザ名</label><br/>
<input type="text" id="name" name="name" size="10" maxlength="20"
value="<?php print($row['name']); ?>" />
</div><br />
<div class="container">
<label for="email">メールアドレス</label></br />
<input type="text" id="email" name="email" size="30" maxlength="100"
value="<?php print($row['email']); ?>" />
</div><br />
<div class="container">
<label for="password">パスワード</label><br />
<input type="password" id="password" name="password" maxlength="20"
value="<?php print($row['password']); ?>" />
</div><br /><br />
<input type="submit" name="update" value="更新する" />
<input type="submit" name="delete" value="削除する"
onclick="return confirm('本当に削除してよろしいですか?')" />
</form>
</body>
</html>


information.php
<?php
try {
$db = new PDO('mysql:host=●●;dbname=●●;charset=utf8', '●●', '●●');
$stt = $db->prepare('SELECT name, email, password FROM `users` WHERE email = :email AND password = :password ');
$stt->bindValue(':email', $_POST['email']);
$stt->bindValue(':password', $_POST['password']);
$stt->execute();
} catch(PDOException $e) {
die('Error:'.$e->getMessage());
}
?>
<?php /*
print($_POST['email']);
print($_POST['password']); */
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>インフォメーション</title>
</head>
<body>
<h3>あなたの登録情報</h3>
<table border="1">
<tr>
<th>ユーザ名</th><th>メールアドレス</th><th>パスワード</th><th></th>
</tr>
<?php while ($row = $stt->fetch()) { ?>
<tr>
<td><?php print($row['name']); ?></td>
<td><?php print($row['email']); ?></td>
<td><?php print($row['password']); ?></td>
<td><a href="edit.php?number=<?php print($row['number']); ?>">編集する</a></td>
</tr>
<?php } ?>
<br /><br />
</body>
</html>



information.phpの編集する、というリンクからedit.phpに飛ぶようになっています。
information.phpの前の画面でパスワードとメールアドレスを入力し、それらが一致したらinformation.phpでレコードを抜き出すという仕様になっています。

回答よろしくお願いします。

とても初歩的な質問だと思いますが、回答よろしくお願いします。

データベースに保存した値を更新するページのテキストボックスに、データベースの現在値を反映させたいです。
使っている本には、フォーム要素のvalue属性に対応するフィールド値を反映させる、と書いてあるのですが、その通りにやってもできません。

edit.php
<?php
try {
$db = new PDO('mysql:host=●●;dbname=●●;charset=utf8', '●●', '●●');
$stt = $db->prepare('SELECT name, email, password FROM `users` WHERE number = :number');
$stt...続きを読む

Aベストアンサー

>しかし、ここでのnumberというフィールドだけきちんと定義されません。

そういうSQL文を書いているからです。

>$stt = $db->prepare('SELECT name, email, password FROM `users` WHERE number = :number');

$row['number']でなく$_GET['number'](同じ内容)を使うか、SQL文を

$stt = $db->prepare('SELECT * FROM `users` WHERE number = :number');

としてください。普通は取得する列名を書き出すのも面倒なので select * from ~ としますねぇ(あとで項目が増えても大丈夫だし)。

QTextBoxに半角数字のみの入力しかできないようにしたい

タイトルどおりです。
フォームに貼り付けた、TextBoxに、半角数字のみしか入力できないようにしたいです。
000000~999999までのコード(数字)を入力させるようにするわけですが、そのままだと半角英数も全角も入力できてしまいます。

GrapeCity社製のカスタムコントロール「InputMan」の“Number”を用いると簡単なのですが、これだとカーソルがボックス内の右端にきて、一の位から入力が始まってしまいます。
数字は、ボックス内の左側から入力されていくようにしたいのですが、“Number”だとなんか出来なさそう・・・?
(“Number”で左側から入力できるならそれがいいのですが)

そこで、TextBoxを使うことにしたのですが、TextBoxだと、半角数字のみしか入力できないような制限がかけるのかが、わかりません。

もし、お分かりの方がいらっしゃいましたら、ご教授下さいませ。

Aベストアンサー

コピペですみません。
VB6だと、

Private Sub TextBox_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyBack, Asc("0") To Asc("9"), Asc("-"), Asc(".")
Case &H1 ' Ctrl + A
TextBox.SelStart = 0
TextBox.SelLength = Len(TextBox.Text)
Case &H3 ' Ctrl + C
Case &H16 ' Ctrl + V
Case &H18 ' Ctrl + X
Case &H1A ' Ctrl + Z
Case Else
KeyAscii = 0
End Select
End Sub

で、いかがでしょうか。

コピペですみません。
VB6だと、

Private Sub TextBox_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyBack, Asc("0") To Asc("9"), Asc("-"), Asc(".")
Case &H1 ' Ctrl + A
TextBox.SelStart = 0
TextBox.SelLength = Len(TextBox.Text)
Case &H3 ' Ctrl + C
Case &H16 ...続きを読む

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

QC# ログイン画面からメイン画面への画面遷移について

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示することがある為)

---------------------------------------------------------------------
private void LoginButton_Click(object sender, EventArgs e)
{
   /* ログイン処理 */

   //ログイン成功時
   //メイン画面インスタンス生成
   MainForm mainForm = new MainForm();
   //ログイン画面インスタンスを代入
   mainForm.loginForm = this;
   //メイン画面表示
   mainForm.Show();
   //ログイン画面非表示
   this.Visible = false;
}
---------------------------------------------------------------------

また上記の方法だとメイン画面を閉じても、アプリケーションは終了しない為
メイン画面の閉じるボタンを押した場合に以下の処理を行っています。

---------------------------------------------------------------------
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
   //ログイン画面クローズ
   loginForm.Close();
}
---------------------------------------------------------------------

以上、宜しくお願いします。

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示す...続きを読む

Aベストアンサー

#2です。
最初にログイン画面のみを表示したいなら
メイン画面のForm_menu_Load(loadイベント処理)
の中で、ログイン画面をモーダル表示し、
NGならメイン画面のcloseのほうがよいかも知れません。

Qテキストボックスにクエリ結果を表示させたい

フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。

クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。

テーブルは
フィールド1|フィールド2
  A   |  10
  B   |  20
  C   |  30
  D   |  40
のような簡単なものです。

テキストボックスBのコントロールソースに
「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。

どのようにやればよいのでしょうか?

Aベストアンサー

クエリは必要ありません。

フォームのレコードソースに無いデータを表示させる
場合には DLookUp を使います。

テキストボックスBのコントロールソースに
=DLookUp("フィールド2","テーブル名","フィールド1='" & [テキストボックスA]) & "'"

上記は「フィールド1」が文字列型の場合です。

数値型の場合は次のようになります。
=DLookUp("フィールド2","テーブル名","フィールド1=" & [テキストボックスA])

DLookUp 関数は コントロールソースに限らず
VBA でも使用し、Access では、非常に使用頻度の高いものです。

ヘルプで調べて、ぜひマスターしてください。

もし Access でなかったら、このレスは無視して下さい。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング