C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: C# Postgre URL、リストボックスへ [1]


(過去ログ 113 を表示中)

[トピック内 30 記事 (21 - 30 表示)]  << 0 | 1 >>

■66846 / inTopicNo.21)  Re[19]: C# Postgre URL、リストボックスへ格納、表示
  
□投稿者/ ?O?R (1回)-(2013/05/30(Thu) 22:23:48)
No66830 (こりんご さん) に返信
> 2013/05/30(Thu) 10:16:59 編集(投稿者)
> ■No66829 (外山 さん) に返信
>>■No66807 (こりんご さん) に返信
> >>2013/05/29(Wed) 10:27:35 編集(投稿者)
> >>2013/05/29(Wed) 09:31:21 編集(投稿者)
> >>
> >>■No66806 (外山 さん) に返信
>>こりんご様
>>やはり、うまく行かないのです…
>>
>>>⇒提示したコードから何か変更・追加・削除があったのなら
>>>その部分を調べたほうが良いのかも?
>>
>>PostgreSQLのテーブルはitem_data1〜item_data5を用意しております。
>>列1は「url」列2は「date」です。
>>
>>テーブルの記述の部分も以下のように書いております。
>>↓
>>sql = string.Format("INSERT INTO item_data{0} VALUES(@url,@date)", i);
>>
>>検討はずれですかね?
>>
>>
>>>全てのリストボックスを調べるまで接続を切るようには
>>>していないはずですが、その辺に手を加えられたとか?
>>特に何か加えた覚えはないのです。
>>
>>>一度メッセージが出るとしたら
>>>{ } の組み合わせにどこかズレがあるのかも知れません。
>>これは出ていません。
>>
>>>for (int i = 1; i <= 5; i++)
>>>{
>>>このループの中に
>>>MessageBox.Show("登録完了!!");
>>>scn.Close();
>>>これが入ってしまっているなら
>>>そのエラーはあり得るかも知れません。
>>ループの外に出ているのでこれも大丈夫です。
>>
>>私こそ初心者的な質問ですいません。
>>確認の程、宜しくお願い致します。
>
>
>>sql = string.Format("INSERT INTO item_data{0} VALUES(@url,@date)", i);
>>PostgreSQLのテーブルはitem_data1〜item_data5を用意しております。
>>列1は「url」列2は「date」です。
> テーブル名と列名及び書き込むSQL文を上記のようにして検証しました。
> 結果としては問題なく書き込みは出来ました。
> なのであとはそちらの環境に何かあるのか???
> としか思えないのですが、原因となるものについては思いつかないですね。
> ⇒コードを提示すると何故か”迷惑者?”と言われて書き込めないのですが・・・・
>
> あとこちらはスタンドアローンで検証していますので、
> もしサーバーが別の所にあるとしたらそっち方面はまったくの未経験で
> わからないですね。

そうですか〜
こちらの環境もサーバーとか繋いでないのでスタンドアローンです。
item_data1のテーブルだけに入れれば問題なく動くんですけどね…
う〜ん。
引用返信 編集キー/
■66847 / inTopicNo.22)  Re[20]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (8回)-(2013/05/30(Thu) 23:03:41)
No66846 (?O?R さん) に返信
> そうですか〜
> こちらの環境もサーバーとか繋いでないのでスタンドアローンです。
> item_data1のテーブルだけに入れれば問題なく動くんですけどね…
> う〜ん。

例えば
MessageBox.Show(scn.State.ToString());
scm.ExecuteNonQuery();
これで接続状態(Openなら繋がっている)を確認してみる。
⇒Closedが出れば切れているんでしょう。

あとはメッセージボックスの場所を色々変えて
Closedが消える箇所(切断される場所)
消えない箇所(切断されない場所)の境を
探してみるとかかな?
引用返信 編集キー/
■66848 / inTopicNo.23)  Re[3]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ 外山 (3回)-(2013/05/30(Thu) 23:05:11)
こりんご様、皆様

■66787でくれた回答について&追加質問

重複チェックの部分で先日質問しましたが、ちゃんとお伝えできてなかったようなので、再度質問させて頂きます。

現在はリストボックスごとに、同じURLを入れようとすると
MessageBox.Show("この記事は既に登録されています");
と表示がでます。
つまり、リストボックス1に入れたURLはリストボックス2に入れることが出来てしまっていますが、以下が理想の形です。

1、リストボックス1〜5の中に1つも重複が無いようにしたいです。

2、そして、リストボックス1〜5に入れた順番に、WebBrouzerコントロールで一定の時間間隔(例:2分とか)で表示させたいのです。

以上2つの質問です。
どちらか1つでもいいので、どなたかご回答頂けないでしょうか?
宜しくお願い致します。


引用返信 編集キー/
■66849 / inTopicNo.24)  Re[4]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (9回)-(2013/05/30(Thu) 23:59:48)
2013/05/31(Fri) 15:13:28 編集(投稿者)
2013/05/31(Fri) 14:38:50 編集(投稿者)
<pre><pre>2013/05/31(Fri) 07:12:16 編集(投稿者)

<pre><pre>■No66848 (外山 さん) に返信
> こりんご様、皆様
> 
> ■66787でくれた回答について&追加質問
> 
> 重複チェックの部分で先日質問しましたが、ちゃんとお伝えできてなかったようなので、再度質問させて頂きます。
> 
> 現在はリストボックスごとに、同じURLを入れようとすると
> MessageBox.Show("この記事は既に登録されています");
> と表示がでます。
> つまり、リストボックス1に入れたURLはリストボックス2に入れることが出来てしまっていますが、以下が理想の形です。
 
> 1、リストボックス1〜5の中に1つも重複が無いようにしたいです。
については出来ていたんですけど
なぜかコードの書き込みが出来なくて。

using Npgsql; //PostgreSQL
using NpgsqlTypes; //PostgreSQL
using System.Text.RegularExpressions; //正規表現
using System.Collections; //ArrayList

namespace FormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        ArrayList urlArray = new ArrayList();

        private void Form1_Load(object sender, EventArgs e)
        {

            for (int i = 1; i <= 5; i++)
            {
                (Controls["listBox" + i] as ListBox).AllowDrop = true;
                (Controls["listBox" + i] as ListBox).DragEnter += new DragEventHandler(listBox_DragEnter);
                (Controls["listBox" + i] as ListBox).DragDrop += new DragEventHandler(listBox_DragDrop);
            }
        }

        private void listBox_DragEnter(object sender, DragEventArgs e)
        {
            //URLのみ受け入れる//@ITより
            if (e.Data.GetDataPresent("UniformResourceLocator"))
                e.Effect = DragDropEffects.Link;
            else
                e.Effect = DragDropEffects.None;
        }

        private void listBox_DragDrop(object sender, DragEventArgs e)
        {
            //ドロップされたリンクのURLを取得する//@ITより
            String url = e.Data.GetData(DataFormats.Text).ToString();
            //結果を表示
            ((ListBox)sender).Text = url;
            //MessageBox.Show(url);
            //ドロップされたデータがString型か調べる
            if (e.Data.GetDataPresent(typeof(String)))
            {
                ListBox target = (ListBox)sender;
                //ドロップされたデータ(String型)を取得
                String itemText =
                    (String)e.Data.GetData(typeof(String));

                //ドロップされたデータがまだ未登録の場合
                if (urlArray.IndexOf(url) == -1)
                {
                    //ドロップされたデータをリストボックスに追加する
                    target.Items.Add(url);
                    //urlArrayにデータを登録する
                    urlArray.Add(url);
                    
                    //MessageBox.Show("表示");
                }
                else
                {
                    //既に登録されていたら
                    MessageBox.Show("この記事は既に登録されています");
                }
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {

            NpgsqlCommand scm;
            NpgsqlConnection scn = new NpgsqlConnection(@""); //データベース名注意
            String sql;
            Regex re = new Regex(@"&nbsp;(?<hiduke>.+?)配信", RegexOptions.Singleline);
            scn.Open();

            for (int i = 1; i <= 5; i++)
            {
                if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
                {
                    sql = string.Format("INSERT INTO item_data{0} VALUES(@url,@date)", i);
                    scm = new NpgsqlCommand(sql, scn);
                    NpgsqlParameter sParam1 = new NpgsqlParameter("@url", NpgsqlDbType.Varchar);
                    NpgsqlParameter sParam2 = new NpgsqlParameter("@date", NpgsqlDbType.Varchar);

                    for (int m = 0; m <= (Controls["listBox" + i] as ListBox).Items.Count - 1; m++)
                    {

                        String url1 = (string)(Controls["listBox" + i] as ListBox).Items[m];
                        sParam1.Value = url1;

                        //WebClientの作成
                        System.Net.WebClient wc = new System.Net.WebClient();
                        //文字コードを指定
                        wc.Encoding = System.Text.Encoding.GetEncoding(51932);
                        //HTMLソースをダウンロードする
                        string sorce = wc.DownloadString(url1);
                        //後始末
                        wc.Dispose();

                        if (re.IsMatch(sorce))
                        {
                            sorce = re.Match(sorce).Groups["hiduke"].Value;
                        }
                        else
                        {
                            sorce = "None";
                        }

                        sParam2.Value = sorce;
                        scm.Parameters.Clear();
                        scm.Parameters.Add(sParam1);
                        scm.Parameters.Add(sParam2);
                        MessageBox.Show(scn.State.ToString());
                        scm.ExecuteNonQuery();
                    }

                    scm.Dispose();
                }
            }

            MessageBox.Show(string.Format("登録完了!!\r {0}件を登録しました!!",urlArray.Count.ToString()));
            urlArray.Clear();
            scn.Close();
        }
    }
}

ただし登録完了後も重複をチェックするようには
作ってませんけど。。。。

> 2、そして、リストボックス1〜5に入れた順番に、WebBrouzerコントロールで一定の時間間隔(例:2分とか)で表示させたいのです。
については完全にお手上げです。

もしかするとBackgroundを使えば良いのかとかSleep関数でいけるのかとか、
思いはあるんですけど形には出来てません。
⇒リストボックスのグループ毎にを無視するなら
ArrayListの配列とSleep関数辺りでいけそうな気もしているのですが。。。</pre></pre>

【追記】
なんとかコードにはなったのですがなぜか迷惑投稿者で載せる事はできませんので、
暫く待ってみましょう。
</pre></pre>

引用返信 編集キー/
■66870 / inTopicNo.25)  Re[5]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ 外山 (4回)-(2013/05/31(Fri) 20:44:07)
こりんご様
ありがとうございます。
お待ちしております。
引用返信 編集キー/
■66871 / inTopicNo.26)  Re[6]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (10回)-(2013/05/31(Fri) 21:14:02)
No66870 (外山 さん) に返信
> こりんご様
> ありがとうございます。
> お待ちしております。

やはり投稿が出来ないので
http://yahoo.jp/box/zwgE28
こちらに入れておきました。
⇒行数に制限でもあるのかな?
引用返信 編集キー/
■66873 / inTopicNo.27)  Re[1]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ Jitta (41回)-(2013/05/31(Fri) 22:54:27)
Jitta さんの Web サイト
No66703 (外山 弘 さん) に返信

これっていったい、「なにが」したいんですかね?
一番「実現したいこと」は、なんですか?
たとえば、ここに PostClassifier_EXE.zip ってのを置いておきました。
http://sdrv.ms/10N4zMh
これを解凍して実行すると、左側に Yahoo の 経済、エンタメ、スポーツ がリストされています。
どれかを選ぶと、右側に一覧が表示されます。
右側のどれかをダブルクリックすると、下に表示されます。

「一番実現したいこと」は、この、「右側をダブルクリック」を、上から順に自動で行うことですか?


あ、作りかけで放置しているものを少しいじったものなので、他のボタンやタブをいじらないでくださいね。
引用返信 編集キー/
■66883 / inTopicNo.28)  Re[2]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ 外山 (5回)-(2013/06/01(Sat) 17:50:30)
No66873 (Jitta さん) に返信
> ■No66703 (外山 弘 さん) に返信
>
> これっていったい、「なにが」したいんですかね?
> 一番「実現したいこと」は、なんですか?
> たとえば、ここに PostClassifier_EXE.zip ってのを置いておきました。
> http://sdrv.ms/10N4zMh
> これを解凍して実行すると、左側に Yahoo の 経済、エンタメ、スポーツ がリストされています。
> どれかを選ぶと、右側に一覧が表示されます。
> 右側のどれかをダブルクリックすると、下に表示されます。
>
> 「一番実現したいこと」は、この、「右側をダブルクリック」を、上から順に自動で行うことですか?
>
>
> あ、作りかけで放置しているものを少しいじったものなので、他のボタンやタブをいじらないでくださいね。

Jitta様
これすごいですね。
ありがとうございます。
見させて頂きました。

>「一番実現したいこと」は、この、「右側をダブルクリック」を、上から順に自動で行うことですか?
はい。だいたい合っています。リストボックスに入れた順番にURLへアクセスして自動で画面表示させたいのです。

PostClassifier_EXEを参考にお話させて頂きますと、
これはすでにリスト化されていますね。
そうではなくリストは使用者がヤフーニュースへアクセスし、記事のURLを1つ1つ「リストボックスへドラッグして」入れることで作成されるようにしたいのです。
気に入ったニュースの記事のみを個人の判断で分類しながら、リストボックス1〜5に入れる感じです。
そして、入れた順番に画面に表示(一定間隔)させたいのです。
途中でストップも出来るとうれしいです。



引用返信 編集キー/
■66886 / inTopicNo.29)  Re[3]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ きのくにや (1回)-(2013/06/01(Sat) 23:46:10)
No66883 (外山 さん) に返信
ちょっと質問が分からない。
引用返信 編集キー/
■66899 / inTopicNo.30)  Re[3]: C# Postgre URL、リストボックスへ
□投稿者/ Jitta (42回)-(2013/06/03(Mon) 19:52:32)
Jitta さんの Web サイト
2013/06/03(Mon) 21:43:02 編集(投稿者)

No66883 (外山 さん) に返信
> PostClassifier_EXEを参考にお話させて頂きますと、
> これはすでにリスト化されていますね。
> そうではなくリストは使用者がヤフーニュースへアクセスし、記事のURLを1つ1つ「リストボックスへドラッグして」入れることで作成されるようにしたいのです。

 PostClassifier は、RSS を登録しておき、自分で作った分類に分類に振り分けることを目的としています。
「記事の URL を1つ1つ「リストボックスへドラッグ」」する意図はなんでしょうか。
ちなみに、PostClassifier は、その時に配信中の RSS を読み取るので、今日と明日で(配信されているものが変わっていれば)表示される記事項目は変わります。


 なんにしても URL をドラッグする方法は、すでに示されていますよね。
私からは、「5」という数字にこだわらないことを考えるように提案します。
「5」が6になっても100になっても、データそのものの扱いを変える必要はないはずです。


一応、ソースも公開しているので、... http://sdrv.ms/16vJ8aw
ただし、先の EXE とは、データファイルの保存場所が異なっています。

 コードでは、FeedReader プロジェクトの SyndicatedItem が、一つ一つの記事になります。
それを多数集めるのが、SyndicatedItemList です。
ここの Add メソッドで、「すでに登録済みのアイテムは登録しない」ということをしています。
リストが複数あるのであれば、リストのリストを作れば良いでしょう。
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -