查詢陣列中值所在的位置

為了資料排序的問題,又無法直接抓取資料的序號
所以只好把資料序號都丟進去陣列中
放入陣列中的元素,是按照順序排好了
只要有辦法取得陣列元素的位址
就可以進行相關的操作
使用的指令
array_search(‘字串’,陣列變數)
如果有資料,就會返回位址,如果沒有,就會返回null
解決掉我花了三個小時的order by問題
使用這個方法,就是浪費了一點記憶體
不過,這也是沒有辦法的辦法

網頁流量是真的流量嗎?

最近,開始深入的測試discuz
發現,discuz 7.0版上也有採集文章的插件
也就是說,可以自己把別人的文章複製(克隆)回來
當然,連回覆也不放過

更厲害的是,可以自己產生1000個會員,這些會員會隨機上線
還會自己發文章,營造熱門網站的資訊

可怕了吧!真是一個超猛的外掛,這讓我覺得,還有很多努力的空間
第一:文章採集技術,因為直接抓的也是discuz文章,格式比較不容易跑掉
第二:人數上線瀏覽資料,這是Blog系統所沒有的
第三:隨機發文,這是機器人很重要的功能

當然,discuz也複雜許多,因為html tag/bbcode或是純文字三種模式
比只用html tag的blog簡單許多

當然,1000個會員隨機在線,隨時提供資料,這個手法,還真是先進。

使用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的數字類資料型態&函數

數字類的資料型態

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();