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

請問sql語法

尚未結案
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-05 18:25:22 IP:211.76.xxx.xxx 未訂閱
txt22:='Update db1 SET no1=:no1,no2=:no2,'; txt22:=txt22 'no3=:no3,no4=:no4'; txt22:=txt22 ' where no9=:no9'; With SimpleDataSet1 do begin dataset.CommandText:=txt22; Params.ParamByName('no1').AsString:=no1; Params.ParamByName('no2').AsString:=no2; Params.ParamByName('no3').AsString:=no3; Params.ParamByName('no4').AsString:=no4; Params.ParamByName('no9').AsString:=no9; Execute; end; 執行後沒錯誤,資料表內容卻沒修改,請問語法哪錯了.
YUIOPMM
一般會員


發表:3
回覆:3
積分:1
註冊:2004-08-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-05 18:32:36 IP:202.154.xxx.xxx 未訂閱
確定此條件下有值嗎?????
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-06 06:49:05 IP:211.76.xxx.xxx 未訂閱
發表人 - mirage 於 2004/08/06 06:50:42
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-06 06:49:20 IP:211.76.xxx.xxx 未訂閱
引言: 確定此條件下有值嗎?????
確定每一資料表欄位及Tedit,都有值.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-06 09:43:01 IP:210.65.xxx.xxx 未訂閱
Hi mirage,    試試看以下寫法
txt22 := 'Update db1 SET no1=:no1,no2=:no2,';
txt22 := txt22   'no3=:no3,no4=:no4';
txt22 := txt22   ' where no9=:no9';
With SimpleDataSet1 do
    begin
        Close;
        Params.Clear;
        Dataset.CommandText := txt22;
        DataSet.Params.ParseSQL(SimpleDataSet1.DataSet.CommandText,True);       
        Dataset.Params.ParamByName('no1').AsString := edit1.text;
        Dataset.Params.ParamByName('no2').AsString := edit2.text;
        Dataset.Params.ParamByName('no3').AsString := edit3.text;
        Dataset.Params.ParamByName('no4').AsString := edit4.text;
        Dataset.Params.ParamByName('no9').AsString := edit5.text;
        Execute;
    end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-06 18:39:21 IP:211.76.xxx.xxx 未訂閱
引言: Hi mirage, 試試看以下寫法
txt22 := 'Update db1 SET no1=:no1,no2=:no2,';
txt22 := txt22   'no3=:no3,no4=:no4';
txt22 := txt22   ' where no9=:no9';
With SimpleDataSet1 do
    begin
        Close;
        Params.Clear;
        Dataset.CommandText := txt22;
        DataSet.Params.ParseSQL(SimpleDataSet1.DataSet.CommandText,True);       
        Dataset.Params.ParamByName('no1').AsString := edit1.text;
        Dataset.Params.ParamByName('no2').AsString := edit2.text;
        Dataset.Params.ParamByName('no3').AsString := edit3.text;
        Dataset.Params.ParamByName('no4').AsString := edit4.text;
        Dataset.Params.ParamByName('no9').AsString := edit5.text;
        Execute;
    end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ---------------------------------- < face="Verdana, Arial, Helvetica"> 上述執行後出現錯誤 SimpleDataSet1:parameter 'no1' not found 另 如在SimpleDataSet1的 1.DataSet.CommandText輸入 Update db1 SET no1=:no1,no2=:no2, no3=:no3,no4=:no4 where no9=:no9 2.Params加入l_no with SimpleDataSet1 do begin Close; DataSet.Params.ParseSQL(SimpleDataSet1.DataSet.CommandText,True); Dataset.Params.ParamByName('no1').AsString := edit1.text; Dataset.Params.ParamByName('no2').AsString := edit2.text; Dataset.Params.ParamByName('no3').AsString := edit3.text; Dataset.Params.ParamByName('no4').AsString := edit4.text; Dataset.Params.ParamByName('no9').AsString := edit5.text; Execute; end; 第1次執行後沒錯誤,資料表內容卻沒修改. 第2次執行時出現: dbexpress reror:[0x0009]:invalid parameter
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-06 21:29:04 IP:211.20.xxx.xxx 未訂閱
引言: txt22:='Update db1 SET no1=:no1,no2=:no2,'; txt22:=txt22 'no3=:no3,no4=:no4'; txt22:=txt22 ' where no9=:no9'; With SimpleDataSet1 do begin dataset.CommandText:=txt22; Params.ParamByName('no1').AsString:=edit1.text; Params.ParamByName('no2').AsString:=edit2.text; Params.ParamByName('no3').AsString:=edit3.text; Params.ParamByName('no4').AsString:=edit4.text; Params.ParamByName('no9').AsString:=edit5.text; Execute; end; 執行後沒錯誤,資料表內容卻沒修改,請問語法哪錯了.
mirage 你好 應該是沒有符合Where no9=:no9 條件的記錄吧!是否可以確定一下在Table 中是否存Edit5.Text的值呢? 以程式碼來看沒有問題呀! _______________________________________ 深藍的魚,祝您好運..........連連
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-06 23:12:47 IP:211.76.xxx.xxx 未訂閱
引言:
引言: txt22:='Update db1 SET no1=:no1,no2=:no2,'; txt22:=txt22 'no3=:no3,no4=:no4'; txt22:=txt22 ' where no9=:no9'; With SimpleDataSet1 do begin dataset.CommandText:=txt22; Params.ParamByName('no1').AsString:=edit1.text; Params.ParamByName('no2').AsString:=edit2.text; Params.ParamByName('no3').AsString:=edit3.text; Params.ParamByName('no4').AsString:=edit4.text; Params.ParamByName('no9').AsString:=edit5.text; Execute; end; 執行後沒錯誤,資料表內容卻沒修改,請問語法哪錯了.
mirage 你好 應該是沒有符合Where no9=:no9 條件的記錄吧!是否可以確定一下在Table 中是否存Edit5.Text的值呢? 以程式碼來看沒有問題呀! _______________________________________ 深藍的魚,祝您好運..........連連
我確定都有相同值, 另相同的程式碼,用 clientdataset DataSetProvider SQLQuery 卻能正常修改. 我在想SimpleDataSet這元件,很怪異喔.....
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-07 17:52:36 IP:219.129.xxx.xxx 未訂閱
引言: txt22:='Update db1 SET no1=:no1,no2=:no2,'; txt22:=txt22 'no3=:no3,no4=:no4'; txt22:=txt22 ' where no9=:no9'; With SimpleDataSet1 do begin dataset.CommandText:=txt22; Params.ParamByName('no1').DataType:=ftstring; Params.ParamByName('no1').AsString:=edit1.text; Params.ParamByName('no2').DataType:=ftstring; Params.ParamByName('no2').AsString:=edit2.text; Params.ParamByName('no3').DataType:=ftstring; Params.ParamByName('no3').AsString:=edit3.text; Params.ParamByName('no4').DataType:=ftstring; Params.ParamByName('no4').AsString:=edit4.text; Params.ParamByName('no9').DataType:=ftstring; Params.ParamByName('no9').AsString:=edit5.text; Execute; end; 執行後沒錯誤,資料表內容卻沒修改,請問語法哪錯了.
插个花:补上上面几句试试看 ——行径窄处,留一步与人行—— ——
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-08 11:40:32 IP:211.76.xxx.xxx 未訂閱
引言:
引言: txt22:='Update db1 SET no1=:no1,no2=:no2,'; txt22:=txt22 'no3=:no3,no4=:no4'; txt22:=txt22 ' where no9=:no9'; With SimpleDataSet1 do begin dataset.CommandText:=txt22; Params.ParamByName('no1').DataType:=ftstring; Params.ParamByName('no1').AsString:=edit1.text; Params.ParamByName('no2').DataType:=ftstring; Params.ParamByName('no2').AsString:=edit2.text; Params.ParamByName('no3').DataType:=ftstring; Params.ParamByName('no3').AsString:=edit3.text; Params.ParamByName('no4').DataType:=ftstring; Params.ParamByName('no4').AsString:=edit4.text; Params.ParamByName('no9').DataType:=ftstring; Params.ParamByName('no9').AsString:=edit5.text; Execute; end; 執行後沒錯誤,資料表內容卻沒修改,請問語法哪錯了.
插个花:补上上面几句试试看 ——行径窄处,留一步与人行—— ——>< face="Verdana, Arial, Helvetica"> deity 先進您好: txt22:='Update db1 SET no1=:no1,no2=:no2,'; txt22:=txt22 'no3=:no3,no4=:no4'; txt22:=txt22 ' where no9=:no9'; With SimpleDataSet1 do begin close; DataSet.Params.Clear; dataset.CommandText:=txt22; DataSet.Params.ParseSQL(SimpleDataSet1.DataSet.CommandText,True); Params.ParamByName('no1').DataType:=ftstring; Params.ParamByName('no1').AsString:=edit1.text; Params.ParamByName('no2').DataType:=ftstring; Params.ParamByName('no2').AsString:=edit2.text; Params.ParamByName('no3').DataType:=ftstring; Params.ParamByName('no3').AsString:=edit3.text; Params.ParamByName('no4').DataType:=ftstring; Params.ParamByName('no4').AsString:=edit4.text; Params.ParamByName('no9').DataType:=ftstring; Params.ParamByName('no9').AsString:=edit5.text; Execute; end; 請問先進: 第一次執行時正確update資料. 第2次執行時出現: ’no value for parameter 'no1' ’ 請問原因是什麼 ???
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-08-08 23:22:44 IP:219.129.xxx.xxx 未訂閱
mirage您好: 从字面上看,应该是您第二次update的时候,edit1.text没有赋值,所以不行;或按F8跟踪下去,看第二次edit1.text出现什么异常,试试看 ——行径窄处,留一步与人行—— ——
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-08-10 16:54:26 IP:211.75.xxx.xxx 未訂閱
如果不好Debug,建議改成以下
var 
  sqlstr:String;
begin
sqlstr:='';
sqlstr := 'Update db1 SET no1=:' edit1.text 
          ',no2=:' edit2.text 
          ',no3=:' edit3.text 
          ',no4=:' edit4.text 
          ',no9=:' edit5.text;
With SimpleDataSet1 do
    begin
        Close;
        Params.Clear;
        Dataset.CommandText := sqlstr;
        SHOWMESSAGE(sqlstr);
        DataSet.Params.ParseSQL(SimpleDataSet1.DataSet.CommandText,True);       
        Execute;
    end;
end;
如此一來就可以由sqlstr看出是那個條件錯誤了,TRY TRY SEE
系統時間:2024-09-18 13:48:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!