用E4A操作數(shù)據(jù)庫

2019-07-25 10:41 更新

?本節(jié)要點

首先是準備工作,同時這部分可以復習前面內(nèi)容:

1.建立一個mysql數(shù)據(jù)庫,寫幾個字段。

2.建立一個中間件連接數(shù)據(jù)庫。

3.編寫E4A程序連接該數(shù)據(jù)庫。

然后就是幾個操作過程:

4.用E4A實現(xiàn)數(shù)據(jù)庫寫入記錄

5.用E4A實現(xiàn)數(shù)據(jù)庫修改記錄

6.用E4A實現(xiàn)數(shù)據(jù)庫刪除記錄

下面分點寫

?建立一個mysql數(shù)據(jù)庫

我這里有寶塔軟件,直接用吧,因為我們要用到中間件,所以我這里直接創(chuàng)建一個網(wǎng)站空間,讓它附帶數(shù)據(jù)庫。這個操作我們可以在瀏覽器用寶塔web面板完成。


上圖為寶塔web面板首頁,我們可以在我們本地機上通過瀏覽器完成這些操作,就不需要遠程連接服務(wù)器,很是方便。


如上圖,一步步設(shè)置好,域名我泛解析過就不用A記錄了。

接著我們?nèi)ピO(shè)置一下數(shù)據(jù)庫的字段,既然是寫個程序那就寫個簡單的卡密驗證系統(tǒng)吧。。

我們設(shè)置幾個字段,分別叫做ID(這個設(shè)置整數(shù)自增吧,做主鍵)、卡密(這個設(shè)置文本型)、到期時間(文本型)。如下圖:


先來建一個表,空庫是沒有表的


然后創(chuàng)建字段


發(fā)現(xiàn)出錯,ID最長255個字符,這個就是INT型數(shù)字的最大長度,沒想起來尷尬了~

然而折騰一陣子發(fā)現(xiàn)報錯#1007,沒有給出錯誤原因,錯誤代碼查不到原因,算了,懶得搞,到服務(wù)器上用Navicat,這是寶塔面板給我們準備的另一利器,相比于phpmyadmin,它更穩(wěn)定,很少出錯,如圖:


好了,下面就試試


連接上了看看里面


空空如也表都沒建。。算了重建吧。


OK,別忘了設(shè)置ID自增:



好了,保存一下,寫第一條數(shù)據(jù)測試看看


寫了兩條數(shù)據(jù),正常,OK先就這樣,接下來寫中間件。

?建立一個中間件連接數(shù)據(jù)庫

我們先去弄一下MySQL中間件,它就在E4A安裝目錄下,如圖:



這樣我們就快速到達了E4A根目錄,我們?nèi)タ纯矗?/p>


就在這里了,我們把它復制一份到桌面,免得弄錯了就沒得搞了:

它這里自帶說明。寫得很詳細了


這里要填數(shù)據(jù)庫密碼,如上圖

照著下圖填:


寫好是這個樣子:


接著保存上傳,寶塔面板就方便了:

點一下這個路徑


可以看到一個文件管理器,上面就有上傳按鈕,直接上傳吧,我表示什么ftp啥的都不需要。。。


訪問一下中間件地址看看能不能用

輸入中間件地址:mysql.ray-o.cn/openapi_unsafe.php,跳到了百度那就沒錯了,這是一個障眼法。。。

最后,經(jīng)測中間件必須使用PHP5.3,不然會出錯,這一點目前E4A官方未在說明文檔提到,已反饋。

?編寫E4A程序客戶端APP源碼 

這次我就做個例子,隨便搞一下子,如下圖:


為了達到目的,我需要在上面覆蓋一層標簽來遮蔽下面的這些東西,就像這樣:


然后我們做幾個控件讓用戶可以輸入卡密并且驗證,如圖:


這樣就可以了,接下來寫代碼,我有個習慣,那就是寫一點測試一點,不是全部寫完再測試,首先我們要做的是測試數(shù)據(jù)庫是否能連上,看如下代碼:

做這個前需要先擺上一個mysql數(shù)據(jù)庫的類庫,如下圖:


接著我們再來寫代碼:


運行一下子:

Screenshot_2019-02-10-12-24-20-237_com

OK,接著寫輸入卡密驗證哪一塊吧

我在構(gòu)思代碼的時候發(fā)現(xiàn)卡密還需要一個使用者字段,不然不知道卡密有沒有使用過,所以加一個字段吧


然后寫相關(guān)代碼,做這個中間出了些岔子,看上面終極教程的E4A排除運行閃退故障,下面看代碼:



事件 主窗口.創(chuàng)建完畢()
	MySQL數(shù)據(jù)庫1.連接數(shù)據(jù)庫("http://mysql.ray-o.cn/openapi_unsafe.php","localhost:3306","","","mysql_ray_o_cn")
結(jié)束 事件

事件 MySQL數(shù)據(jù)庫1.連接數(shù)據(jù)庫完畢(連接結(jié)果 為 邏輯型)
	判斷 連接結(jié)果
		分支 真
			信息框("連接結(jié)果","已連接上","知道了")
		分支 假
			信息框("連接結(jié)果","連接失敗","知道了")
	結(jié)束 判斷
結(jié)束 事件

事件 按鈕1.被單擊()
	MySQL數(shù)據(jù)庫1.查詢記錄("卡密表","卡密,使用者","卡密=" & "'" & 編輯框1.內(nèi)容 & "'")
結(jié)束 事件

變量 集合內(nèi)項目數(shù) 為 整數(shù)型
事件 MySQL數(shù)據(jù)庫1.查詢記錄完畢(查詢結(jié)果 為 集合)
	集合內(nèi)項目數(shù) = 查詢結(jié)果.取項目總數(shù)()
	如果 集合內(nèi)項目數(shù) = 0 則
		彈出提示("卡密錯誤")
	否則如果 集合內(nèi)項目數(shù) <> 0 則
	    如果 查詢結(jié)果.取項目(0)(1) = "" 則
		    MySQL數(shù)據(jù)庫1.修改記錄("卡密表","使用者=" & "'" & 手機1.取IMEI碼() & "'","卡密=" & "'" & 編輯框1.內(nèi)容 & "'")
		否則如果  查詢結(jié)果.取項目(0)(1) <> "" 則
		    彈出提示("卡密已被使用過")
		結(jié)束 如果
	結(jié)束 如果
結(jié)束 事件

事件 MySQL數(shù)據(jù)庫1.修改記錄完畢(添加結(jié)果 為 邏輯型)
	判斷 添加結(jié)果
		分支 真
			彈出提示("卡密激活成功")
	結(jié)束 判斷
結(jié)束 事件

這里我還用了一個手機組件,看吧:


用它取IMEI碼,用來驗證用戶身份。

下面解釋一下代碼:


這一塊寫給我們看的,讓我們知道數(shù)據(jù)庫是不是正常連接,發(fā)布的時候需要改寫或者刪除,用戶不需要知道數(shù)據(jù)庫正常與否,頂多當服務(wù)器壞了的時候提示他們服務(wù)器故障,請聯(lián)系開發(fā)者。

現(xiàn)在來整理一下思路:當用戶輸入了卡密,接下來會干啥?點擊驗證按鈕對吧?驗證按鈕的組件對象名是按鈕1吧?寫吧:


我們這句話說的就是把卡密輸入框的卡密拿去查數(shù)據(jù)庫,看看有沒有這個卡密,同時看看這個卡密的使用者是誰,注意:在MYSQL數(shù)據(jù)庫里面中文字符必須用單引號引出,但是在E4A里面做為查庫的條件,單引號是做為文本使用的,它旁邊就需要上雙引號,為了穩(wěn),我們也加上單引號,為了方便你們看我就一步步寫清楚了。

然后就是查完庫返回一個結(jié)果了我們根據(jù)結(jié)果來判斷這個卡密是否有效,如果有效則注冊卡密使用者為本機,如果無效給出理由:


這是一個判斷結(jié)構(gòu)的語句塊,分為以下幾個情況:

查不到這個卡密,反饋用戶:卡密錯誤

查到了這個卡密,發(fā)現(xiàn)已經(jīng)被注冊,反饋用戶這個卡密已被使用

查到了這個卡密,并且無人注冊,反饋驗證成功給客戶

上面我們就完成了卡密驗證,接著我們寫程序啟動或者卡密驗證成功后程序測試卡密是否過期,如果沒有過期的話就把遮住內(nèi)容的標簽清除的操作,因為有兩個點要調(diào)用這個代碼,所以我們圖個方便寫個過程吧。

最后寫出來大概就是這些代碼:


變量 查庫命令頭 為 文本型
事件 主窗口.創(chuàng)建完畢()
	MySQL數(shù)據(jù)庫1.連接數(shù)據(jù)庫("http://mysql.ray-o.cn/openapi_unsafe.php","localhost:3306","","","mysql_ray_o_cn")
結(jié)束 事件

事件 MySQL數(shù)據(jù)庫1.連接數(shù)據(jù)庫完畢(連接結(jié)果 為 邏輯型)
	判斷 連接結(jié)果
		分支 真
            驗證()
		分支 假
			信息框("連接結(jié)果","連接失敗","知道了")
	結(jié)束 判斷
結(jié)束 事件

事件 按鈕1.被單擊()
	查庫命令頭 = "查卡密信息"
	MySQL數(shù)據(jù)庫1.查詢記錄("卡密表","卡密,使用者","卡密=" & "'" & 編輯框1.內(nèi)容 & "'")
結(jié)束 事件

	變量 集合內(nèi)項目數(shù) 為 整數(shù)型
	變量 卡密到期時間 為 整數(shù)型
	變量 設(shè)備時間 為 整數(shù)型
	變量 月份 為 文本型
	變量 日 為 文本型
事件 MySQL數(shù)據(jù)庫1.查詢記錄完畢(查詢結(jié)果 為 集合)
	集合內(nèi)項目數(shù) = 查詢結(jié)果.取項目總數(shù)()
	判斷 查庫命令頭
		分支 "查卡密信息"
        	如果 集合內(nèi)項目數(shù) = 0 則
          		彈出提示("卡密錯誤")
           	否則如果 集合內(nèi)項目數(shù) <> 0 則
           	    如果 查詢結(jié)果.取項目(0)(1) = "" 則
        		    MySQL數(shù)據(jù)庫1.修改記錄("卡密表","使用者=" & "'" & 手機1.取IMEI碼() & "'","卡密=" & "'" & 編輯框1.內(nèi)容 & "'")
					驗證()
        		否則如果  查詢結(jié)果.取項目(0)(1) <> "" 則
        		    彈出提示("卡密已被使用過")
        		結(jié)束 如果
        	結(jié)束 如果
		分支 "查設(shè)備在卡密系統(tǒng)注冊的信息"
			如果 集合內(nèi)項目數(shù) = 0 則
          		彈出提示("請輸入卡密完成驗證")
           	否則如果 集合內(nèi)項目數(shù) <> 0 則
			    '開始處理時間文本
				卡密到期時間 = 子文本替換(查詢結(jié)果.取項目(0)(1),".","")
				如果 取文本長度(取月份(取現(xiàn)行時間())) = 1 則
					月份 = 0 & 取月份(取現(xiàn)行時間())
				否則
				    月份 = 取月份(取現(xiàn)行時間())
				結(jié)束 如果
				如果 取文本長度(取日(取現(xiàn)行時間())) = 1 則
					日 = 0 & 取日(取現(xiàn)行時間())
				否則
				    日 = 取日(取現(xiàn)行時間())
				結(jié)束 如果
				設(shè)備時間 = 取年份(取現(xiàn)行時間()) & 月份 & 日
'				信息框("時間信息",卡密到期時間 & "|" & 設(shè)備時間,"確定")
				'結(jié)束處理時間文本
           	    如果 卡密到期時間 >= 設(shè)備時間 則
        		    標簽2.可視 = 假
					編輯框1.可視 = 假
					按鈕1.可視 = 假
					彈出提示("通過驗證,祝您使用愉快")
				否則如果 卡密到期時間 <= 設(shè)備時間 則
				    彈出提示("卡密已到期")
        		結(jié)束 如果
        	結(jié)束 如果
	結(jié)束 判斷
結(jié)束 事件

事件 MySQL數(shù)據(jù)庫1.修改記錄完畢(添加結(jié)果 為 邏輯型)
	判斷 添加結(jié)果
		分支 真
			彈出提示("卡密激活成功")
	結(jié)束 判斷
結(jié)束 事件

過程 驗證()
	查庫命令頭 = "查設(shè)備在卡密系統(tǒng)注冊的信息"
	MySQL數(shù)據(jù)庫1.查詢記錄("卡密表","使用者,過期時間","使用者=" & "'" & 手機1.取IMEI碼() & "'")
結(jié)束 過程

說兩個地方吧,剩下的自行體會:

首先是命令頭,就是這個東西:



這個東西的作用就是我們?nèi)绻枰獌纱握{(diào)用到同一個事件,為了區(qū)分事件下應該響應那個代碼塊而設(shè)定的規(guī)則。

另一個點就是一定要注意不要數(shù)據(jù)庫連接命令寫完了立即調(diào)查詢命令,因為連接命令執(zhí)行了此時正在連接還沒有連上,你去查詢肯定什么都查不到,要等連接數(shù)據(jù)庫完畢后拋出的事件里面寫一個判斷連接成功下面再寫這個查詢,如下圖:


這里的驗證過程會立即調(diào)查庫指令


好了先就說這么多吧源碼我放在論壇了,本站不支持附件。

https://www.eruyi.cn/forum.php?mod=viewthread&tid=3670&page=1&extra=#pid62715


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號