網頁

2017年8月23日 星期三

MySQL : Fetch Table one by one without fixed index

需求 : 從一張 table 逐筆把資料拉出來, 實現 Delphi ADO 的 Table.FieldByName( field ) 加上 Table.next

假如一張 table 有個連續、正常的 index field 沒有中斷,那麼要循序存取資料還算容易使用

SELECT COUNT(*) FROM Table_Name;

先找出所有的資料筆數

SELECT field FROM Table_Name where index=XX

然後使用 index 欄位一筆筆往下抓, 靠外部把 XX 遞增到資料筆數。可是要是 index 已經爛掉了, 不論是有跳號、還是重複號碼, 那就要使用 ORDER 搭配 OFFSET

SELECT field FROM Table_Name ORDER BY index ASC LIMIT 1 OFFSET %d

2017年8月18日 星期五

Delphi : record v.s. "packed" record

簡單結論 record 會依據結構 ( record )中最長的變數做 Alignment ,然而 packed record 不會。結果就是 packed record 佔的記憶體空間可能比 record 來的少。

範例
type
  // Declare an unpacked record
  TDefaultRecord = Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

  // Declare a packed record
  TPackedRecord = packed Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

var
  defaultRec : TDefaultRecord;
  packedRec  : TPackedRecord;

begin
  ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec)));
  ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
end;

結果
   Default record size = 20
   Packed record size = 14

P.S. I didn't compile this code, I don't know why the size is 20 and 14. But the concept is reasonable.

2017年8月17日 星期四

Delphi : Class Method vs Object Method

簡單理解 Class Method 像是 C++ 中的 class constructor。而 Object Method 則是一般 C++ 宣告 Class 實體物件之後呼叫的 method。

最簡單的來說 Class Method 可以不經過宣告實體 object 就能被呼叫
例如說
    MyObject := MyClass.Create(  );
然而 Class Method 也可以從宣告過的實體物件被呼叫
    MyObject.MyClass( );

但是 Object Method 則必須從已經宣告過的物件來執行
    MyObject.MyMethod;

參考這網頁說明 "Understanding Class Methods"

2017年8月16日 星期三

Transform SQL from Access to MySQL or others

情境

原先架構在 MS 的 Access 所以會有 mdb 檔案, 在 Access 裡頭可以看到一些既存的 Query 點 Design View 之後再去視窗上方按右鍵可以看到 SQL View

困境

把這樣的一串 SQL 丟到轉好的 phpMySQL 去執行是會發生問題的一堆 Syntax Error

原因

當初設計 Table 的人, 名稱設計不良用了空白在 table name, 導致 SQL 語法中要用到很多 [ ] 去把包含空白的 table 包起來。

解法

Python TypeError: 'module' object is not callable

程式碼其實相當簡單 import random random.random() 那問題出在哪?出在當初的檔名取名為 random.py 結果造成 Python 在 import 的時候造成問題。所以在取名Python 的檔名時,切記不要取成跟 Default Module...