使用UniDAC讀取Mysql資料庫

之前測試過,使用Mysql元件來讀資料,但是失敗,失敗的原因是什麼目前還不知道。所以用了另一套元件(控件)來存取MySQL的資料。

通常來說,要讀取某一筆特定的資料,select的語法如下
select * from tabls where filed1=’abc’ AND field2 =’DEF’;
在php和一般SQL的指令是這麼下的沒有錯
但是,在Delphi的UniDAC卻不是如此
要使用UniQuery的Fileter屬性來撈我們要的資料
Step1 取得輸入的資料
useri:=edit1.Text;
passi:=edit2.Text;

Step2 開啟UniQuery的Filter功能
UniQuery1.Filtered:=true;

Step3 組合我們要的FilterSQL語法
filtertext1:=’USER=”’+useri+”’AND Pass=”’+passi+””;

Step4 把語法指定給 Uniquery1.FilterSQL
Uniquery1.FilterSQL:=filtertext1;

Step5 開啟UniQuery
UniQuery1.open;

這個時候,就可以查到我們要的資料了

說真的,網路上在討論 UniQuery的人不多,因為我想說UniDAC和MyDAC都是devart公司出來,UniQuery提供了多種database的查詢,而MyDAC只是其中的一種,所以MyDAC能用的方法,UniDAC也一樣,所以參考了MyQuery的語法進行測試,最後才測試成功。語法怪的地方在於引號的部份,為什麼要用2次的引號,我就不知道了,不過使用UniDAC來查Mysql,真的花了我很多的時間測試,等一下來測試看看新增修改和刪除的功能。

Delphi函數

數學函數 (Arithmetic Routines)

Unit: System
======================================================================
Abs 傳回參數的絕對值。 function Abs(X);
ArcTan 傳回正切函數的反函數值。 function ArcTan(X: Real): Real;
Cos 傳回餘弦函數值 function Cos(X: Real): Real;
(X 以弧度為單位)。
Exp 傳回自然指數值。 function Cos(X: Real): Real;
Frac 傳回參數的小數部份。 function Frac(X: Real): Real;
Int 傳回參數的整數部份。 function Int(X: Real): Real;
Ln 傳回自然對數值。 function Ln(X: Real): Real;
Pi 傳回圓周率π的值。 function Pi: Real;
Sin 傳回正弦函數值。 function Sin(X: Real): Real;
Sqr 傳回參數的平方。 function Sqr(X: Real): (Real);
Sqrt 傳回參數的平方根。 function Sqrt(X: Real): Real;

Read more

Delphi的字串類資料型態&函數

字串類的資料型態
Str1 : Char; // Holds a single character, small alphabet
Str2 : WideChar; // Holds a single character, International alphabet
Str3 : AnsiChar; // Holds a single character, small alphabet
Str4 : ShortString; // Holds a string of up to 255 Char’s
Str5 : String; // Holds strings of Char’s of any size desired
Str6 : AnsiString; // Holds strings of AnsiChar’s any size desired
Str7 : WideString; // Holds strings of WideChar’s of any size desired

Read more

Delphi的數字類資料型態&函數

數字類的資料型態

Type Storage size Range

Byte 1 0 to 255
ShortInt 1 -127 to 127
Word 2 0 to 65,535
SmallInt 2 -32,768 to 32,767
LongWord 4 0 to 4,294,967,295
Cardinal 4* 0 to 4,294,967,295
LongInt 4 -2,147,483,648 to 2,147,483,647
Integer 4* -2,147,483,648 to 2,147,483,647
Int64 8 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

Single 4 7 significant digits, exponent -38 to +38
Currency 8 50+ significant digits, fixed 4 decimal places
Double 8 15 significant digits, exponent -308 to +308
Extended 10 19 significant digits, exponent -4932 to +4932

* Note : the Integer and Cardinal types are both 4 bytes in size at present (Delphi release 7), but are not guaranteed to be this size in the future. All other type sizes are guaranteed.

Read more

Delphi的If…then..Else

在條件事選擇的時候,通常可以用幾種選擇性結構進行判斷
在php中 if 條件式是這麼下的

if (a!=0){
做什麼事;}else{
做另一件事;
}

如此一來,完成一個選擇性的結構
在delphi中,法語有一些些的不同,在if..than…else的結構中,不能放;(if條件句結束),如果要放;,只能加在begin…end中
下面是做按鈕的開關sample
If Edit1.Text=” Then
Button1.Enable:=false
Else
Button1.Enable:=true; <—最後要加分號做結束

多內容的If…Then…Else語法
If Edit1.Text=” Then
begin
Button1.Enable:=false;
Button2.Enable:=false;
Button3.Enable:=false;
end <—第1個End 不加 ; 最後一個End 才加;
Else
begin
Button1.Enable:=true;
Button2.Enable:=true;
Button3.Enable:=true;
end
;

Delphi的資料庫連接

1.dbexpress
2.ado
3.myodbc
4.3rd party object(Tmysql/zeros/MyDAC)

Tmysql
http://www.productivity.org/projects/tmysql/
看了介紹,Tmysql沒有使用TDatabase TQuery等,也不是使用BDE/ODBC
最後的版本在2002年的2月12日發佈
我用的是 Delhpi And C++ Builder 2009版的,不知道有沒有支援。

TDatabase是使用BDE(Borland Database Engine)
TQuery則是要設定ODBC資料來源(回想起當初出社會時,安裝軟體設定ODBC的痛苦)

MyDAC元件在網站是這麼介紹的
MySQL Data Aceess Componets,提供的物件蠻多的,請參考下圖
mydac_palette[1].jpg

下載頁在這裡,有免費版的可以下載
http://www.devart.com/mydac/download.html
重點是,有支援Delphi and C++ Builder 2009
而且,還有支援其他多種DB的連線
Oracle
SQL Server
InterBase
Firebird
PostgreSQK
(我又想去網路上找不是試用的版本了…唉宿命)
使用的是ADO.NET data provider, dbExpress drivers(不知道會不會連線成功)
首先,我沒有看到MyDAC的正式版或是破解版,所以咧,先用測試版跑看看。
在安裝的時候,出現了下面的訊息。
竟然找不到Hxds.dll
安裝MyDAC 5.8 for delphi and C++ Builder 2009,遺失Hxds.sll
經檢查,這是一隻微軟Help的元件,不過訊息上面說,這不是一個fatal(致命的錯誤),安裝會繼續完成。
這個錯誤訊息,一共出現了2次,我在想他是不是呼叫這件元件,來顯示他們的說明,anyway,不重要。
執行CodeGear RAD Studio 2009中的delphi 2009,出現了MyDAC的提示訊息,告訴我,我有60天的試用期。

哈哈~裝好了,就一個字爽
而且連接資料庫變的超簡單的

不過,看到他的價目表,嚇到我閃尿了!
標準 1人版 $129.95 USD金 群組版(4U) 299.95USD 網站版(同一間公司不限人數) $549.95 USD
專業 1人版 $199.95 USD金 群組版(4U) 499.95USD 網站版(同一間公司不限人數) $899.95 USD
其他的不敢看下去了(害我又想去找其他的版本了….)

* TMyConnection – lets you set up and control connections to MySQL database server
* TMyQuery – uses SQL statements to retrieve data from MySQL table or tables and supply it to one or more data-aware components through a TDataSource component and provides flexible data update functionality
* TMyTable – allows to retrieve and update data single table without writing SQL statement
* TMyStoredProc – executes stored procedures and functions
* TMyCommand – executes SQL statements and stored procedures, which do not return rowsets
* TMyScript – executes sequence of SQL statements
* TMyUpdateSQL – lets you tune update operations for a DataSet component
* TMyDataSource – provides an interface between a MyDAC dataset components and data-aware controls on a form
* TMySQLMonitor – allows to monitor dynamic SQL executing in MyDAC based applications
* TMyConnectDialog – allows you to build custom prompts for usernames, passwords, and servers
* TCRDBGrid – extends TDBGrid capabilities, provides visual access to filters and incremental search
* TVirtualTable – provides dataset functionality for data that has no real database connection
* MyDataAdapter – .NET component, uses TDataSet as data source for retrieving and saving data to System.Data.DataSet

MyDAC Professional Edition and MyDAC Developer Edition include the following additional components:

* TMyLoader – provides quick loading data to MySQL database
* TMyDump – serves to store a database or its parts as a script and also to restore database from received script
* TMyBackup – serves for backup copying specified tables on the server
* TMyServerControl – serves to control the server and execution of standard service tasks
* TMyEmbConnection – is used to establish connection to MySQL Embedded server
* TMyBuilder – serves to manage SQL Builder for MySQL Add-in
* TMyMetaData – retrieves metadata on specified SQL object
* TCRBatchMove – transfers data between all types of TDataSet descendants

另外,我找不到zeros的資料,網友說的不是很清楚。
The ZeosLib is a set of database components for MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle and SQLite for Delphi, FreePascal/Lazarus, Kylix and C++ Builder.
網友寫錯了,是zeos,從zeoslib或sourceforge都可以下載
免費,開源,而且支援的好像也不少
只是不知道好不好用而以
剛才看了官網和下載完package之後
我失望了
因為目前6.X的版本,並不支援delphi 2009(12.0),只支援 Delphi V11
我再找看看其他delphi連接mysql的元件好了

剛才看到有網友用 mysql windows版的元件+dbExpress來連接Mysql,也許操作起來沒有像MyDAC這麼方便,不過,最少是不用錢的,而且MySQL元件,只要去下載Win 32的版本,可以取得,如果要做軟體發佈的時候,只要把libmySQL.dll copy到windows\system32下,就可以了,簡單方便許多。
有興趣的,可以參考這篇文
http://www.jackforfun.com/2008/11/delphi-2009-dbexpress-unicode-mysql-50.html?showComment=1247908318404#c6037813891210543481

Access violation at address in module 'libmysql.dll'. Read of address.
可是我照上面的試來來做
卻是有問題的,之前這台有灌過xampp和apps,不知道是不是元件的問題….唉,先測別的先

Delphi的變數轉型

因為,在php裡面,所有的變數都是自動轉型的,數字和字串都很好操作,也不會出錯,但是在直譯時,就是要犧牲部份的效率(其實感覺不太出來)。

VB和Delphi都要對變數的種類進行指定,而且,操作時,需要自己選擇轉型(網路上有看到別人寫,delphi也可以自動對變數進行轉型,但是不知道怎麼做)。
沒有關係,就照正統的方式來做吧!

整數變字串
inttostr();
字串變整數
strtoint();
ex:
inttostr(3)=’3′strtoint(‘3’)=3
相似的轉型涵數還有
floattostr();
strtofloat();

Delphi再一次親密接觸

其實,很久之前就想學Delphi了,因為之前自己有玩過VB,還寫了一個小的庫存管理程式,不過因為後來工作的內容都在玩硬體,也就沒有有再寫VB。

Delphi第一次是在9年前,工作的關係,有一個工程師用Delphi,他說操作和開發起來比VB還要快,而且很結構化,容易學習;當然,這是他個人的感受,因為那時玩了一陣子VB,也就沒有花太多的心力去學Delphi。

Delphi,是一種從Pascal(巴斯卡)演變而來的語言,後期的工具加入了視窗和物件導向的功能,讓使用者在Windows上可以很容易開發程式,當然,有一陣子推了一套Kylix系統,就是Delphi的linux版,設計師可以在很少的修改下,就可以在linux上開發出一樣功能的軟體或系統,當然,後來,就不了了之。

因為工作的關係,在三年多前,開始使用php+mysql來開發一些系統,不論是工作上,還是自己架的網站,因為Web Base的關係,使用者的學習曲線變直了,容易上手,但是單機版上跑Php,還是限制很多,光是環境和資料庫,應該就會吃了不少的資源。當然,Delphi運作模式是不同的,假設是三層式的架構,不用經過apache,自然,資源會少一點,但是資料庫的部份,可能就不一定了。

為什麼回來玩delphi呢?因為工作效率的關係,之前架設的網站,大多是使用hosting的方式,如果所有程式都在上面開發,很容易就把DB的存取次數用完(有幾個hosting service provider只可以在每小數中存取20000次),而且,也受限於網路傳輸的速度,如果可以在單機上跑,光個Access,可能就很夠用了,那個執行效率,自然就不用比了。

基本上,delphi程式運算的效能,只是吃單機上的資源(程式,dll),再對DB做access,分散在各Client的運算率能,就可以增加整體工作的效率,降低server建置的成本,一個個人電腦建構的db server,應該就足夠了,除了以上理由,另外delphi連接周邊配備的能力也比php強上許多,對於資料的收集以及分析,我想,這是我著眼的。

至於為什麼不回來用vb/vb.net呢?visual c++/c#/java這些語言也很不錯啊!我想,我的骨子裡是個反微軟的傢伙,能不用微軟的,就不用微軟的;網路上一堆人在講power build和delphi的支持與擁戴,其實當初我也想了很久,要用delphi還是power builder,反正解決方案這麼多,delphi都推25年了,基本的pascal語言,沒有太多的改變,假如,每3年5年,就要學新一種的開發環境,有一天,我會老,學的速度不如年輕人的時候,我還剩下些什麼?至於我的論點是不是對的呢?留給時間去解答。