SQL的語法SQL.text與SQL.add |
答題得分者是:deity
|
qqking
一般會員 發表:16 回覆:18 積分:6 註冊:2005-05-12 發送簡訊給我 |
|
shinjie
資深會員 發表:12 回覆:275 積分:287 註冊:2003-03-19 發送簡訊給我 |
用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 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
您好:
可以说是相通的,采用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 發送簡訊給我 |
感謝各位大哥...
不過我嘗試一下改書上的語法,卻錯誤?!我貼一下我改的...抱歉版面有點亂:)
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 發送簡訊給我 |
引言:看了下,没什么错误,您按上面改改再试试 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ >不過我嘗試一下改書上的語法,卻錯誤?!我貼一下我改的...抱歉版面有點亂:) 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'; |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
qqking
一般會員 發表:16 回覆:18 積分:6 註冊:2005-05-12 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
qqking
一般會員 發表:16 回覆:18 積分:6 註冊:2005-05-12 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
qqking
一般會員 發表:16 回覆:18 積分:6 註冊:2005-05-12 發送簡訊給我 |
引言: access下設 eno:數字 name:文字 age:數字 addr:文字 但都設.asstring不是都全指定了嗎? <--没错!不管原先是什么类型,通过 AsString 后,赋给它 String 资料 就行(或者下 AsValue 等也可) 至于会出现问题,小弟也是百思不得其解,> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > >>< face="Verdana, Arial, Helvetica"> 感謝各位大哥的幫忙^^~ 小弟獲益良多...... 問題已移交【會員求助區】........ 再次感謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |