線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2583
推到 Plurk!
推到 Facebook!

SQL的語法SQL.text與SQL.add

答題得分者是:deity
qqking
一般會員


發表:16
回覆:18
積分:6
註冊:2005-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-04 14:32:52 IP:59.113.xxx.xxx 未訂閱
大家好...麻煩大家幫小弟入手 我常看到書中的語法是: Query1.SQL.Add('select * from tablename'); 但有最近有看到這樣的語法: Query1.SQL.text:='select * from tablename'; 麻煩各位位小弟解釋一下...這是相通用法嗎 順便再請教這樣的語法: 【ParamByName】.....要如何使用ㄋ 請大家賜教
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-04 14:51:20 IP:203.73.xxx.xxx 未訂閱
用Add的話,通常之前要加個Clear,把舊的SQL清掉,而且可以Add多行SQL, 例:Query1.SQL.Clear; Query1.SQL.Add('select * from tablename'); Query1.SQL.Add(' Order by XXX'); 用Text的話,會自動把舊的SQL取代成新的SQL,多行的話要自已用 號連結。 ParamByName是指傳送參數值給SQL 例:Query1.SQL.Add('select * from tablename where No=:sNO'); Query1.ParamByName('sNO').Asstring:='條件值'; ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-04 14:53:54 IP:218.163.xxx.xxx 未訂閱
Sql.add表示從已存在的Tstrings內容在後面加入新的內容 S1l.text表示直接把新的內容覆蓋Tstrings原有內容 ParamByName('yourname') 可在Object inspetor新增param。用法是參考help 星期一,星期二...星期日..星期一..無窮迴圈@@
------
星期一,二...無窮迴圈@@
deity
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-04 14:59:57 IP:218.15.xxx.xxx 未訂閱
您好: 可以说是相通的,采用ADD是将里面的语句(string),单句单句的放入Query的SQL语句(也即SQL.text)中,所以只是写法上不一样,不过有时如果SQL语句超长的话,可以单句单句分开写。
 
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from tablename');
  showmessage(Query1.SQL.Text); //从这里可以看出show出来的信息就是从上面add进去的
  Query1.Open;
ParamByName参数的调用:
 
var
  thename:string;      Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from tablename where name=:thename');
  Query1.ParamByName('thename').AsString:='qqking'; //传参数值
 // 作用相当于:
//  Query1.SQL.Add('select * from tablename where name="qqking"');
  showmessage(Query1.SQL.Text); //从这里可以看出show出来的信息就是从上面add进去的
  Query1.Open;
具体想了解清楚,得自己去看在线帮助和看书 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
qqking
一般會員


發表:16
回覆:18
積分:6
註冊:2005-05-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-04 15:36:36 IP:59.113.xxx.xxx 未訂閱
感謝各位大哥... 不過我嘗試一下改書上的語法,卻錯誤?!我貼一下我改的...抱歉版面有點亂:) procedure TForm1.Button1Click(Sender: TObject); VAR MAXENO : INTEGER; begin Query2.SQL.Clear; Query2.SQL.Add('SELECT MAX(ENO) AS MAXENO FROM TEST.DBF'); Query2.CLOSE; Query2.OPEN; MAXENO := Query2.FieldByName('MAXENO').AsInteger 1; Query2.SQL.Clear; Query2.SQL.Add('INSERT INTO TEST.DBF'); Query2.SQL.Add('( ENO ,'); Query2.SQL.Add(' NAME ,'); Query2.SQL.Add(' AGE ,'); Query2.SQL.Add(' ADDR '); Query2.SQL.Add(' ) VALUES ( '); Query2.SQL.Add(' ''' INTTOSTR(MAXENO) ''' ,'); Query2.SQL.Add(' ''' EDIT1.Text ''' , '); Query2.SQL.Add(' ''' EDIT2.Text ''' , '); Query2.SQL.Add(' ''' EDIT3.Text ''' ) '); Query2.ExecSQL; Query1.CLOSE; Query1.OPEN; end; 我將上述各位敎的改成 query2.sql.text :='insert into test.dbf (eno,name,age,addr) values (:eno,:name,:age,:addr)'; query2.ParamByName('eno').Asstring :=inttostr(maxeno); query2.ParamByName('name').Asstring :=edit1.Text; query2.ParamByName('age').Asstring :=edit2.Text; query2.ParamByName('addr').Asstring :=edit3.Text; 按下button後....當了 這是哪裡錯了嗎?....請各位大哥看看
deity
尊榮會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-04 15:56:54 IP:218.15.xxx.xxx 未訂閱
引言:
不過我嘗試一下改書上的語法,卻錯誤?!我貼一下我改的...抱歉版面有點亂:)
procedure TForm1.Button1Click(Sender: TObject);
VAR MAXENO : INTEGER;
begin
  Query2.Close;
  Query2.SQL.Clear;
  Query2.SQL.Text:='SELECT MAX(ENO) AS MAXENO FROM TEST.DBF';
  Query2.CLOSE;
  Query2.OPEN;
  MAXENO := Query2.FieldByName('MAXENO').AsInteger   1;
Query2.close;  
  Query2.SQL.Clear;
  Query2.SQL.Text:='insert into test.dbf (eno,name,age,addr) values (:eno,:name,:age,:addr)';
  query2.ParamByName('eno').Asstring :=inttostr(maxeno);
  query2.ParamByName('name').Asstring :=edit1.Text;
  query2.ParamByName('age').Asstring :=edit2.Text;
  query2.ParamByName('addr').Asstring :=edit3.Text;
  Query2.ExecSQL;
  Query1.CLOSE;
  Query1.OPEN;
  Query2.SQL.Add('INSERT INTO TEST.DBF');
  Query2.SQL.Add('( ENO  ,');
  Query2.SQL.Add('  NAME ,');
  Query2.SQL.Add('  AGE  ,');
  Query2.SQL.Add('  ADDR  ');
  Query2.SQL.Add(' ) VALUES ( ');
  Query2.SQL.Add(' ''' INTTOSTR(MAXENO) '''  ,');
  Query2.SQL.Add(' ''' EDIT1.Text  '''    , ');
  Query2.SQL.Add(' ''' EDIT2.Text  '''    , ');
  Query2.SQL.Add(' ''' EDIT3.Text  '''    ) ');

end;
我將上述各位敎的改成
query2.sql.text :='insert into test.dbf (eno,name,age,addr) values (:eno,:name,:age,:addr)';
query2.ParamByName('eno').Asstring :=inttostr(maxeno);
query2.ParamByName('name').Asstring :=edit1.Text;
query2.ParamByName('age').Asstring :=edit2.Text;
query2.ParamByName('addr').Asstring :=edit3.Text;
按下button後....當了
這是哪裡錯了嗎?....請各位大哥看看
看了下,没什么错误,您按上面改改再试试 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-04 16:12:12 IP:211.22.xxx.xxx 未訂閱
有什麼錯誤訊息呢? 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
qqking
一般會員


發表:16
回覆:18
積分:6
註冊:2005-05-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-04 17:28:32 IP:59.113.xxx.xxx 未訂閱
deity大哥,還是有問題....還是按下後----當 【 >
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-04 18:31:28 IP:202.62.xxx.xxx 未訂閱
引言: deity大哥,還是有問題....還是按下後----當 【 > < face="Verdana, Arial, Helvetica"> 您好﹗ 錯誤信息的意思為﹕類型不匹配 一般這樣的錯誤是出現在如下的範例中﹕
Var
  I: Integer;
begin
  I := 1000;
  ADOTable1.Edit;
  ADOTable1.FieldByName('姓名').AsString := I;
  ADOTable1.Post;
end;
//在資料表中﹐[姓名]欄位為字串形態﹐I變數是整數形態﹐在賦值的時候
//沒有先將I從整數形態轉換成字串形態就寫入資料庫﹐就會出現類型不匹配了
//改成如下即可
Var
  I: Integer;
begin
  I := 1000;
  ADOTable1.Edit;
  ADOTable1.FieldByName('姓名').AsString := IntToStr(I);  
  ADOTable1.Post;
end;
檢查一下您的程式碼中是否存在這樣的問題﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/08/04 18:36:13
------
忻晟
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-08-04 20:27:52 IP:61.59.xxx.xxx 未訂閱
請問你的 Query2.ParamCheck 是否有設定為 True ? 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
qqking
一般會員


發表:16
回覆:18
積分:6
註冊:2005-05-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-08-05 08:52:07 IP:59.113.xxx.xxx 未訂閱
引言: 請問你的 Query2.ParamCheck 是否有設定為 True ? 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
雪龍大 是true...我改成false...run後出現 【query2:parameter 'eno' not found】 那問題是出在?.... 對了,當程式出錯後...指標都是停在【query1.close;】 越來越霧煞煞了
deity
尊榮會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-08-05 09:35:48 IP:218.15.xxx.xxx 未訂閱
qqking您好: 如cashxin版大所说,type mismatch expression为類型不匹配的意思,另Query2.ParamCheck 应设为True(default值)才对,您误会了bestlong兄说的意思,bestlong兄的意思是看看Query2.ParamCheck是否为True,是True的话就不用去改。 最后,提示出类型不匹配,您去资料表看看ENO,NAME,AGE , ADDR 这几个字段类型是不是都是Alpha(string\文本)。或者您可以将表结构放上来,或将代码放入会员求助区。SQL语法上应该没什么错误的。     <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
qqking
一般會員


發表:16
回覆:18
積分:6
註冊:2005-05-12

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-08-05 10:34:30 IP:59.113.xxx.xxx 未訂閱
引言: qqking您好: 如cashxin版大所说,type mismatch expression为類型不匹配的意思,另Query2.ParamCheck 应设为True(default值)才对,您误会了bestlong兄说的意思,bestlong兄的意思是看看Query2.ParamCheck是否为True,是True的话就不用去改。 最后,提示出类型不匹配,您去资料表看看ENO,NAME,AGE , ADDR 这几个字段类型是不是都是Alpha(string\文本)。或者您可以将表结构放上来,或将代码放入会员求助区。SQL语法上应该没什么错误的。 ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
deity兄您好
deity
尊榮會員


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-08-05 11:35:36 IP:218.15.xxx.xxx 未訂閱
access下設 eno:數字 name:文字 age:數字 addr:文字 但都設.asstring不是都全指定了嗎? <--没错!不管原先是什么类型,通过 AsString 后,赋给它 String 资料 就行(或者下 AsValue 等也可) 至于会出现问题,小弟也是百思不得其解,> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
qqking
一般會員


發表:16
回覆:18
積分:6
註冊:2005-05-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-08-05 14:22:31 IP:59.113.xxx.xxx 未訂閱
引言: access下設 eno:數字 name:文字 age:數字 addr:文字 但都設.asstring不是都全指定了嗎? <--没错!不管原先是什么类型,通过 AsString 后,赋给它 String 资料 就行(或者下 AsValue 等也可) 至于会出现问题,小弟也是百思不得其解,> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ < face="Verdana, Arial, Helvetica"> 感謝各位大哥的幫忙^^~ 小弟獲益良多...... 問題已移交【會員求助區】........ 再次感謝
系統時間:2024-07-01 21:46:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!