2016年6月5日 星期日

[ROR] 02-建立資料庫及頁面

個人的學習紀錄,如果有問題請自行上網解決。

產生資料庫
rails g model user userId:string userPaw: string
  欄位: name    屬性: string
  欄位: phone    屬性: string
  上面的指令 只是建立執行的檔案(請到db/migratr)尋找。
rake db:migrate
  這行才是把上面的資料 寫到資料庫。

如果要異動資料表
Rails g model AddShowToUser  pname:string
如果要詳細異動 可以到 db/migrate裡面 找剛剛創建的檔案
同樣也需要  rake db:migrate


產生一個 controller
rails g controller user index
controller: user    view: index

伺服器啟動
  rails s


在這邊,因為不瞭解 route 設定 所以 打網址都會發生錯誤(Routing Error)

 所以請到 config/routes.rb 做設定。

其他錯誤
   NoMethodError : 代表語法可能有問題,可以部份 keyword 打錯之類的。

ActiveModel : forbiddenattributeserror
為了安全性考量,不允許資料直接寫入,所以必須要 Strong Parameters
來預防。
def create
  @user = User.create(user_params)
end

def user_params
    params.require(:user).permit(:name, :email)
end

當初不瞭解 ror 安全性問題,所以在這邊卡一些時間。

參考網址: https://ihower.tw/rails4/security.html



[ROR] 01-建立全新的網站

個人的學習紀錄,如果有問題請自行上網解決。
因為 我在Virtual Box底下操作,所以 在我建立的網站 我都是設定最高權限。
如果要開始在外面架設,請小心權限問題。
網站路徑: var/Project 底下。Project是自己新開的資料夾。
ror 的網站都在放在 Project 底下。
rails new blog2 -d mysql
   -d mysql是為了指定使用MySql ,沒有補上這段會變成使用sqlite

網站的資料庫設定:database.yml
如果沒有安裝mysql2 ,要執行
# MySQL.  Versions 5.0+ are recommended.
# Install the MYSQL driver
#   gem install mysql2
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: localhost
  username: 自己的帳號
  password: 自己的密碼
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  database: blog2_development
test:
  <<: *default
  database: blog2_test

production:
  <<: *default
  database: blog2_production
  username: blog2

  password: <%= ENV['BLOG2_DATABASE_PASSWORD'] %>

2016年3月30日 星期三

[Ruby] 教學網站

Ruby

Rails
1.    Rubyon Rails
2.    RailsRumble

SASS
  1. Sass

 Coffee Script
1.    CoffeeScript

Slim
1.    Slim
2.    Ruby Slim

 Haml
1.    Haml

其他




[Ruby]Ubuntu 底下安裝 Ruby on Rails

Ubuntu 上透過 RVM 安裝 Ruby on Rails

一、 使用 RVM 安裝 Ruby

為確保我們待會下載的程式都是最新版的,先更新系統。
sudo apt-get update
sudo apt-get upgrade

更新完成以後,我們就能開始安裝 RVM ( Ruby Version Manager ),這個程式可以很方便的讓我們在不同的 Ruby 版本間作切換, 以下我們只會安裝最新的版本,如果想要安裝其他的版本,可以參考這個文章
我們會需要用到 curl 這個工具來幫助我們安裝 RVM ,所以還沒安裝過curl 的朋友請先安裝curl 
sudo apt-get install curl

安裝 RVM,請輸入:
\curl -sSL https://get.rvm.io | bash

(因參考原本的語法有問題,所以有做更改)

當安裝完成以後,載入 RVM
或許你需要將目前所處於的 shell 關閉,並重開一個新的 shell
source ~/.rvm/scripts/rvm

RVM 還有一些需要的依賴程式需要安裝,輸入下面這個指令可以自動安裝 RVM 所需的相關程式
rvm requirements

二、安裝 Ruby

已經安裝好 RVM 的話,那麼安裝 Ruby 就變得很簡單了。
rvm install ruby

安裝完成後,要使用哪一個版本的 Ruby 當作預設值。
rvm use ruby --default

三、安裝 RubyGems

這個步驟是為了確保我們有正確安裝 Ruby on Rails 所需的所有 Gems ,如此一來 Rails 才能正確執行。我們可以透過 RVM 來繼續安裝 RubyGems
rvm rubygems current

第四、安裝 Rails

當上面步驟都完成以後,現在我們可以安裝 Rails 了。
gem install rails






2016年3月29日 星期二

[MSSQL]SQL特殊語法


一、搜尋資料庫所有欄位名稱,可以使用這兩種語法

select * from sys.columns


二、取得資料庫中所有資料表的名稱,可以使用以下語法

select * from INFORMATION_SCHeMA.TABLES


1.取得資料庫表單數量

select count(*) as totaltablenumber from sysobjects where xtype = 'U';


2.取得資料表名稱(tablename)及欄位數量(columnnumber)

select name as tablename, info as columnnumber from sysobjects where xtype = 'U';
3.取得某一資料表內所有欄位名稱

select b.name from sysobjects as a, syscolumns as b where a.xtype = 'U' and a.id = b.id and a.name='資料表單名稱';
3.1 取得某一資料表內所有欄位名稱

EXEC sp_columns 表單名稱

4.另外3的話不會照欄位順序排,請加入: order by b.colorder

5.取得資料庫所有資料表名稱

select * from sysobjects where xtype = 'U'

以上為SQL 2000


2005請使用下列語法

6.在SQL SERVER 2005抓取資料庫的SQL語法

select name from master.dbo.sysdatabases

7.抓取資料表的SQL語法

select Table_name from INFORMATION_SCHEMA.TABLES order by Table_name
8.抓取欄位的SQL語法

select column_name from INFORMATION_SCHEMA.COLUMNS where table_name='
TableName'












[ASP.NET] 使用 acsx 與 aspx - WebUserControl


簡單的說「就是把元件放在 ascx 上,然後在 aspx 裡使用」。
今天舉的例子就是在 ascx 裡放入 DataGrid 然後在 aspx 裡呼叫,並以 findcontrol 方式來連結設定相關的屬性。

Ascx 內容

在  WebuserControl 放上
<asp:DataGrid runat ="server"  ID ="gd"></asp:DataGrid>

Aspx 使用 Ascx

在Aspx放上要使用的元件,用DataGrid」當範例。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xx" Inherits="xxx" %>
<%@ Register TagPrefix ="wuc" TagName ="wuc1" Src ="~/WebUserControl1.ascx" %>
TagPrefix ="wuc"wuc 可自行定義。
TagName ="wuc1"wuc1 可自行定義。

<body> 
      <wuc:wuc1 ID="wuc1" runat="server" />
</body>

findcontrol 對應 ascx 裡的元件

元件是放在 ascx 裡,
所以在 apsx 裡要應用就必須先用 findcontrol 把他對應起來,
底下簡單的例子,是將 findcontrol 的動作寫在 page_load
然後指定 SqlDataSource 接著 bind 起來

protected void Page_Load(object sender, EventArgs e)
{
       DataGrid gd1 = new DataGrid();
       gd1 = (DataGrid)wuc1.FindControl(gd);
       gd1.DataSource = SqlDataSource1;
       gd1.DataBind ();
}

黃昏的甘蔗

[ASP.NET] OLEDB,ODBC 讀取 DBF




//範例一: 利用Oledb讀取DBF資料庫
string dbDirectory = @"d:\tmp";(檔案所在資料夾)
string database = "World.dbf";
string sql = "select * from " + database;
string cnstr ;
DataTable dt = OleDbDataTable(databaseDirectory, sql);

public static OleDbConnection OleDbOpenConn(string dbDirectory)
{
    cnstr =  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbDirectory + ";";
    cnstr+=" Extended Properties=dBASE IV; User ID=Admin; Password=;";
    cnstr = string.Format(cnstr);
    OleDbConnection icn = new OleDbConnection();
    icn.ConnectionString = cnstr;
    if (icn.State == ConnectionState.Open) icn.Close();
    icn.Open();
    return icn;
}

public static DataTable OleDbDataTable(string dbDirectory, string OleDbString)
{
    DataTable myDataTable = new DataTable();
    OleDbConnection icn = OleDbOpenConn(dbDirectory);
    OleDbDataAdapter da = new OleDbDataAdapter(OleDbString, icn);
    DataSet ds = new DataSet();
    ds.Clear();
    da.Fill(ds);
    myDataTable = ds.Tables[0];
    if (icn.State == ConnectionState.Open) icn.Close();
    return myDataTable;
}

//範例二: 利用Odbc讀取DBF資料庫
string database = @"d:\tmp\World.dbf";
string sql = "select * from " + database;
string cnstr
DataTable dt = OdbcDataTable(database, sql);

public static OdbcConnection OdbcConn(string Database)
{
    cnstr = "Driver={Microsoft dBase Driver (*.dbf)}; SourceType=DBF; ";
    cnstr+="SourceDB=" + Database + ";  Exclusive=No; Collate=Machine;";
    cnstr+="NULL=NO; DELETED=NO; BACKGROUNDFETCH=NO;";
    OdbcConnection icn = new OdbcConnection();
    icn.ConnectionString = cnstr;
    if (icn.State == ConnectionState.Open) icn.Close();
    icn.Open();
    return icn;
}

public static DataTable OdbcDataTable(string Database, string OdbcString)
{
    DataTable myDataTable = new DataTable();
    OdbcConnection icn = OdbcConn(Database);
    OdbcDataAdapter da = new OdbcDataAdapter(OdbcString, icn);
    DataSet ds = new DataSet();
    ds.Clear();
    da.Fill(ds);
    myDataTable = ds.Tables[0];
    if (icn.State == ConnectionState.Open) icn.Close();
    return myDataTable;