1

いくつかのランダムな値と現在のシステム日時を特定の間隔でデータベースに自動的に挿入するビジュアル C++ プログラムを作成したいと考えています。これには srand() 関数を使用します。これを行う方法がわかりません。winFormプロジェクトを使用してこれを達成し、タスクスケジューラを使用して30分ごとに実行するようにスケジュールしましたが、問題は、空のフォームがポップアップするたびに、それを閉じない限り値が入力されないことです。私が必要とするのは、これらすべてが独自に発生し、ウィンドウが空としてポップアップしないことです。これを達成するための正しい方法はwinformですか?そうでない場合は、どの種類のプロジェクトを選択する必要がありますか。多分タイマー、スレッド...私はこれに比較的慣れていないので、いくつかの光を当ててください。

よろしく

PS:コードは次のとおりです

 String^ constring = L"datasource=localhost;port=3306;username=root;password=root";
 MySqlConnection^ conDataBase = gcnew MySqlConnection(constring);
 MySqlCommand^ cmdDataBase = gcnew MySqlCommand("INSERT INTO `data`.`test` (`datetime`,`temp`,`pressure`) VALUES ('"+dt+"','"+rand_temp+"','"+rand_pressure+"');",conDataBase);  MySqlDataReader^ myReader;



try{
         conDataBase->Open();
         myReader = cmdDataBase->ExecuteReader();
        //MessageBox::Show("Data Inserted");
         while(myReader->Read()){



     }
    }catch(Exception^ex){
     MessageBox::Show(ex->Message);
 }


Application::Exit();

上記のコードは私のフォームロードメソッドの中にあります

4

3 に答える 3

2

winforms プロジェクトの代わりにコンソール アプリケーション プロジェクトを使用する

于 2013-07-10T07:15:34.043 に答える
1

より深い洞察のためにコードを共有してください。

プログラムはDBに値を書き込んでいますが、接続を閉じるか手動でコミットするまで、DBは更新されません(別名コミットされます)。もう一度コードを共有してください。フォームが必要ない場合は、winforms を使用しないことをお勧めします。さまざまな方法で DB の更新を実現できます。たとえば、sleepスレッドが時々機能するように使用できます(スリープメソッドで彼に与えた量によって異なります)。

とにかく、私たちがあなたを助けることができるように、私たちにもっと情報を提供してください

編集済み

トランザクションをコミットするためにcmdDataBase->ExecuteReader();使用した後。MySQLConnection.commit()フォームの作成ではなく、すべてのコードをメイン関数に取り込んでください。フォームはまったく必要ないようですね。

必要な場合は (ここを参照) 、Sleep メソッドを使用してしばらく待機するか、Google で検索してください。もっと何か?

于 2013-07-10T06:53:58.443 に答える