質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

2036閲覧

VB.netでSQLiteを用いたSQL文の実行ができません。

bonabona

総合スコア6

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/02/14 05:50

編集2020/02/14 06:58

前提・実現したいこと

VBでSQLiteをもちいたデータベースの作成を行っています。
2列の表を作成し、SQLで2列目に存在する特定の文字(文字列)の登録数を取得したいです。
ここで、SQLiteCommandを用いて、1列目から特定文字の登録数を取得することはできるのですが、
なぜか2列目のカラムを指定するとできません。。。いったいなぜでしょうか?
SQLiteを初めて使用するので作法もわからず、いろいろ検索しましても解答を見つけられませんでした。
どなたかご教示願えませんでしょうか。
宜しくお願い致します。

該当のソースコード

vb

1以下が作成した表です。 2"CREATE TABLE Sample (QUESTION NVARCHAR(10),ANSWER NVARCHAR(10))" 3 4以下データ取得ができたコードです 5Dim aaa As New SQLiteCommand("SELECT count(*) FROM Sample WHERE QUESTION='AAA'", con) 6 7以下データ取得ができなかったコードです 8Dim aaa As New SQLiteCommand("SELECT count(*) FROM Sample WHERE ANSWER ='AAA'", con) 9 10追加点 11データベースの中身ですが、画像クイズアプリをVBフォームで開発していまして、 12その問題と回答を表に収めていくものです。問題は文ではなく画像で、 13プログラム内部で画像に対する正解名を持っています。回答は毎回同じ5択の選択肢となっています。 14ここで回答ボタンを押すたびにSQLのInsert文が発行され、問題の画像名と回答が2列表に追加されます。 15ここから回答列の特定の名称のみの回答数を取得したいと考えています。 16以下表のイメージです。 17QUESTION  ANSWER 18-------- ------- 19AAA     BBB 20CCC     DDD 21AAA     AAA 22DDD     DDD 23BBB     AAA 24 25例えばAAAと回答した回数を取得したいのと、最終的に、問題AAAに対してAAAやBBBやCCCなど、 26回答のばらつきを見たいと思っています。 27SQL文は、"SELECT count(*) FROM Sample WHERE QUESTION='BBB' AND ANSWER='AAA' 28こちらを本来は実行したかったのですが、どうもANSWER列(2列目)が認識されていないのかなと。。。 29以下、データ登録コードです。 30ここで使われる変数questとmyansが表に収まる文字列でして、フォーム上のオブジェクトの 31textプロパティが格納されています。 32"ダミーデータ登録(テーブルへINSERT)" 33 Private Sub InsertData() 34 'データベースを操作する 35 Using con As New SQLiteConnection("Data Source=" & DATABASE_NAME) 36 'データベースへアクセスする 37 con.Open() 38 39 '生成したラベル名称をテーブルへINSERT 40 Using cmd As SQLiteCommand = con.CreateCommand() 41 cmd.CommandText = "INSERT INTO Sample (QUESTION,ANSWER) VALUES('" & quest & "', '" & myans & " ')" 42 cmd.ExecuteNonQuery() 43 End Using 44 End Using 45 End Sub 46 47以下、データ取得コードです() 48"登録されているデータを取得" 49 Private Function GetData() 50 'データベースを操作する 51 Using con As New SQLiteConnection("Data Source=" & DATABASE_NAME) 52 'データベースへアクセスする 53 con.Open() 54 '登録されているデータ数を取得 55 Dim aaa As New SQLiteCommand("SELECT count(*) FROM Sample WHERE QUESTION='AAA' AND ANSWER='AAA'", con) 56 57<<<以下1行再追加です>>> 58Label1.Text = CStr(aaa.ExecuteScalar()) 59このラベル1に取得した値を表示させて確認をしようとしましたが、これが0のまま変わらずできなくてご相談した次第です。 60 61 62 63 End Using 64 End Function 65

試したこと

ひとまずデータベースの作成時、1列目と2列目を入れ替えてみました。
"CREATE TABLE Sample (ANSWER NVARCHAR(10),QUESTION NVARCHAR(10))"
すると
"SELECT count() FROM Sample WHERE ANSWER='AAA'"・・・これはOKとなりました。
"SELECT count(
) FROM Sample WHERE QUESTION='AAA'"・・・これはだめ

どうも2列目の取得に問題があるような気がします。。。

また、上のSQL文は両方phpmyadminで実行できましたので、やはりSQLiteの使い方なのかなと思っています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/14 06:03

Sample テーブルの中身がどうなっているのか、どういう結果を期待しているのか、実際にどういう結果になったのかを書きませんか? あと、コードも部分的ではなく、ある程度全体が分かるものをアップしてください。
bonabona

2020/02/14 06:39

SurferOnWww様 ご返信ありがとうございます。 実はフォームでアプリを開発していまして、表の中身は毎回起動ごとに作成されるものです。なので具体的な結果というものを表現させにくく、簡易的に書いてしましました。申し訳ございませんでした。 追記させていただきましたので、ご確認いただければ幸いです。 宜しくお願い致します。
guest

回答1

0

ベストアンサー

SQLiteはNVARCHARが使えないのではないですか?
TEXT型で作成してみてください。

提示されたコードのINSERT文の'" & myans & " 'の部分にスペースが入っていてSELECTの条件にマッチしていません。
こちらに掲載する上でのミスであればいいのですが、見直してみてください。

投稿2020/02/14 06:10

編集2020/02/14 07:04
YAmaGNZ

総合スコア10469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bonabona

2020/02/14 07:01

YAmaGNZ様 TEXT型にしましても結果は変わらずでした。 ご返信ありがとうございます。
YAmaGNZ

2020/02/14 07:02

すみません。回答を修正しますので見てみてください。
bonabona

2020/02/14 07:15

YAmaGNZ様 ”と’の間に半角スペースが入っていました...。修正後動作確認しますと見事に動きました! ありがとうございます!本当に感謝いたします。 こんな単純なミスのためにお時間使っていただき大変失礼いたしました...。 SQL文ではスペース一つが致命的になるということを実感いたしました。 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問