スキップしてメイン コンテンツに移動

投稿

2014の投稿を表示しています

Qt Creator でデータベースソフトを作る!第9回

前回は不可解なエラーが出るところで終了したが、マシンを替えたり、OSを積み替えたりすると、異なる挙動を示すことが分かった。  マシンを替るやOSを替るといったことをすると改善するという点である。 結局のところ、OS自体に問題があるのではないかと思い、思い切ってOSとマシンを替て作業を進めることにした。 変更後のシステムは、Fedora20をインストールすることにした。LXDEデスクトップにし、軽快に動くようにした。 以後、不可解な挙動を示すことはなくなったわけだが、そろそろ完成させたいところなので、仕上げてみました。 上の画像は分析値を検索結果と顧客名、依頼者名を表示させたところ。 一番苦労したところは、列名と分析値のテーブルを一致させる所かな。 とりあえず完成ということで。 ソースコード: https://drive.google.com/file/d/0B0oSFZs-dbRZenlkSHR5clJwU1U/view?usp=sharing

Qt Creator でデータベースソフトを作る!第8回

行き詰まっていた今後の展開。 とりあえず作ることにしました。 列数は86列でテーブルを作成し、挿入する形にしました。 ところが、SQLは実行されていても、テーブルには反映されていない。 ログを見ても実行されていることになっているので、原因は不明です。 途方に暮れています。  図1:入力フォーム 図2:クエリログを表示させたところ ソースコード: https://drive.google.com/file/d/0B0oSFZs-dbRZenF4dmZEcjh4Z1k/view?usp=sharing

Qt Creator でデータベースソフトを作る!第7回

前回は、ユーザアカウントの設定画面を作成しましたが、今回は、休日設定、保管期間の設定、依頼者の検索及び登録、顧客の検索及び登録を作成しました。これまでの応用により作成可能。  今後の課題は、データーベースの中身をどうしたいかを考えねばならないことと、どう表示させたいかを考えなければならない。しかしながら、私自身の能力を大きく越えてしまっていると感じているのが実状。独習でやっているため、ここで手詰まりが現状です。更新できたら、次回があります。ここまで作ったのなら、完成させたいというのが、私自身の気持ちです。以上。 図1:設定画面を出したところ。 図2:休日設定画面を表示させたところ。  図3:休日登録画面を表示させたところ 図4:保管期間設定と変更画面を表示させたところ  図5:依頼者検索が面を表示させたところ  図6:依頼者登録画面及び編集画面を表示させたところ  図7:顧客検索画面及び顧客編集画面を表示させたところ。 ソースコード: https://drive.google.com/file/d/0B0oSFZs-dbRZckxKLVZLcWFmU28/view?usp=sharing qt 

Qt Creator でデータベースソフトを作る!第6回

前回はデーターベースにアクセスができないことを取り上げたが、今回は、ユーザー名及びパスワードを直接入力した値で使用することで、データーベースとのアクセスが加納となった。また、ユーザー管理用のテーブルを用意し、データーの有無で認証する方法なら目標となる形に近い形になることが可能にした。しかしながら、MySQLサーバー側で認証するわけではないので、達成感が少し萎えている。 まず、ユーザー登録つまり、insert文の実行とselect文の実行を試みた。後者は、ユーザー認証の際に使用した方法を用い入れば、容易に作業が進み、前者は、後者の応用で可能にした。 ユーザー管理の一覧表には、ユーザーIDとともに編集と削除ボタンを配置する形にすることにしたが、なかなかうまくいかず、以下の方法で可能にした。 do{             //Result->relative(i);             if(Result->getString(2)!=""){                 QTableWidgetItem *item_1=new QTableWidgetItem(Result->getString(1).c_str());                 QTableWidgetItem *item_2=new QTableWidgetItem(Result->getString(2).c_str());                 ui->tableWid...

Qt Creator でデータベースソフトを作る!第5回

前回はホストアドレスの取得について記述しましたが、サーバー名は自身のホストアドレスではないことを頭から抜け落ちていました。つまり、サーバー名=ホスト名ではないという事です。今回はサーバーから直接アクセスしているため、localhostとすればよかったことになります。 次に今回ぶち当たった難題は、Qt自身がもつアクセス方式とMySQL Connectorを用いてCまたはC++でアクセスする方法についてです。 どのやり方もコンパイルエラーとなります。やり方は、OSをインストール後、Fedoraであればyumを用いて、Debianであればaptituteを用いて必要なパッケージをインストールしただけです。しかしながら、このやり方だと、うまく行かないことが判明し、必要なパッケイージはソースコードからコンパイルしてインストールすることにしました。すると、今までコンパイルエラーと出ていたのが、一変してコンパイルがうまく行きました。 現在の進捗は、ログイン画面を表示させてTrue or False までです。  起動させるとまずはこんな感じになります。↑  ログインに失敗するとエラーメッセージが出ます。↑ ログインに成功するとまず、メインメニューが出るようにしました。↑ ソースコード: https://drive.google.com/file/d/0B0oSFZs-dbRZdzI5djVNNmoxc1U/edit?usp=sharing

Qt Creator でデータベースソフトを作る!第4回

MySQLを利用してログイン画面で認証しようという試みは、つい先日、乗り越えることができました。 問題箇所は複数あり、データ型が違っていたことが原因のようです。 MySQL_Query: /Setting m_UserName     this->UserName_tmp=UserName.toStdString().c_str(); <--QString~stringに変換     this->m_UserName=QString(UserName_tmp.constData());<-String~QStringに変換     UserName_save.append(m_UserName.toStdString());<-グローバル変数に代入     this->m_db.setUserName(m_UserName);<-QSqlDatabaseに登録 PassWordはUserNameと同様に変換すればいいので割愛します。 データベース名とデータベースドライバー名は直接代入することにしました。 理由は、この2つは同じ値を使うためです。なので割愛したいと思います。 ホスト名は、直接代入する方法がありますが、動的でないので、ここは複数のパソコンからアクセスすることを想定し、動的にしようと思います。     this->fd=socket(AF_INET,SOCK_DGRAM,0);     this->ifr->ifr_ifru.ifru_addr.sa_family=AF_INET;     this->m_HostAddr->append(inet_ntoa(((struct sockaddr_in *) &     ifr->ifr_ifru.ifru_addr)->sin_addr));     this->HostAddr_Len=this->m...

Qt Creator でデータベースソフトを作る!第3回

前回のコードを作り直して、コードの中身を整理しました。前回のミスは、全く初歩的ミスで只単に入力ミスであることが判ました。しかしながら、コードは記載しませんが、プログラムを実行すると「突然終了しました」と出力がされてプログラムが終了してしまいました。デバックモードでスッテプインを進めていくと、サブルーチンで動かそうとしているファイルMySQL_Query.cppの10行目で「システムからのシグナルを感知しました」と出て一切進まない状況になってしまいました。 ユーザー名とパスワードをポインターで渡そうとしているので恐らくは「このあたりかな」というめぼしがあります。しかしながら、自分ではどうすることもできないので、現状、手助けを求めるほかありません。どのように直せばよろしいのでしょうか。 ソースコード: https://drive.google.com/file/d/0B0oSFZs-dbRZdzYwWFBBMHlFRjA/edit?usp=sharing

Qt Creator でデータベースソフトを作る!第2回

前回のミスは初歩的ミスであることが分かった。 void Widget::on_pushButton_clicked() {     if (MySQL.Login() == "True"){         MySQL->Login()に変更すればよかった         this->close();     } } しかし、また、問題が発生。 エラー内容: Cannot convert 'QSqlDatabase' to 'QString* ' in assignment m_Status=MySQL->Login(this->m_User, this->m_Password); エラー箇所: void Widget::on_pushButton_clicked() {     this->m_User=this->ui->lineEdit->text();     this->m_Password=this->ui->lineEdit_2->text();     m_Status=MySQL->Login(this->m_User,this->m_Password); } いろいろいじってみて現在のコードになりました。はっきり言ってお手上げです。 自力で動作できないことは何とも言えない悲しさです。 Help Me!! ソースコード: https://drive.google.com/file/d/0B0oSFZs-dbRZOUpDZ2dtSE8wajg/edit?usp=sharing

Qt Creator でデータベースソフトを作る!第1回

前回の記事でエクセルでサンプル管理ソフトを作成した。そこで、次はQtを利用したサンプル管理ソフトを作ってみようと思いたった。 まず、ソフトのインストールから説明する。 ソフトのインストール インストールするソフトは以下の通りです。 Fedora20 MySQL Qt-5.3.1 Creator 2.3 但し、Creatorは最新のものを使うが、はパッケージ化されていないので、オフィシャルサイトよりダウンロードをしてインストールする。 MySQL以外はインストール画面に従っていく又はyumコマンドを実行すればインストールは完了するので割愛します。 MySQLのインストール yum install community-mysql*  を実行する。 systemctl start mysqld.servce及びsystemctl enable mysqld.serviceを実行する。これでサービスが開始され、起動時サービスが起動されます。  /etc/my.cnfを編集し、サービスを再起動させます。 innodb          InnoDBストレージエンジンで起動させます。 inno-file-per-table     既存の保存先を利用する場合必要 character-set-server=utf8          Unicode UTF8を利用する場合必要 MySQLユーザーがrootでMySQLにログインし、パスワードを設定する。 mysql -u root -p password:PassWord select user,host,password from mysql.user   ユーザー名とホスト名とパスワード                     ...

エクセルで管理ソフトを作る!

最近仕事でやっていると、こういう管理ソフトがあればいいなと思ったことが幾度とあります。 いろいろインターネットで探してもフリーソフトではなく、シェアウェアならあるなんてことがちらほらあります。管理ソフトに資金を投じられない会社にいた私としては、「ないのなら作ってしまえばいい」という考えに至りました。エクセルVBAで管理ソフトが作れないかを検討しました。 ちなみに現在私は、過酷な労働条件で鬱になり、休養とるため退職しました。回復したらプログラマーの仕事に就きたいと考えています。 私自身、なかなかよくできたかなと思っています。 Fils: https://drive.google.com/file/d/0B0oSFZs-dbRZTVBZam82dGZjaUU/edit?usp=sharing

Qt Creatorを使ってみる4 テキストエディターを作る

前回までは、「ハローワールド」を表示させるプログラムでしたが、今回は、QPlainTextEditを使って、テキストエディターを作ってみようと思います。 ウィンドウはメインウィンドウを使用。クラスQMainWindow、QMenu、QManuBar、QPlainTextEditを実装します。 最後にQHBoxLayoutで整えてやります。 これで実行すると形は様になります。 次にメニューバーに作りたいメニューを追加し、追加したメニューに実行したい項目を追加していきます。例えば、新規・保存・名前を付けて保存といった具合です。 追加した項目をconnectで継いでいけば、それらしいプログラムが出来上がります。 一番苦労したのは、入力内容の保存と開くです。 保存するには、QFileDialog::getFileNameを使う方法がありますが、初心者なので、子の方法を使わずに基本に忠実に別ウィンドウを開くようにしました。 最初にSaveAsDialog=new QFileDialog()に始まります。 ウィンドウタイトルはsetWindowTitle、保存するディレクトリーの指定するのにはsetDirectoryを使用、この時ディレクトリーを指定する際、QDirを使用し、QDir::homepath()を呼び出すようにします。 フィルター名の選択項目はsetNameFilter(QString)【任意のフィルター名を入れる】を使用。既にファイルが存在していたら確認ウィンドウを出すようにsetNameFilterDetailsVisibleをtrueに設定。 これだけではAccept時どのような操作するか指定していないので、setAcceptMode(SaveAsDialog->AcceptSave)とするとAccept時「保存」ボタンが表示される。 SaveAsDialog->exec()が実行されるとどのように処理するかをif文を使って入力していく。 QStringList StrList=SaveAsDialog->selectedFilters()で選択内容を呼び出す。 配列なのでこのままでは使えないため、StrList.at(0)で抽出する。 例えば、QFile SaveFile(StrList.at(0))と入力...