程式相關的寫到有點題材枯竭了,換個話題,聊聊攝影。
Ricoh GR 系列,從 GRD 2 開始,GR 就是我的隨身機了,愛的理由有很多,恨的也不是沒有,只是其他的都能習慣,唯獨入塵這點不能妥協。GR, GR ii 我都有,都有容易入塵的問題,塵會黏到 cmos 上,直接在照片上顯現黑影,GR iii 我不清楚,因為在 GR ii 死之前都不打算買。
程式相關的寫到有點題材枯竭了,換個話題,聊聊攝影。
Ricoh GR 系列,從 GRD 2 開始,GR 就是我的隨身機了,愛的理由有很多,恨的也不是沒有,只是其他的都能習慣,唯獨入塵這點不能妥協。GR, GR ii 我都有,都有容易入塵的問題,塵會黏到 cmos 上,直接在照片上顯現黑影,GR iii 我不清楚,因為在 GR ii 死之前都不打算買。
整個表格都只有黑跟白,這不夠 user friendly,就好像交通燈有分紅黃綠一樣,系統可以把不同類型的數據顯示成不同顏色,哪個訂單未確認,哪個訂單已出貨,令用戶可以一目了然,省下人工分析的時間,提高工作效率。
設定顏色會用到 RGB(red, green, blue) ,裏面三個值都是從 0 到 255 ,最終顯示的顏色就是由這三個值調配而成的。
比方說,某個格子有ABC三個值:
既然前面 dynamic sql 的文章有提到,這裏不如先聊一下Schedule Job。
顧名思義,會按 schedule 自動執行Job的,就是 Schedule job了,我主要是用在數據管理,例如清理日誌、停用久沒登入或密碼過時的用戶帳號、同步數據、結算、生成報表之類。
在 MS SQL Server Management Studio 內,不分 DB,在 SQL Server Agent 內面就能找到了,下面說說建立的步驟。
前幾年,家裏的NAS 壞了,數據只救回了部份。一朝被蛇咬,十年怕草繩,為免案件重演,我轉到雲端儲存。有說 Google Drive 會掃瞄檔案,並以此作為向用戶推送廣告的依據,所以當時選了「聲稱」能保護私隱,不掃用戶檔案的 Dropbox。
上週發現 Dropbox 突然登入不了,帳號被 disable了,網上問了客服,說我違反了使用條款。自問也只是私人用途,不公開,也沒任人下載什麼,再三追問,他說我上傳了可能違法或下流的東西,所以停了我的帳號,縱然付費多年,但還是在毫無通知下被停用了。後來網上查了一會,原來遇到同樣事情的人也不少...
懶惰確實是推動世界進步的最大動力,為了省下工作時間來上網,剛弄了個能清理各個日誌表的存儲過程。過程中學會了使用 mssql 的 sp_executesql()。
sp_executesql() 的用途就是在執行時執行剛拼湊成的 sql 語句。整套大概這麼寫:
-- 定義變量
declare @sqlCommand nvarchar(500)
DataShare() 的功用就是在 DataWinodw 間「共用」數據。在一些在程序各處都用到的數據,或數據量大的表中,比如用戶名稱、供應商名稱或貨物資料,DataShare 都能有效提高程序度。
做法是先把 dropdowndatawindow 定義到 global datastore,預先 retrieve()到系統緩存內,在有需要的時候,就以 DataShare() 把它的數據共用的當前畫面的下拉中,這樣就可以減省每次都重新 retrieve 的時間。除了下拉,各種查詢也可以使用這個方法,例如把貨物資料都存到緩存中,查詢時就把數據共用到查詢畫面,然後以 DW.Filter() 在 DataWindow 中查找資料。
這方法有個缺陷,就是看不到 retrieve 後所新增的數據,就是你 retrieve 後,同事或你自己新增的資料並不會自動包含到緩存中。這種情況你就需要在適當的時候預先更新一下緩存內的數據,例如在貨物維護功能內,有改動後就在背後偷偷 retrieve 一下該 global datastore 去更新一下數據。寫法如下:
不同的 Datawindow 有時候需要按本身特性分配到不同的打印機,比方說把銷售報表印到 A4 雷射打印機、標籤分配到熱感標籤打印機、一套幾份的發貨單要印到 Dot Matrix 打印機,為方便使用及減少用戶選錯打印機的機會,我們可以把哪個DW打印到哪台打印機的設定寫到代碼中。
這裏介紹幾個相關的函數:
PrintGetPrinters() 取系統打印機清單( 注意有 s )
PrintGetPrinter() 取預設打印機
剛在做把程序由 PB9 升級 PB 12 的項目,出現了一個奇怪的現象,明明我寫好是連去數據庫 A 的,為何老在連去 B?由於兩個庫都有着幾個名稱相同的 table,導致程序一直正常運作,但數據卻總是寫在錯的數據庫?
找了半天,原來是因為 PB9 裏面的這一句已經失效了,導致一直都沒有連上正確的數據庫:
SQLCA.LogID = "stupid_user"
SQLCA.Servername = gs_server
在展示數據的時候,為方便理解,我們常常會把不同的數據拼在一起,比方說「姓名(學號)」,在一般的數據表設計中,姓名跟學號會是不同的兩個欄位,在數據窗口要要怎麼拼呢?
DataWindow 提供了兩種方法,一是 Computed Column,這是從數據源加,在SQL裏就寫好的;二是 Computed Field,這只要在畫面上加入就可以,而且更可以調用 function() 做更多的事情,但這種方式有個缺憾,就是速度慢。
PB 很聰明,為提高速度,在retrieve 時只會執行畫面上會顯示到的 Computed Field 而已,如果畫面有有連續十張A4大小的單據,她就只會執行第一頁的 Computed Field ,在用戶把 scrollbar 往下拉往第二頁時,PB 才會執行第二頁的Computed Field ,如果佻皮的把 scrollbar 在第一頁程最後一頁往回拉的話,程序就有可能會因為不斷執行 Computed Field 語句而卡死,所以兩者之間需要慎選。