2013年8月29日 星期四

不同 爸爸 但是相同爺爺的繼承問題

不同Unit 但是相同Procedure(Function) 的Compile Error
當使用相同函式庫卻遇上相同物件繼承時
(廢話不多說先看圖)

當我在unit  dmW_C0578_GDMu;使用cbsEllipsis函數時
Uses 函式庫裡面的InfoCtrlsAdvDBGrids
均有使用cbsEllipsis 的 物件Object
但是此Object來自兩個函式庫,結果可能會與預期的不相同或者Compile Error
解決方法:
InfoCtrls.cbsEllipsis
或者
AdvDBGrids .cbsEllipsis

2013年8月26日 星期一

資料庫基本語法

相關物件
TColumn
TDBGrid
DataSource

type
  TForm1 = class(TForm)
    Button2: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    DataSource1: TDataSource;                        //資料庫來源語法
    ADOQuery1: TADOQuery;                        //Data查詢啟用語法
    DBGrid1: TDBGrid;                                    //資料表顯示語法



procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOQuery1.Open;
end;                                                             *重要,必須開啟才能使用*    


下列為開啟資料表在Control Panel理動態新增分頁並且動態設定資料表讀取欄位與寬度設定
var
  Yoo: TTabSheet;
  i, j: integer;
  aDBGrid:TDBGrid;
  c: TColumn;
begin
 j:=3;
 for i:= 1 to 5 do
  begin
    Yoo :=TTabSheet.Create(Self);
    Yoo.PageControl :=PageControl1;
    Yoo.Caption := Yoo.ClassName+inttostr(j);
    aDBGrid:= TDBGrid.Create(Self);
    if Yoo.TabIndex =3 then
    Begin
     aDBGrid.Parent :=Yoo;
     aDBGrid.Align :=alClient;
     aDbGrid.DataSource := DataSource1;     //DATA Source導入語法

     c := aDBGrid.Columns.Add;
      c.FieldName:='ID_CUST';

     c := aDBGrid.Columns.Add;
      c.FieldName:='NM_C';
      c.Width:=335;                                        //第二欄寬定
    End;
    j :=j+1;
   end;
end;


2013年8月20日 星期二

Array 陣列

陣列可以不用一開始就宣告
如:

Var
  Test:Tstrings;
  Yoo:String;
begin
  Yoo:='0123456789abcdefghijklmnopqrstuvwxyz';
  ShowMessage(Yoo[1]);    //值為0
  ShowMessage(Yoo[2]);    //值為1








也可直接宣告長度SetLenth(等待加入)

以下為利用ArrayFOR迴圈去除Delphi讀取資料時去除斷行與空白(我要做字典檔)
Var
  i, x:integer;
  Name:TStrings;


begin
  Name:=TStringList.Create;
  Name.LoadFromFile('D:\xxx1.txt');
  for i := 0 to Name.Count-1 do   Name[i]:= StringReplace(Name[i], ' ', '',[rfReplaceAll]);
  for i := Name.Count-1  downto 1 do
   begin
    Name[i-1]:= NAme[i-1]+ NAme[i];
   Name.Delete(i);                                         //在此遞減比較好用
   end;
  ShowMessage(Name[Name.Count-1]);
  Name.SaveToFile('D:\\xxx.txt');
  Name.Free;

{
 遞增概念
{
for i := 0 to Name.Count-2 do
   Begin
      Name[i+1]:=  Name[i]+ Name[i+1];    //遞增的方式有點奇怪,Delete會Index錯誤
      Name[i]:='';                                         //不能用delete 會影響FOR迴圈內Count的計算
   End;
}