全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2744
推到 Plurk!
推到 Facebook!

ADOQUERY+DBF新增資料時發生錯誤

答題得分者是:herbert2
redjeff
一般會員


發表:12
回覆:16
積分:10
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-12 10:11:18 IP:59.125.xxx.xxx 未訂閱
各位大大,我用ADOQUERY先做了新增TABLE的動作,然後在把資料儲存到TABLE裡面,新增TABLE的時候沒有問題,但是在我APPEND資料到TABLE時,在POST的時候出現了
更新或重整的基礎資料表資訊不足」,的問題,如果是KEY值的話,我也有做KEY值的設定,不曉得是什麼原因,
[code delphi]
Table_Wafer_OUT.Active := False;
Table_Wafer_OUT.ConnectionString :='Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files;Initial Catalog=' ExtractFileDir(SaveDialog_OutPutFile.FileName);
Table_Wafer_OUT.SQL.Clear;
Table_Wafer_OUT.SQL.Text:='CREATE TABLE '檔名'.DBF ('
'SO_NO CHAR(12),SO_LOT_NO CHAR(25),TH_PN CHAR(15),'
'SO_OPNO CHAR(25),SO_STDRATE FLOAT,SO_UPRICE FLOAT,'
'WAFER_NO CHAR(20),SO_QTY FLOAT)';
Table_Wafer_OUT.ExecSQL;

Table_Wafer_OUT.SQL.Clear;
Table_Wafer_OUT.SQL.Text := 'SELECT * FROM ' ExtractFileName(SaveDialog_OutPutFile.FileName);
Table_Wafer_OUT.Active := True;
Table_Wafer_OUT.Append;
.......
Table_Wafer_OUT.Post; //這裡發生錯誤~~~
[/code]
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-12 17:19:10 IP:211.72.xxx.xxx 訂閱
試著先把程式分段執行.
可能 DBF 檔 Data Structure 有問題 (DBF 應無 Float Type 的 Field).
Numeric 15,4 代表含小數點共 15 Bytes, 小數點後有 4 位小數.
編輯記錄
herbert2 重新編輯於 2008-11-12 17:22:45, 註解 無‧
redjeff
一般會員


發表:12
回覆:16
積分:10
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-13 09:22:36 IP:60.244.xxx.xxx 未訂閱
先謝謝這位大大提供的測試方式,我有測試,在create的時候,只建立了字串型態,結果還是一樣
後來我發現之前有發生過這個原因,好像是因為create table時候的檔名長度太長,檔名只存8碼以內都是ok的,超過後,就不行了
我有去查原因,不曉得是不是如微軟所說的"某些ODBC不支援長檔案名稱",網址:support.microsoft.com/kb/213942/zh-tw
原本我是用TABLE BDE的方式,一切都很正常,但是因為此方式如果公司每台電腦都要用系統的話,就必須裝BDE,很麻煩,想說改成ADO的方式,前端就不用在裝BDE了
===================引 用 herbert2 文 章===================
試著先把程式分段執行.
可能 DBF 檔 Data Structure 有問題 (DBF 應無 Float Type 的 Field).
Numeric 15,4 代表含小數點共 15 Bytes, 小數點後有 4 位小數.
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-13 09:56:23 IP:211.72.xxx.xxx 訂閱
DBF 是很老的 Flat Table 系統, 不支援長檔名.
ADO 可支援 DBF, 但 Create Table 不正常.
又 DBF 檔頭年度 1 Bytes, 0x63 代表 1999年, 0x02 代表 2002年;
而 ADO 用 Acess 標準, 0x63 代表 1999年, 0x66 代表 2002 年.

若要正常, 有兩種方法:
(1) 用 DOS Prompt 執行 DBase III 先 Create DBF 空檔.
(2) 用 Binary 方式直接依 DBF 檔頭規則 Create DBF 空檔.
要用時, 以 FileCopy 方式拷成您要用的檔名.

較好的方法: 改用 MS Acess 或 Prodox.

===================引 用 redjeff 文 章===================
先謝謝這位大大提供的測試方式,我有測試,在create的時候,只建立了字串型態,結果還是一樣
後來我發現之前有發生過這個原因,好像是因為create table時候的檔名長度太長,檔名只存8碼以內都是ok的,超過後,就不行了
我有去查原因,不曉得是不是如微軟所說的"某些ODBC不支援長檔案名稱",網址:support.microsoft.com/kb/213942/zh-tw
原本我是用TABLE BDE的方式,一切都很正常,但是因為此方式如果公司每台電腦都要用系統的話,就必須裝BDE,很麻煩,想說改成ADO的方式,前端就不用在裝BDE了
redjeff
一般會員


發表:12
回覆:16
積分:10
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-12-30 14:42:19 IP:59.125.xxx.xxx 未訂閱
資料類型沒辦法做更動,所以目前的解決方式就是請公司的相關單位把12碼改成8碼
因為公司不太可以接受大幅度的變更,謝謝分享^_^

===================引 用 herbert2 文 章===================
DBF 是很老的 Flat Table 系統, 不支援長檔名.
ADO 可支援 DBF, 但 Create Table 不正常.
又 DBF 檔頭年度 1 Bytes, 0x63 代表 1999年, 0x02 代表 2002年;
而 ADO 用 Acess 標準, 0x63 代表 1999年, 0x66 代表 2002 年.

若要正常, 有兩種方法:
(1) 用 DOS Prompt 執行 DBase III 先 Create DBF 空檔.
(2) 用 Binary 方式直接依 DBF 檔頭規則 Create DBF 空檔.
要用時, 以 FileCopy 方式拷成您要用的檔名.

較好的方法: 改用 MS Acess 或 Prodox.

===================引 用 redjeff 文 章===================
先謝謝這位大大提供的測試方式,我有測試,在create的時候,只建立了字串型態,結果還是一樣
後來我發現之前有發生過這個原因,好像是因為create table時候的檔名長度太長,檔名只存8碼以內都是ok的,超過後,就不行了
我有去查原因,不曉得是不是如微軟所說的"某些ODBC不支援長檔案名稱",網址:support.microsoft.com/kb/213942/zh-tw
原本我是用TABLE BDE的方式,一切都很正常,但是因為此方式如果公司每台電腦都要用系統的話,就必須裝BDE,很麻煩,想說改成ADO的方式,前端就不用在裝BDE了
系統時間:2024-05-06 23:06:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!