改了資料庫欄位型態後程式連不上資料庫。 |
答題得分者是:smallfox
|
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
一啟動程式就錯誤的訊息
會發生這問題的起因,程式沒改,只改資料型態,把紅圈圈的地方改成數字型態。 連線方式是在程式中設定。 ADOTable1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;' 'Data Source=' GetCurrentDir '\日記帳.mdb;' 'Persist Security Info=False'; ADOTable1.TableName:='日記帳'; DataSource1.DataSet:=ADOTable1; DBGrid1.DataSource:=DataSource1; ADOTable1.Open; ===================引 用 老大仔 文 章=================== 請把code貼上來 好讓大家知道哪裡有問題 另外~ 可以把錯誤訊息詳細的說出來嗎??? |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
程式不是錯在Application.Run;
是錯在你那個Form中是否有用到支出欄位 並且應該是程式碼在抓資料時 您的型態不符才對 ===================引 用 tokiama 文 章=================== 一啟動程式就錯誤的訊息 會發生這問題的起因,程式沒改,只改資料型態,把紅圈圈的地方改成數字型態。 連線方式是在程式中設定。 ADOTable1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;' 'Data Source=' GetCurrentDir '\日記帳.mdb;' 'Persist Security Info=False'; ADOTable1.TableName:='日記帳'; DataSource1.DataSet:=ADOTable1; DBGrid1.DataSource:=DataSource1; ADOTable1.Open; ===================引 用 老大仔 文 章=================== 請把code貼上來 好讓大家知道哪裡有問題 另外~ 可以把錯誤訊息詳細的說出來嗎??? |
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
之後想一想...也做了測試,那個出錯是在 ADOTable Open 之後才出問題。
在這之前就只有設定連線的方式跟把資料撈到 DBGrid 上。 把資料顯示在 DBGrid 上,因資料庫是 Integer 而 DBGrid 上面是只能放字串,這是出錯的原因? 目前只想到這個,我連上資料庫後讓資料顯示在 DBGrid 上時,要怎麼讓顯示時先轉型態啊? ===================引 用 老大仔 文 章=================== 程式不是錯在Application.Run; 是錯在你那個Form中是否有用到支出欄位 並且應該是程式碼在抓資料時 您的型態不符才對 |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
DBGrid並不會因為資料庫裡的欄位是數字就會錯掉
既然是Open之後才錯的 那麼是不是應該先檢查該段程式碼?? 不管是Open前 還是Open後 都應檢查 ===================引 用 tokiama 文 章=================== 之後想一想...也做了測試,那個出錯是在 ADOTable Open 之後才出問題。 在這之前就只有設定連線的方式跟把資料撈到 DBGrid 上。 把資料顯示在 DBGrid 上,因資料庫是 Integer 而 DBGrid 上面是只能放字串,這是出錯的原因? 目前只想到這個,我連上資料庫後讓資料顯示在 DBGrid 上時,要怎麼讓顯示時先轉型態啊? ===================引 用 老大仔 文 章=================== 程式不是錯在Application.Run; 是錯在你那個Form中是否有用到支出欄位 並且應該是程式碼在抓資料時 您的型態不符才對 |
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
procedure TDiaryAccountsForm.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to DiaryAccountsForm.ControlCount-1 do if DiaryAccountsForm.Controls[i] is TEdit then (DiaryAccountsForm.Controls[i] as TEdit).Text := ''; ShortDateFormat:='yyyy-MM-dd'; //設定日期顯示格式為yyyy-MM-dd MonthCalendar1.Date:=Now; DateTimePicker1.Date:=Now; DateTimePicker2.Date:=Now; Edit4.Text:='0'; Edit5.Text:='0'; Memo1.Lines.Clear; Edit1.Enabled:=False; Edit2.Enabled:=False; Edit1.Text:=DateToStr(MonthCalendar1.Date); Button3.Enabled:=False; //--------------------------------------------------------------------資料庫連線 ConnectionPath:= 'Provider=Microsoft.Jet.OLEDB.4.0;' 'Data Source=' GetCurrentDir '\日記帳.mdb;' 'Persist Security Info=False'; //資料庫連線路徑設定↑↑↑ ADOTable1.ConnectionString:=ConnectionPath; ADOQuery1.ConnectionString:=ConnectionPath; ADOTable1.TableName:='日記帳'; DataSource1.DataSet:=ADOTable1; DBGrid1.DataSource:=DataSource1; ADOTable1.Open; //------------------------------------------------------------------------------ ADOTable1.Filtered:=True; //篩選功能開啟 ADOTable1.Filter:='日期 = ''' DateToStr(MonthCalendar1.Date) ''''; //篩選指令→ 欄位名 = 條件字串 PS:字串須用''包起來↑↑↑ Edit2.Text:=IntToStr(ADOTable1.RecordCount 1); //ADOTable.RecordCount 計算資料筆數用屬性 end; 分隔線==============================================================================================FormCreate 是所有程式最先執行比 initialization 慢的對吧? 在這之前就沒有其他使用到支出這欄位的東西了。 之後地方有先註解起來去執行過了,還是支出欄位型態不對。 ===================引 用 老大仔 文 章=================== DBGrid並不會因為資料庫裡的欄位是數字就會錯掉 既然是Open之後才錯的 那麼是不是應該先檢查該段程式碼?? 不管是Open前 還是Open後 都應檢查
編輯記錄
tokiama 重新編輯於 2010-11-08 00:32:11, 註解 程式碼顯示有問題‧
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
請檢查ADOTable中是否有Field??
有的話請先清空再使用 ===================引 用 tokiama 文 章=================== procedure TDiaryAccountsForm.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to DiaryAccountsForm.ControlCount-1 do if DiaryAccountsForm.Controls[i] is TEdit then (DiaryAccountsForm.Controls[i] as TEdit).Text := ''; ShortDateFormat:='yyyy-MM-dd'; //設定日期顯示格式為yyyy-MM-dd MonthCalendar1.Date:=Now; DateTimePicker1.Date:=Now; DateTimePicker2.Date:=Now; Edit4.Text:='0'; Edit5.Text:='0'; Memo1.Lines.Clear; Edit1.Enabled:=False; Edit2.Enabled:=False; Edit1.Text:=DateToStr(MonthCalendar1.Date); Button3.Enabled:=False; //--------------------------------------------------------------------資料庫連線 ConnectionPath:= 'Provider=Microsoft.Jet.OLEDB.4.0;' 'Data Source=' GetCurrentDir '\日記帳.mdb;' 'Persist Security Info=False'; //資料庫連線路徑設定↑↑↑ ADOTable1.ConnectionString:=ConnectionPath; ADOQuery1.ConnectionString:=ConnectionPath; ADOTable1.TableName:='日記帳'; DataSource1.DataSet:=ADOTable1; DBGrid1.DataSource:=DataSource1; ADOTable1.Open; //------------------------------------------------------------------------------ ADOTable1.Filtered:=True; //篩選功能開啟 ADOTable1.Filter:='日期 = ''' DateToStr(MonthCalendar1.Date) ''''; //篩選指令→ 欄位名 = 條件字串 PS:字串須用''包起來↑↑↑ Edit2.Text:=IntToStr(ADOTable1.RecordCount 1); //ADOTable.RecordCount 計算資料筆數用屬性 end; 分隔線==============================================================================================FormCreate 是所有程式最先執行比 initialization 慢的對吧? 在這之前就沒有其他使用到支出這欄位的東西了。 之後地方有先註解起來去執行過了,還是支出欄位型態不對。 |
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
|
smallfox
高階會員 發表:2 回覆:113 積分:128 註冊:2003-02-19 發送簡訊給我 |
|
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
可以了!謝謝,也很感謝一直在教不才的我的老大仔。
但是移除後沒再拉一次跟我打了ADOTable1.Field.Clear一樣會出現錯誤訊息。 TField可以用打的輸入嗎? ===================引 用 smallfox 文 章=================== 你對 ADOTable1 這個元件點兩下, 看看是否定義了 TField, 若有的話, 請檢查 "支出" 這個欄位在屬性表上是否是 支出: TStringField or 支出: TWideStringField 若是, 把它移除, 再重新拉進來就可以了 .... |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
當然可以
錯誤訊息?那就得看是怎樣的錯誤訊息啊 你給的資訊太少了... ===================引 用 tokiama 文 章=================== 可以了!謝謝,也很感謝一直在教不才的我的老大仔。 但是移除後沒再拉一次跟我打了ADOTable1.Field.Clear一樣會出現錯誤訊息。 TField可以用打的輸入嗎? ===================引 用 smallfox 文 章=================== 你對 ADOTable1 這個元件點兩下, 看看是否定義了 TField, 若有的話, 請檢查 "支出" 這個欄位在屬性表上是否是 支出: TStringField or 支出: TWideStringField 若是, 把它移除, 再重新拉進來就可以了 .... |
smallfox
高階會員 發表:2 回覆:113 積分:128 註冊:2003-02-19 發送簡訊給我 |
移除掉沒再拉進來, 執行後就會出現錯誤訊息, 可能是在程式碼或元件設定中有用到:
"支出" 這樣的欄位名稱, 因為沒拉進來, 當然不會出現在程式碼定義之內, 編譯自然不會出錯, 但執行時要用到, 程式就出現錯誤訊息了 ... 如老大仔所言, TField當然可以動態產生, 只是要多寫程式碼, 不太方便, 通常會在設計時期就將所需的TField拉進來. (老大仔, 不好意思, 搶了你的榮光 !!) ===================引 用 tokiama 文 章=================== 可以了!謝謝,也很感謝一直在教不才的我的老大仔。 但是移除後沒再拉一次跟我打了ADOTable1.Field.Clear一樣會出現錯誤訊息。 TField可以用打的輸入嗎? ===================引 用 smallfox 文 章=================== 你對 ADOTable1 這個元件點兩下, 看看是否定義了 TField, 若有的話, 請檢查 "支出" 這個欄位在屬性表上是否是 支出: TStringField or 支出: TWideStringField 若是, 把它移除, 再重新拉進來就可以了 .... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |