LabSQL可以接收陣列資料嗎?

我目前正在用labview做品質管制,我是利用rs232的游標卡尺接收資料後然後在傳送到access裡,我試著做1 次可傳送10筆資料但是就是不行,只能傳送一筆資料,所以資料庫裡面就只有一行而已(如下圖),如果我想要1次傳送10筆資料, 請問程式要如何寫

![](upload://pV8vqsd3Ar1S8nDmBfA4U3G3DXw.jpeg)

2004-05-23_221716_SQLforRS232.vi

 

可能沒有辦法一次上傳2D資料到SQL資料庫,一次好像只能傳1D的資料到SQL資料庫。(如果您後來知道怎麼做的話,也請告訴 我)

但是可以一次從SQL資料庫中,取出2D的資料,範例「Example - Fetch a Table.vi」就是這樣子的。其實你仔細看「Example - Fetch a Table.vi」內部的程式,會發現其實它也是靠迴圈來達成,並不是真正從SQL資料庫中,一次讀取2D的資料。

![](upload://tr3Lp96JkwvwEo7eBfntsquQKXZ.jpeg)

我在寫網頁的時候,也是一次丟1D資料到SQL資料庫,或是一次從SQL資料庫傳回1D資料。你所看到的網頁內容,好想是2D資 料,但是那是靠回圈才辦到的唷。

不過,在程式的寫法上,可以動一些手腳,讓電腦的負擔減少。

如下圖,只要把「SQL Execute」放在迴圈內就可以了。其他的四個icon放在迴圈外,這樣就可以節省資源。

![](upload://lz3qzIGlDHW469pb83Wdvc4HlYY.jpeg)

Benjamin38131.4062731481

感恩,馬上去試看看

2004-11-29_155746_writerSQL-1.vi

上面是我打的程式.想請問當我只使用資料庫的部份時(即本程式的下半部.資料輸入為自行輸入一個STRING)寫入ACCESS時並不會發生任何錯誤.但當我將資料庫輸入的部份接上掃描頻率時.卻會發生錯誤.錯誤名稱如下.
P.S 當錯誤出現時按CONTINUE.會寫入一次.但又會跳出錯誤視窗

Error 4 occurred at Write File+ (string): Write File

Possible reason(s):

LabVIEW:  End of file encountered.
---
NI-488:  Invalid argument or arguments.

而資料寫入的方面也是只能寫入1D.我照著前面提到的方法將SQL EXECUTE放入迴圈內.但我實在想不到.如何能再寫入第二個欄位.是要靠SQL語言來指定欄位.還是用迴圈有更明確的解決方式

問題蠻多的實在很抱歉...希望各位大大幫忙解決...感激不盡

系統版本
XP
LABVIEW7
資料庫
目前使用ACCESS
最終會使用MYSQL

 

madmask38320.6802777778

[QUOTE=Benjamin]

但是可以一次從SQL資料庫中,取出2D的資料,範例「Example - Fetch a Table.vi」就是這樣子的。其實你仔細看「Example - Fetch a Table.vi」內部的程式,會發現其實它也是靠迴圈來達成,並不是真正從SQL資料庫中,一次讀取2D的資料。

[/QUOTE]

這邊更正一下 執行SQL中的SELECT指令後 的確是從資料庫一次取回2D的資料 但是屬於String 還不是Array形式 ( ADO Recordset GetString.vi ), LabSQL中再透過迴圈及搜尋字串Pattern的方式來將整個String變化成Array, MySQL中若透過MySQL的console下查詢指令 也是一次就傳回2D的資料

我看了一下MySQL Administrator做出來的備份檔(其實就是一連串的SQL指令) 的確可以一次插入多筆資料 例如:

INSERT INTO `TABLE` (`ITEM`) VALUES('DATA1'),('DATA2')....('DATA14);

上例中每筆資料僅有一個欄位 欄位名稱為ITEM

我看到的MySQL SQL備份檔在一個INSERT指令最多用了14個VALUE 也就是說單一指令插入14個筆資料 是否更多還有待試驗 如果INSERT指令可以這樣用的話 那或許UPDATE指令亦可 還有待有空的人幫忙試驗一下

不過不確定Access也可以這樣用啦 有些SQL集是各家資料庫系統的私有擴充 例如若想自MySQL一次僅傳回一筆資料 使用SELECT * FROM 資料表 limit 1,1 用在ACCESS上就會出苞 因為limit是MySQL的私有擴充 要轉換後端使用的資料庫系統時 這點要多注意一下 

[QUOTE=Ozzy]

我看了一下MySQL Administrator做出來的備份檔(其實就是一連串的SQL指令) 的確可以一次插入多筆資料 例如:

INSERT INTO `TABLE` (`ITEM`) VALUES('DATA1'),('DATA2')....('DATA14);

上例中每筆資料僅有一個欄位 欄位名稱為ITEM

[/QUOTE]

那意思是說我在table的位置打上表格名稱.item打上我指定的欄位名稱
那就可以在相同的表格中.由於輸入的item不同.所以資料會存到不同的欄位(但仍在同一表格內).也不會發生輸入值與目標欄位不符的問題
不知這樣我的看法正確ㄇ???

madmask38321.6131134259

[QUOTE=madmask][QUOTE=Ozzy]

我看了一下MySQL Administrator做出來的備份檔(其實就是一連串的SQL指令) 的確可以一次插入多筆資料 例如:

INSERT INTO `TABLE` (`ITEM`) VALUES('DATA1'),('DATA2')....('DATA14);

上例中每筆資料僅有一個欄位 欄位名稱為ITEM

[/QUOTE]

那意思是說我在table的位置打上表格名稱.item打上我指定的欄位名稱
那就可以在相同的表格中.由於輸入的item不同.所以資料會存到不同的欄位(但仍在同一表格內).也不會發生輸入值與目標欄位不符的問題
不知這樣我的看法正確ㄇ???

[/QUOTE]

當然在同一表格內 您的SQL指令不是已指定資料表名稱了嗎? 不過請注意 一個VALUE括號代表一筆資料 我上面打的例子會新增14筆資料到表格中

不過我們說的欄位/表格好像定義不一樣? 我說的表格意思等同於ACCESS中的資料表

貼個我剛剛在MySQL Command Line裡試的例子吧 同時寫入兩筆資料

mysql> show tables
    -> ;
+----------------+
| Tables_in_zero |
+----------------+
| boob           |
| recycle        |
| test           |
| zero           |
+----------------+
4 rows in set (0.00 sec)

mysql> describe test;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| A     | text |      | PRI |         |       |
| B     | text |      |     |         |       |
+-------+------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> INSERT INTO `TEST` (`A`,`B`) VALUES ('CSR','IBM'),('AMD','ATI');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM TEST;
+-----+-----+
| A   | B   |
+-----+-----+
| CSR | IBM |
| AMD | ATI |
+-----+-----+
2 rows in set (0.00 sec)

就是以INSERT INTO `TEST` (`A`,`B`) VALUES ('CSR','IBM'),('AMD','ATI');來一次寫入資料

希望以上對有使用到LabSQL與MySQL的各位同好有所幫助

感謝大大熱心ㄉ講解
我的問題都已經解決了
接下來著手於登入的問題
實在非常ㄉ感謝