- 投稿日:2020-04-04T23:12:21+09:00
MySQLエラー
https://gyazo.com/f195fd0a8fbb6c3d52e4fb46746af2f8
priceのカラムがない
追加して解決ローカル環境
作業中のディレクトリ
カラム追加
rails g migration Addカラム名To追加元テーブル名 追加するカラム名:型
rails g migration AddNicknameToUsers nickname:string
rails db:migrateカラム削除
例:rails g migration Removeカラム名From削除元テーブル名 削除するカラム名:型
rails g migration RemoveNameFromTweets name:string
rails db:migrate本番環境
作業中のディレクトリ
mysql -u root 起動
SHOW DATABASES; データベース参照
USE データベース名; データベースに移動
SHOW TABLES; テーブル参照
ALTER TABLE テーブル名 ADD カラム名 カラムの型; カラム追加
ALTER TABLE テーブル名 DROP カラム名; カラム削除
- 投稿日:2020-04-04T22:22:24+09:00
【PHPメモ】(恐竜)プルダウンを生成する関数
1.はじめに
DBのSELECT結果でプルダウンを作成するコードを記述するのが面倒だ。
htmlタグの間にPHPを埋め込む、インデントがややこしい。
さらにコードの量が増えていく。
下記の画像は前に作った改良恐竜登録ツール(PHP+MYSQL版)の一部。
このハイブリッド選択のコードが結構、ぐちゃぐちゃになっていた。生成元タイプ1、生成元タイプ2はセレクト状態を維持するプルダウン、
生成元恐竜1と生成元恐竜2は、生成元タイプで選択した項目により変化するプルダウン。
上記のプルダウンを生成する関数を作って、共通プログラム(common_dino2.php)に置けば、効率的に開発が
進められるのではないか(開発とは言えないけど)
勉強もかねて作ってみた。2.選択状態を維持するプルダウンを生成する関数
common_dino2.php//$name_pulldown_type:プルダウンのname、$str_query0:SQL、$select_type0:プルダウンで選択されたタイプ function Make_pulldown_selectedType($db0,$name_pulldown_type,$str_query0,$select_type0) { $result_a=$db0->prepare($str_query0); $result_a->execute(); echo "<select name=\"$name_pulldown_type\" style=\"width: 100px\">"; while($data0=$result_a->fetch(PDO::FETCH_ASSOC)){ //$select_type0が$data0['type0']と等しい場合 if($select_type0 == $data0['type0']){ echo "<option selected>".$data0['type0']."</option>"; //$select_type0が$data0['type0']と等しくない場合 }else{ echo "<option>".$data0['type0']."</option>"; } } echo "</select><br>"; }3.生成元タイプで選択した項目により変化するプルダウン
common_dino2.php//$name_pulldown:プルダウンのname、$str_query0:SQL、$val1:str_query0のプレースホルダ function Make_pulldownDname($db0,$name_pulldown,$str_query0,$val1) { $result_a=$db0->prepare($str_query0); $result_a->bindparam(1,$val1); $result_a->execute(); echo "<select name=\"$name_pulldown\" style=\"width: 280px\">"; while($data0=$result_a->fetch(PDO::FETCH_ASSOC)){ echo "<option>".$data0['dname0']."</option>"; } echo "</select><br>"; }4.呼び出し元コード例
select_dinotype3.php//色々省略 <?php }else{ echo "<h1>ハイブリッド選択</h1>"; require "common_dino2.php"; $dbname="db_dino"; $dbh= NewPdo($dbname); $query_type0 = "SELECT DISTINCT type0 from tbl_dino Where type0 != 'unique'"; ?> <?php $stype1=isset($_POST['dtype01'])?htmlspecialchars($_POST['dtype01']):null; $stype2=isset($_POST['dtype02'])?htmlspecialchars($_POST['dtype02']):null; ?> <form action="select_dinotype3_mysql.php" method="post"> 生成元タイプ1: <?php Make_pulldown_selectedType($dbh,"dtype01",$query_type0,$stype1); ?> 生成元タイプ2: <?php Make_pulldown_selectedType($dbh,"dtype02",$query_type0,$stype2); ?> <input type="submit" value="タイプ確定"> </form> <?php $dbname="db_dino"; $dbh= NewPdo($dbname); $query_select_type0 = "SELECT dname0 from tbl_dino where type0 = ?"; ?> <form action="hibrid_dino2_mysql.php" method="post"> 生成元恐竜1: <?php Make_pulldownDname($dbh,"dname1",$query_select_type0,$stype1); ?> 生成元恐竜2: <?php Make_pulldownDname($dbh,"dname2",$query_select_type0,$stype2); ?> //色々な処理5.結果
(1).ハイブリッド選択時の画面
(2).ハイブリッド選択時の画面のソース
(3).生成元1タイプと生成元2タイプを選択時の画面
(4).生成元1タイプと生成元2タイプを選択時のソース
赤枠で選択されたタイプが、青枠では赤枠で選択されたタイプに属する恐竜名が表示されている。
- 投稿日:2020-04-04T20:33:17+09:00
LibreOffice で MySQL連動 PDF帳票を作る
LibreOfficeを使い、データベース連動してPDF帳票を作るシステムを作ってみます。
Draw で領収書を作る
これを使います。
Drawだと好きな位置に好きな体裁で「領収書」と書ける。
ネ申エクセルよりもずっと直感的。以下に述べる手法は、Writer でも Calc でもできる。けれども人類は Draw の可能性に気づくべき。
注意
センタリングや右揃えの必要な書式は、図形描画で透明&透明枠の四角を作り、その中にテキストを配置します。
自動で日付を入れる
先のものの日付を ##TODAY## としておきます。
キーワードを ## に挟み込む形にしました。
##TODAY##として、## で囲んだキーワードを置き換えることにします。
なぜ ## を使うのか
なぜ %% とかではなく、 ## を使うか? 20年ほど前から似たようなものを作ってましたが、その当時の SJIS や EUC などの文字コードでは %% だと誤動作することがあったからです。
今では UTF-8 が前提となり、## でなくても十分動作すると思いますが以前の流儀で ## としています。操作
作業フォルダを決めて、odgファイルをそこに保存します。
そのフォルダ上で作業をします。まずは、odgファイルから、content.xmlを抽出し、名前を original.xml と変更します。
$ unzip test1.odg content.xml $ mv content.xml original.xml加工しやすくするためにxmllint をかけ、sed でキーワードを変更します。
$ xmllint --format original.xml | sed s/##TODAY##/"`date +%Y年%-m月%-d日`"/g > content.xmlちなみに、2020/04/04 みたいにするには以下の通り
$ xmllint --format original.xml | sed s/##TODAY##/"`date +%Y年\\\/%m\\\/%d`"/g > content.xmlできた content.xml を odgファイルに収容する。
$ zip test1.odg content.xmlpdf変換
$ soffice --headless --convert-to pdf test1.odgデータベースと連動する
mysqlに入っているデータを引っ張ってくるようにしてみます。
$ sudo pip3 install mysql-connector-python3として、以下の db.py を作っておく。
import sys import mysql.connector import re global キー global キーフィールド キー=sys.argv[2] キーフィールド="会員番号" def dbload(キー,テーブル,フィールド): db=mysql.connector.connect(host="127.0.0.1", user="webdb", password="password") cursor=db.cursor() cursor.execute("USE test") db.commit() sql=('SELECT '+フィールド+' FROM '+テーブル+' where 会員番号="'+キー+'"') cursor.execute(sql) i=(cursor.fetchone()) cursor.close() db.close() return(i[0]) def replaceline(source): p = re.search(r'##SQL:(.+)@(.+)##',source) if p != None: テーブル=(p.groups()[1]) フィールド=(p.groups()[0]) # print(テーブル) # print(フィールド) ret = dbload(キー,テーブル,フィールド) p = re.sub(r'##SQL:(.+)@(.+)##',ret,source) return(p) else: return(source) #source = ' ##SQL:会員@フリガナ## 様' #dist=replaceline(source) #print(dist) filename = sys.argv[1] with open(filename, 'r') as f: fileText = f.read() replacedtext = replaceline(fileText) print(replacedtext)あとは、同じように
$ unzip test1.odg content.xml $ xmllint --format content.xml > original_xml $ python3 db.py original_xmllint.xml 4 | sed s/##TODAY##/"`date +%Y年%-m月%-d日`"/g > content.xml $ zip test1.odg content.xml updating: content.xml (deflated 85%) $ soffice --headless --convert-to pdf test1.odgとすると pdf ファイルができる。
- 投稿日:2020-04-04T16:57:23+09:00
mysqlでパスワードを変更したい時
- 投稿日:2020-04-04T15:54:52+09:00
MySQLでcsvファイルをテーブルにインポートする
ログイン時、オプションを指定
mysql -u root -p --local-infile=1データベースを選択
use hogedbインポートするコマンド
LOAD DATA LOCAL INFILE './huga.csv' --インポートしたいcsvファイル INTO TABLE hogetable --インポートするテーブル FIELDS TERMINATED BY '\t' --インポートしたいcsvの区切り文字 LINES TERMINATED BY '\n'; --csvの行区切り指定おまけ
インポート前に、格納済みのデータをクリアしたいときは
TRUNCATE TABLE hogetable;別テーブルからデータを移行したいとき
insert into new_table ( column1, column2, column3) select column1, column2, column3, from old_table;
- 投稿日:2020-04-04T12:52:37+09:00
エラー「...mysql2/client.rb:90: [BUG] Segmentation fault at 0x00000000000000」に苦しんだ
エラー「...mysql2/client.rb:90: [BUG] Segmentation fault at 0x00000000000000」
で非常に苦しみました。
改善したので、メモしておきます。Rails sはできるが、どこかページを読み込もうとしようと、エラーが発生します。
改善の参考になった記事は、下記になります
エラー「...mysql2/client.rb:90: [BUG] Segmentation fault at 0x00000000000000」(セグフォ/セグメンテーション違反)に対応した
これでmysqlをアンインストールします。mysqlの再インストール方法は、自分の環境構築方法である
VS codeの初期設定とRuby on Railsの環境設定のMysqlの構築をしました。しかし、
エラー「Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)」が表示されましたこの対応方法は下記のサイトが有効でした
https://note.com/shoki_rails/n/nf7b51ba48084$ bundle exec gem uninstall mysql2 > 3ですべてのバージョンを削除する $ bundle install $ rails s >改善
- 投稿日:2020-04-04T09:49:47+09:00
ActiveRecord::NoDatabaseError: Unknown database 'アプリ名_development' 解決策
RMVC設定中にrails db:migrate出来ない
localhost:3000 に'アイウエオ'と表示させたい為
rails new後にターミナルとVSCodeでRMVC設定を行う。
rails db:migrate コマンドを打ち込んだ後に以下のエラーが発生。・ActiveRecord::NoDatabaseError: Unknown database 'アプリ名development'
・Mysql2::Error: Unknown database 'アプリ名development'databaseがないですよというエラーでした。
databaseがないのなら作ればいいのではと思い、ターミナルで以下のコマンドを打ち込む。
rails db:createCreated database 'アプリ名development'
Created database 'アプリ名test'上記の様に表示されればdatabaseが出来たはずなので改めて
rails db:migrateこれで無事migrateできました。
参考記事(重要)
rake or rails コマンドでdbを扱うときのメモ
https://qiita.com/pugiemonn/items/e237b73025d8db8545bf