SQLite Locate 型態不支援 |
答題得分者是:GrandRURU
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
var
SQLite:TSimpleDataSet; strPath:string; dbExist:Boolean; i:integer; begin inherited; strPath:=ExtractFilePath(Application.ExeName) 'temp.sqlite'; dbExist:=FileExists(strPath); SQLConnection1.Params.Values['Database'] := strPath; SQLConnection1.Connected:=True; SQLite:=TSimpleDataSet.Create(self); SQLite.Connection:=SQLConnection1; if not dbExist then begin SQLite.DataSet.CommandText:= ' CREATE TABLE "prod_data" ( ' #13 ' "prod_barcode" TEXT, ' #13 ' "prod_name" TEXT );'; SQLite.Execute; end; SQLite.Close; SQLite.DataSet.CommandType:=ctTable; SQLite.DataSet.CommandText:='prod_data'; SQLite.Open; SQLite.Locate('prod_barcode','PP00000001',[]); SQLite.Free; end;
//--------------------------- 錯誤訊息為 Field 'prod_barcode' is of an unsupported type 看起來因該是 不支援的型態 所以我換過 char(20) , varcahr(20), nvarchar(20) 都是一樣的錯誤 開始懷疑難道 SQLite 不支援? 但是 LOACTE 因該是 元件做的事情 只要連上了因該和資料庫沒有關係? 請前輩指導 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
prod_barcode 被識別為什麼欄位型態?
===================引 用 boy330077 文 章=================== var SQLite:TSimpleDataSet; strPath:string; dbExist:Boolean; i:integer; begin inherited; strPath:=ExtractFilePath(Application.ExeName) 'temp.sqlite'; dbExist:=FileExists(strPath); SQLConnection1.Params.Values['Database'] := strPath; SQLConnection1.Connected:=True; SQLite:=TSimpleDataSet.Create(self); SQLite.Connection:=SQLConnection1; if not dbExist then begin SQLite.DataSet.CommandText:= ' CREATE TABLE "prod_data" ( ' #13 ' "prod_barcode" TEXT, ' #13 ' "prod_name" TEXT );'; SQLite.Execute; end; SQLite.Close; SQLite.DataSet.CommandType:=ctTable; SQLite.DataSet.CommandText:='prod_data'; SQLite.Open; SQLite.Locate('prod_barcode','PP00000001',[]); SQLite.Free; end;
//--------------------------- 錯誤訊息為 Field 'prod_barcode' is of an unsupported type 看起來因該是 不支援的型態 所以我換過 char(20) , varcahr(20), nvarchar(20) 都是一樣的錯誤 開始懷疑難道 SQLite 不支援? 但是 LOACTE 因該是 元件做的事情 只要連上了因該和資料庫沒有關係? 請前輩指導 |
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
意思是 prod_barcode
1. 被 delphi 視為 什麼型態嗎? 我不知道從哪裡看 2. 我要Locate 的型態嗎? 是字串,所以我建表的欄位都是選擇字串型態 locate的語法以前也是這樣下,因該沒有問題 //---------------------------------------------------------------------------------------------- 不過我有發現 假設我用Navicat 先建一筆資料進去 Locate就不會錯誤 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
prod_barcode
沒資料前是 TBlobField? TMemoField? TWideField? 有資料後? 如果是 TBlobField ,那 Locate 的確是不能使用的 ===================引 用 boy330077 文 章=================== 意思是 prod_barcode 1. 被 delphi 視為 什麼型態嗎? 我不知道從哪裡看 2. 我要Locate 的型態嗎? 是字串,所以我建表的欄位都是選擇字串型態 locate的語法以前也是這樣下,因該沒有問題 //---------------------------------------------------------------------------------------------- 不過我有發現 假設我用Navicat 先建一筆資料進去 Locate就不會錯誤 |
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
不知道以下對你有沒有幫助...
希望有...@@ [code delphi] procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to SimpleDataSet1.FieldCount - 1 do begin ShowMessage(FieldtypeNames[SimpleDataSet1.Fields[i].DataType]); end; end; [/code] ===================引 用 boy330077 文 章=================== 我再建立 prodbarcode 時 都刻意挑 TEXT 或是 CHAR(20)...... 理論上來說 建起來 因該是字串型態 用 navicat 去看也是字串型態 只是從DELPHI 端不知道 怎麼看 DESIGN 狀態下好像連不上 所以無法判定到底是哪種型態 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
感謝 老大仔
已經取得欄位型態測試 CREATE TABLE 後 就算給的是 CHAR(20) DELPHI 仍認為是 wideMemo 型態 但是我用 navicat 給予一行資料後 卻變成了 widestring 型態 ------------------------------------------- 所以原因是在 wideMemo 不能locate 給了一筆資料DELPHI 又認為他是 widestring 忽然又可以 locate 難道就沒有辦法 create 以後 告訴 delphi 他是 wideString (強制轉換型態之類的???) --------------------回P.D. 大 FireDAC 的部分 因開發環境是 EX3 似乎沒找到 元件 所以沒做測試
編輯記錄
boy330077 重新編輯於 2015-01-23 14:04:35, 註解 無‧
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
If CDs.recordcount = 0 then
Exit; Cds.locate(...) ... 或是自己寫 Scan 的查詢,大概像是: function ScanDataSet(A_SourceDS: TDataSet; const A_FindField: string; AFindValue: Variant):Boolean; begin Result := False; A_DataSet.DisableControls; A_DataSet.First; while not A_DataSet.Eof do begin if A_DataSet.FieldByName(A_FindField).Value = A_FindValue then begin Result := True; Break; end; A_SourceDS.Next; end; A_SourceDS.EnableControls; end; 寫得很簡單,沒有模糊查詢及忽視大小寫功能 找到會回傳 True,並停在找到的那一筆 Row,; 反之則回傳 False,並移到最後一筆。 ===================引 用 boy330077 文 章=================== 感謝 老大仔 已經取得欄位型態測試 CREATE TABLE 後 就算給的是 CHAR(20) DELPHI 仍認為是 wideMemo 型態 但是我用 navicat 給予一行資料後 卻變成了 widestring 型態 ------------------------------------------- 所以原因是在 wideMemo 不能locate 給了一筆資料DELPHI 又認為他是 widestring 忽然又可以 locate 難道就沒有辦法 create 以後 告訴 delphi 他是 wideString (強制轉換型態之類的???) --------------------回P.D. 大 FireDAC 的部分 因開發環境是 EX3 似乎沒找到 元件 所以沒做測試 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
原來 DataType 是用在這邊!
又上了一課。謝謝分享! ===================引 用 老大仔 文 章=================== 不知道以下對你有沒有幫助... 希望有...@@ [code delphi] procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to SimpleDataSet1.FieldCount - 1 do begin ShowMessage(FieldtypeNames[SimpleDataSet1.Fields[i].DataType]); end; end; [/code] ===================引 用 boy330077 文 章=================== 我再建立 prodbarcode 時 都刻意挑 ‚ TEXT ‚ 或是 ‚ CHAR(20)...... 理論上來說 建起來 ‚ 因該是字串型態 用 navicat ‚ 去看也是字串型態 只是從DELPHI 端不知道 怎麼看 ‚ DESIGN 狀態下好像連不上 ‚ 所以無法判定到底是哪種型態 |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
GrandRURU 大大:
您過獎了~ 我只是剛好以前也有需要判斷欄位型態的需求 所以當時有去找了一些相關資訊~ 取之於KTOP用之於KTOP~ ===================引 用 GrandRURU 文 章=================== 原來 DataType 是用在這邊! 又上了一課。謝謝分享! ===================引 用 老大仔 文 章=================== 不知道以下對你有沒有幫助... 希望有...@@ [code delphi] procedure TForm1.Button1Click(Sender: TObject); var ‚ i: Integer; begin ‚ for i := 0 to SimpleDataSet1.FieldCount - 1 do ‚ begin ‚ ‚ ‚ ShowMessage(FieldtypeNames[SimpleDataSet1.Fields[i].DataType]); ‚ end; end; [/code] ===================引 用 boy330077 文 章=================== 我再建立 prodbarcode 時 都刻意挑 ƒ‚‚ TEXT ƒ‚‚ 或是 ƒ‚‚ CHAR(20)...... 理論上來說 建起來 ƒ‚‚ 因該是字串型態 用 navicat ƒ‚‚ 去看也是字串型態 只是從DELPHI 端不知道 怎麼看 ƒ‚‚ DESIGN 狀態下好像連不上 ƒ‚‚ 所以無法判定到底是哪種型態 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |