請問SQL語句(INSERT INTO ...) |
尚未結案
|
zxy666666
中階會員 ![]() ![]() ![]() 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
各位大大好!
我有如下代碼是想在現有資料表(test)上增加一筆記錄,但是運行時出現錯誤.(如附圖)
請問:
1.我查到是這兩行代碼出錯:
SQL.Add(' ''' + DateToStr(DT) + ''', ') ; //存入系統日期
SQL.Add(' ''' + TimeToStr(sTime) + ''', ') ; // 存入系統時間
請問怎麼做修改? 2.有沒有更簡潔的的寫法(我覺得自己好像寫的太麻煩了,但是又不知道怎麼寫好),請各教大大教導一下,好嗎?謝謝!
procedure TForm1.savedata; var DT,sTime:TDateTime; begin DT := Date ; //系統日期 sTime := Time ; //系統時間 // Showmessage(Datetostr(DT)); // 2005/03/19 // Showmessage(Timetostr(sTime)); // 13:01:05 with Query2 do begin Close; SQL.Clear; SQL.Add('INSERT INTO test ( ' ) ; SQL.Add(' Gg, ') ; SQL.Add(' Ph, ') ; SQL.Add(' TestDate, ') ; // 日期 SQL.Add(' TestTime, ') ; // 時間 SQL.Add(' Wd, ') ; SQL.Add(' Hd, ') ; SQL.Add(' Kd, ') ; SQL.Add(' Yl ') ; SQL.Add(') VALUES ( ') ; SQL.Add(' ''' + Edit1.Text+ ''', ') ; SQL.Add(' ''' + Edit2.Text+ ''', ') ; SQL.Add(' ''' + DateToStr(DT) + ''', ') ; // SQL.Add(' ''' + TimeToStr(sTime) + ''', ') ; // SQL.Add(' ''' + floattostr(iSSAg1.Value)+ ''', ') ; SQL.Add(' ''' + Edit3.Text+ ''', ') ; SQL.Add(' ''' + Edit4.Text+ ''', ') ; SQL.Add(' ''' + Floattostr(123) + ''' ') ; //存入測試資料123 SQL.Add(' ) ' ) ; ExecSQL ; end; end; |
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 因為您的TestDate欄位和TestTime欄位在資料表中的形態分別為日期和時間﹐所以在您以SQL語法將資料新增到資料表時﹐也要使用同樣的形態﹐您在SQL中將其轉成String字串形態﹐所以才會出錯﹐其實﹐在其它的欄位處理時您也將其轉為String字串形態在新增到資料表中﹐這樣也是會出錯的﹐所以當遇到這種非String字串形態情況時﹐建議您使用Param方法來處理﹐範例如下﹕
procedure TForm1.savedata; var DT,sTime:TDateTime; begin DT := Date ; //系統日期 sTime := Time ; //系統時間 // Showmessage(Datetostr(DT)); // 2005/03/19 // Showmessage(Timetostr(sTime)); // 13:01:05 with Query2 do begin Close; SQL.Clear; SQL.Add('INSERT INTO test (Gg, Ph, TestDate, TestTime, Wd, '); SQL.Add('Hd, kd, Y1) VALUES ( ''' + Edit1.Text+ ''', '); SQL.Add(' ''' + Edit2.Text+ ''', '); SQL.Add(':TestDate, :TestTime, :Wd, :Hd, :kd, :Y1'); ParamByName['TestDate'].Value := DT; ParamByName['TestTime'].Value := sTime; ParamByName['Wd'].Value := iSSAg1.Value; ParamByName['Hd'].Value := StrToFloat(Edit3.Text); ParamByName['kd'].Value := StrToFloat(Edit4.Text); ParamByName['Y1'].Value := 123; ExecSQL; end; end;=================================
------
忻晟 |
zxy666666
中階會員 ![]() ![]() ![]() 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |