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

2019-07-25 10:41 更新

?本節(jié)要點(diǎn)

首先是準(zhǔn)備工作,同時(shí)這部分可以復(fù)習(xí)前面內(nèi)容:

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

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

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

然后就是幾個(gè)操作過(guò)程:

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

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

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

下面分點(diǎn)寫(xiě)

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

我這里有寶塔軟件,直接用吧,因?yàn)槲覀円玫街虚g件,所以我這里直接創(chuàng)建一個(gè)網(wǎng)站空間,讓它附帶數(shù)據(jù)庫(kù)。這個(gè)操作我們可以在瀏覽器用寶塔web面板完成。


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


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

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

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


先來(lái)建一個(gè)表,空庫(kù)是沒(méi)有表的


然后創(chuàng)建字段


發(fā)現(xiàn)出錯(cuò),ID最長(zhǎng)255個(gè)字符,這個(gè)就是INT型數(shù)字的最大長(zhǎng)度,沒(méi)想起來(lái)尷尬了~

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


好了,下面就試試


連接上了看看里面


空空如也表都沒(méi)建。。算了重建吧。


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



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


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

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

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



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


就在這里了,我們把它復(fù)制一份到桌面,免得弄錯(cuò)了就沒(méi)得搞了:

它這里自帶說(shuō)明。寫(xiě)得很詳細(xì)了


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

照著下圖填:


寫(xiě)好是這個(gè)樣子:


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

點(diǎn)一下這個(gè)路徑


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


訪問(wèn)一下中間件地址看看能不能用

輸入中間件地址:mysql.ray-o.cn/openapi_unsafe.php,跳到了百度那就沒(méi)錯(cuò)了,這是一個(gè)障眼法。。。

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

?編寫(xiě)E4A程序客戶端APP源碼 

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


為了達(dá)到目的,我需要在上面覆蓋一層標(biāo)簽來(lái)遮蔽下面的這些東西,就像這樣:


然后我們做幾個(gè)控件讓用戶可以輸入卡密并且驗(yàn)證,如圖:


這樣就可以了,接下來(lái)寫(xiě)代碼,我有個(gè)習(xí)慣,那就是寫(xiě)一點(diǎn)測(cè)試一點(diǎn),不是全部寫(xiě)完再測(cè)試,首先我們要做的是測(cè)試數(shù)據(jù)庫(kù)是否能連上,看如下代碼:

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


接著我們?cè)賮?lái)寫(xiě)代碼:


運(yùn)行一下子:

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

OK,接著寫(xiě)輸入卡密驗(yàn)證哪一塊吧

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


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



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

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

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

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

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

這里我還用了一個(gè)手機(jī)組件,看吧:


用它取IMEI碼,用來(lái)驗(yàn)證用戶身份。

下面解釋一下代碼:


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

現(xiàn)在來(lái)整理一下思路:當(dāng)用戶輸入了卡密,接下來(lái)會(huì)干啥?點(diǎn)擊驗(yàn)證按鈕對(duì)吧?驗(yàn)證按鈕的組件對(duì)象名是按鈕1吧?寫(xiě)吧:


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

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


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

查不到這個(gè)卡密,反饋用戶:卡密錯(cuò)誤

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

查到了這個(gè)卡密,并且無(wú)人注冊(cè),反饋驗(yàn)證成功給客戶

上面我們就完成了卡密驗(yàn)證,接著我們寫(xiě)程序啟動(dòng)或者卡密驗(yàn)證成功后程序測(cè)試卡密是否過(guò)期,如果沒(méi)有過(guò)期的話就把遮住內(nèi)容的標(biāo)簽清除的操作,因?yàn)橛袃蓚€(gè)點(diǎn)要調(diào)用這個(gè)代碼,所以我們圖個(gè)方便寫(xiě)個(gè)過(guò)程吧。

最后寫(xiě)出來(lái)大概就是這些代碼:


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

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

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

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

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

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

說(shuō)兩個(gè)地方吧,剩下的自行體會(huì):

首先是命令頭,就是這個(gè)東西:



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

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


這里的驗(yàn)證過(guò)程會(huì)立即調(diào)查庫(kù)指令


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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)