Type: Access MDB 轉為 MySQL Database
差異:查詢/Query 功能
細節:Access 內建的查詢功能,在 MySQL 裡,應以 SQL 指令取代。
Solution:
Access:在 Access 中建立 Query Table_A, Tabel_B 並指定關聯欄位為 R_ID
MySQL:select * from Table_A, Table_B where Table_A.R_ID=Table_B.R_ID
介紹 Synology NAS, 汽車, 美食, 3C, 單眼相機, DSLR, 雷射, Windows, 程式語言, 財務金融等相關知識
Type: Access MDB 轉為 MySQL Database
差異:查詢/Query 功能
細節:Access 內建的查詢功能,在 MySQL 裡,應以 SQL 指令取代。
Solution:
Access:在 Access 中建立 Query Table_A, Tabel_B 並指定關聯欄位為 R_ID
MySQL:select * from Table_A, Table_B where Table_A.R_ID=Table_B.R_ID
Borland C++ Warning Message:
[C++ Warning] Dialogs.hpp(437): W8058 Cannot create pre-compiled header: initialized data in header
Solution:
Replace “#include <vcl.h>” as #include <vcl>:
#include <vcl.h> -> #include <vcl>
C++ 的作法:
【Form1】
#include “Unit1.h”
…
public:
bool IsHome;
【Form2】
#include “Unit2.h”
#include “Unit1.h”
…
Form1->IsHome=…
C# 的作法:
【Static Class Page】
using namespace TEST;
static public class GlobalPara
{
static public bool IsHome=false;
}
【Form1】
using namespace Form1;
using namespace TEST;
…
GlobalPara.IsHome=…
【Form2】
using namespace Form2;
using namespace TEST;
…
GlobalPara.IsHome=…
好迂迴的用法…
真是一堆為了物件化而物件化的鳥作法= =
Microsoft!不意外!
win32api所提供的serial port讀寫方式有分兩種
同步方式: 讀夠了指定的字元才會返回(執行緒不會先返回去做其他工作)
非同步方式: ReadFile/WriteFile函式被呼叫之後,執行緒會先返回,win32api自動幫你新增一個執行緒在背景做IO工作,你必須去檢查OVERLAPPED結構的hEvent物件是否已被觸發,才知道背景IO工作是否已經結束
標準做法是先用WaitForSingleObject去檢查hEvent物件,如果觸發了,才使用GetOverlappedResult去檢查執行的結果(IO工作結束後有很多種結果,讀取到的字元可能介於0~N個你指定的字元,可能是順利讀完之後返回或是因為timeout被迫先返回而實際讀取字元=0或是<N)
win32做IO的方式(serial port/檔案讀寫/和其他IO都適用)會受到timeout的影響,否則同步方式很容易會鎖死,如果是在XP系統,逾時機制的預設值應該都是0,也就是不使用timeout機制
你在開啟通訊埠使用CreateFile函式的時候並沒有指定要用overlapped非同步方式去執行,我也沒看到你有去設定timeout值,所以你的IO執行緒是以同步方式在跑,overlapped結構和設定等等動作是白做的,因為ReadFile根本不會去使用
因此你的程式應該是會鎖死住,一直等到ReadFile讀夠了256個bytes才會返回…,我建議你要把一些事情做好,比較容易debug
1. 開啟通訊埠之後,把UART晶片的緩衝區一律清除掉,否則程式上一次執行所傳送的資料仍然會在緩衝區裡面等著被讀取(至系統記憶體內),事實上一般白牌的UART晶片的接收緩衝區大約是16到256個bytes,很容易就被塞暴,因此windows事實上在背後幫你提早接收了這些資料,並自行保管,等到你去讀取serial port的時候,它就直接把資料給你(系統記憶體的複製動作),所以你會發現寫入serial port返回的時間跟baudrate以及字數有相關,但是讀取serial port卻是””瞬間””完成,即使你的baudrate很低…我把這個稱之為windows所提供的””軟體緩衝區””,實測結果是這個軟體緩衝區可以放超過1MB以上的資料(雖然被灌暴的時候,win32API函式有檢查overrun的事件和機制,也可以警告你,但是資料仍然被存放入軟體緩衝區裡面,一個byte都沒少也不會被丟掉),所以開啟/關閉通訊埠的動作要確實,該清空/reset的動作都要做,不然改過的新程式碼去讀取軟體緩衝區裡面的舊資料,改對了還是可能產生錯誤結果
2. 因為win32api提供了timeout返回的機制,所以你可以沒事就去讀取看看,大不了就是沒資料可讀而已,這種方式特別適合資料固定在流動,但是資料量不定的情況(而且最新資料可以取代舊資料),另一種方式是先檢查接收緩衝區之後,知道了有無字元和實際數量,然後才去做讀取動作,這種方式如果出了問題比較好debug
Problem:Borland C++ – Project Options 無法開啟,顯示記憶體錯誤
原因:Windows DEP 系統服務
Solution:
控制台→系統→進階→「效能」下的「設定」鈕→
「資料執行防止」→選擇「為所有的 Windows 程式和服務開啟 DEP,除了我選擇的這些」→
「新增」按鈕→選擇 Borland C++ IDE 的應用程式路徑。
Reference:http://pcsupport.about.com/od/fixtheproblem/ht/depexplorerexe.htm
判斷目錄是否存在: DirectoryExists(路徑)
強制建立目錄:ForceDirectories(路徑)
如果目錄存在,就不做事;如果不存在,就造一個出來
軟體名稱:
匯率更新合庫版
軟體資訊:
版本:v1.0.19
語言:正體中文
作業系統:Windows 應該都可以
檔案大小:108 KB
是否需要安裝:Yes
安裝檔案大小:VB 自行封裝後就破 10MB 了..
軟體功能:
由合作金庫網站即時更新匯率。
支援貨幣:
“美元(USD)”
“歐元(EUR)”
“南非幣(ZAR)”
“人民幣(RMB)”
“日圓(JPY)”
“港幣(HKD)”
“英磅(GBP)”
“澳幣(AUD)”
“新加坡幣(SGD)”
“瑞士法郎(CHF)”
“加幣(CAD)”
“瑞典克郎(SEK)”
“紐西蘭幣(NZD)”
“泰銖(THB)”
寫死為每 10 秒更新一次。
軟體特色:
0. 兩三年前我自己寫的,沒想到除了網址有改,功能照樣能正常使用…
1. 支援多種貨幣。
2. 支援目標買匯監控 –
滑鼠 Click 「買匯目標」後,可輸入監控中貨幣的買匯目標,
當目前的匯率大於或等於讓目標時,會顯示提醒訊息。
3. 每次更新匯率時,記錄一筆資料到 history.txt 中。
官方網站:
http://genlee.pixnet.net/blog/post/37680890
下載連結:
http://tinyurl.com/83qye37
推薦原因:
有兩個 PTT EzSoft 版友看了推文後寄來問我,所以我乾脆貼上來好了
誰適合用:
想要有一個小小的桌面小程式、即時監控匯率
誰不適合用:
呃,沒買外幣的人?
使用感想:
啊,小小的不占空間,當初有買外幣時寫來看的,
找不到有誰有寫,裝專業金融軟體又會很肥很大,占滿畫面,
所以就自己寫了。
附註:
本著作依據 Creative Commons 姓名標示-非商業性-相同方式分享 授權條款為授權
http://creativecommons.org/licenses/by-nc-sa/3.0/tw/
Software – Borland C++ Builder
Problem – W8058 Cannot create pre-compiled header: initialized data in header
Solution – Select “None” in Pre-compiled headers section in Project Options Dialog in Borland C++ Builder 6.0.
Problem:QuickRep QRDBRichText 無法輸出資料庫的資料
Type:程式設計
Software:Delphi、C++ Builder (BCB)
需求:輸出大量文字於 QuickRep Preview 上,並自動換行、支援中文
Solution:
使用 QRDBText 元件,設定 AutoSize 屬性為 falsh,AutoStretch 屬性為 true,Wordwrap 屬性為 true 即可。
Reference:http://hackdiy.com/I-7796049.html